当前位置: 首页 > news >正文

Halcon Solution Guide I basics(4): Blob Analysis(连通性解析)

文章目录

  • 文章专栏
  • 前言
  • 文章解析
    • 开头
    • 步骤分析
      • 简单案例
      • 进阶方案
    • 进阶代码案例
      • crystal,结晶匹配
        • 需求分析

文章专栏

Halcon开发

Halcon学习 练习项目gitee仓库

CSDN Major 博主Halcon文章推荐

前言

今天来看第三章内容,既然是零基础,而且我还有大概3-4个月的时间准备,我还是老老实实从头开始学机器视觉好了。

文章解析

开头

  • Blob 解析非常简单。
  • Blob通过亮度,将连通点和背景进行区分

在这里插入图片描述
Blob分析具有特别好的效果,经常用于机器视觉的各种需求中。

在这里插入图片描述

步骤分析

  • 获取图片
  • 图片特征性分割
  • 特征获取
    在这里插入图片描述

简单案例

* 读取案例图片
read_image (Image, 'particle')
* 灰度获取,灰度范围:120-255
threshold (Image, BrightPixels, 120, 255)
* 按照连通性对图像进行区分
connection (BrightPixels, Particles)
* 将分割好的图转化为对应的坐标数组(面积,中心点x,中心点y)
area_center (Particles, Area, Row, Column)

在这里插入图片描述

进阶方案

由于某些图像的复杂性要远远高于简单示例,所以可以按照一下步骤来进行机器视觉分析
在这里插入图片描述

  • Acquire Image(s):获取图片
  • Use ROI
  • 调整图片的ROI
  • 矫正图片
  • 选取用于区分的特性,例如:灰度,面积,形状
  • 区分图片
  • 匹配图像特性
  • 将所有匹配的图像转换为世界坐标
  • 可视化结果
    在这里插入图片描述

进阶代码案例

crystal,结晶匹配

示例路径: %HALCONEXAMPLES%/solution_guide/basics/crystal.hdev
模板,找到如下三个结晶块
在这里插入图片描述

需求分析

在这里插入图片描述

  • 我们需要找到结晶体。结晶体和气泡的区别就是结晶体有明显的六边形结构
  • 再对低区分度的图片进行区分的时候,我们用到mean_image来获得一个模糊的背景
  • 将原图片和模糊图片进行dyn_threshold,获取到高8个灰度的区域。因为图片的特点就是白背景,灰物体。灰物体涂抹后,亮度变高。叠放之后区域就是物体区域。
    在这里插入图片描述
  • 下一步我们就选择六边形的区域即可。因为结晶体是镂空图形,将所有的镂空图形转换为凸多边形。即填充空洞。
  • 然后进行图像面积匹配,面积必须是填充图形才可以。后面就是灰度匹配。
* crystal.hdev: extraction of hexagonally shaped crystals via local thresholding and region post-processing
* 
dev_close_window ()
dev_update_window ('off')
* ****
* 添加图片,设置图像填充格式,线条宽度等设置
* ****
read_image (Image, 'crystal')
get_image_size (Image, Width, Height)
dev_open_window_fit_image (Image, 0, 0, Width, Height, WindowID)
set_display_font (WindowID, 12, 'mono', 'true', 'false')
dev_set_draw ('margin')
dev_set_line_width (2)
dev_display (Image)
disp_continue_message (WindowID, 'black', 'true')
stop ()
* ****
* 区分图像
* ****
* -> 使用灰度进行区分
* 涂抹处理,将灰度范围变大
mean_image (Image, ImageMean, 21, 21)
* 叠放对比,获取灰度高8个单位的部分。
dyn_threshold (Image, ImageMean, RegionDynThresh, 8, 'dark')
* -> 将ROI连通区域区分
connection (RegionDynThresh, ConnectedRegions)
dev_display (ConnectedRegions)
disp_continue_message (WindowID, 'black', 'true')
stop ()
* ****
* 处理Region
* ****
* 将镂空图形空洞填充,变成凸多边形
shape_trans (ConnectedRegions, ConvexRegions, 'convex')
* 选择图片面积区域在600 - 2000的图像
select_shape (ConvexRegions, LargeRegions, 'area', 'and', 600, 2000)
* 选择[交叉熵]1-5.6的区域。简单来说就是不重叠的区域
select_gray (LargeRegions, Image, Crystals, 'entropy', 'and', 1, 5.6)
dev_display (Image)
dev_display (Crystals)

一文搞懂熵(Entropy),交叉熵(Cross-Entropy)

我感觉我单纯的翻译原文没啥好写的。还是直接上代码注释好了

在这里插入图片描述

相关文章:

  • 【Java】认识异常
  • 数据提取PDF SDK的对比推荐
  • Photoshop下载秘籍:附送7款不用下载的在线PS工具!
  • 12.docker的网络-host模式
  • ModuleNotFoundError: No module named ‘torch_sparse‘
  • 浅谈Linux bash脚本----getopts获取脚本POSIX标准传参
  • 弹窗msvcp140_1.dll丢失的解决方法,超简单的方法分享
  • TrustAsia亮相Matter开发者大会,荣获Matter优秀赋能者奖
  • 【Spring进阶系列丨第四篇】学习Spring中的Bean管理(基于xml配置)
  • Vue 2使用element ui 表格不显示
  • iOS APP包分析工具 | 京东云技术团队
  • 分库分表、分布式数据库、MPP
  • appium2.0+ 单点触控和多点触控新的解决方案
  • IDEA前端thymeleaf只显示部分数据库问题
  • 构建个性化预约服务:预约上门服务系统源码解读与实战
  • 《Javascript数据结构和算法》笔记-「字典和散列表」
  • 【node学习】协程
  • 230. Kth Smallest Element in a BST
  • css布局,左右固定中间自适应实现
  • CSS盒模型深入
  • Java到底能干嘛?
  • seaborn 安装成功 + ImportError: DLL load failed: 找不到指定的模块 问题解决
  • 初探 Vue 生命周期和钩子函数
  • 基于 Ueditor 的现代化编辑器 Neditor 1.5.4 发布
  • 普通函数和构造函数的区别
  • 软件开发学习的5大技巧,你知道吗?
  • 深度解析利用ES6进行Promise封装总结
  • 微信小程序设置上一页数据
  • 小程序测试方案初探
  • 自动记录MySQL慢查询快照脚本
  • 如何在招聘中考核.NET架构师
  • ​MySQL主从复制一致性检测
  • ​数据结构之初始二叉树(3)
  • #define、const、typedef的差别
  • #我与Java虚拟机的故事#连载19:等我技术变强了,我会去看你的 ​
  • (02)Hive SQL编译成MapReduce任务的过程
  • (2022 CVPR) Unbiased Teacher v2
  • (23)Linux的软硬连接
  • (9)STL算法之逆转旋转
  • (STM32笔记)九、RCC时钟树与时钟 第二部分
  • (第8天)保姆级 PL/SQL Developer 安装与配置
  • (二)什么是Vite——Vite 和 Webpack 区别(冷启动)
  • (南京观海微电子)——I3C协议介绍
  • (七)理解angular中的module和injector,即依赖注入
  • (原創) 系統分析和系統設計有什麼差別? (OO)
  • (转)3D模板阴影原理
  • (轉貼) 資訊相關科系畢業的學生,未來會是什麼樣子?(Misc)
  • ../depcomp: line 571: exec: g++: not found
  • .net 7 上传文件踩坑
  • .NET C# 配置 Options
  • .Net MVC + EF搭建学生管理系统
  • .net 流——流的类型体系简单介绍
  • .NET 线程 Thread 进程 Process、线程池 pool、Invoke、begininvoke、异步回调
  • .NET/C# 反射的的性能数据,以及高性能开发建议(反射获取 Attribute 和反射调用方法)
  • .NET/C# 使用 SpanT 为字符串处理提升性能