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

文章目录

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

文章专栏

Halcon开发

Halcon学习 练习项目gitee仓库

CSDN Major 博主Halcon文章推荐

前言

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

文章解析

开头

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

Halcon Solution Guide I basics(4): Blob Analysis(连通性解析)_第1张图片
Blob分析具有特别好的效果,经常用于机器视觉的各种需求中。

在这里插入图片描述

步骤分析

  • 获取图片
  • 图片特征性分割
  • 特征获取
    Halcon Solution Guide I basics(4): Blob Analysis(连通性解析)_第2张图片

简单案例

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

Halcon Solution Guide I basics(4): Blob Analysis(连通性解析)_第3张图片

进阶方案

由于某些图像的复杂性要远远高于简单示例,所以可以按照一下步骤来进行机器视觉分析
Halcon Solution Guide I basics(4): Blob Analysis(连通性解析)_第4张图片

  • Acquire Image(s):获取图片
  • Use ROI
  • 调整图片的ROI
  • 矫正图片
  • 选取用于区分的特性,例如:灰度,面积,形状
  • 区分图片
  • 匹配图像特性
  • 将所有匹配的图像转换为世界坐标
  • 可视化结果
    Halcon Solution Guide I basics(4): Blob Analysis(连通性解析)_第5张图片

进阶代码案例

crystal,结晶匹配

示例路径: %HALCONEXAMPLES%/solution_guide/basics/crystal.hdev
模板,找到如下三个结晶块
Halcon Solution Guide I basics(4): Blob Analysis(连通性解析)_第6张图片

需求分析

Halcon Solution Guide I basics(4): Blob Analysis(连通性解析)_第7张图片

  • 我们需要找到结晶体。结晶体和气泡的区别就是结晶体有明显的六边形结构
  • 再对低区分度的图片进行区分的时候,我们用到mean_image来获得一个模糊的背景
  • 将原图片和模糊图片进行dyn_threshold,获取到高8个灰度的区域。因为图片的特点就是白背景,灰物体。灰物体涂抹后,亮度变高。叠放之后区域就是物体区域。
    Halcon Solution Guide I basics(4): Blob Analysis(连通性解析)_第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)

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

Halcon Solution Guide I basics(4): Blob Analysis(连通性解析)_第9张图片

你可能感兴趣的:(Halcon开发,机械视觉,Halcon)