Halcon 学习笔记三:形态学

简介: Halcon 学习笔记三:形态学

一、 形态学概念

1.腐蚀

2.膨胀

3.开操作和闭操作

开操作:先腐蚀后膨胀 (去噪)

闭操作:先膨胀后腐蚀 (填充孔洞)

4.图像处理一般流程

采集->预处理->寻找特征->显示

预处理:滤波、gray、scale

寻找特征: 形态学、blob分析…

二、例子详解

打开电路板的一个例子(ball.hdev)

操作流程就是 二值化->形态学->select_shape

注意二值化的结果(Bright)是一个区域,不是图像

threshold (Bond, Bright, 100, 255)

补充:halcon中的三大数据类型,图像,区域,xld(亚像素轮廓)

这一步是根据区域获取最小外接矩形的

shape_trans (Bright, Die, 'rectangle2')

选择感兴趣区域(Bond是图像,Die是区域(mask),DieGrey是输出的图片)

reduce_domain (Bond, Die, DieGrey)

通过reduce_domain确实能获得特定区域Region位置的图像,但是,reduce_domain是缩小一个图像的定义域,并不缩小图像的实际尺寸,即新图像ImageReduced尺寸大小并未发生变化。如果使用get_image_size来计算ImageReduced图像的尺寸,其尺寸和 原图Image一样。

并且,包括一系列的domain算子,比如change_domain,均不改变图像矩阵的大小。

将区域面积1~100的进行填充

fill_up_shape (Wires, WiresFilled, 'area', 1, 100)

开操作(圆形结构元素)

最后会保留圆形的居多,15.5是圆形结构元素半径(如果对圆感兴趣,就用圆结构元素,如果对矩形感兴趣,就用矩形结构元素)

opening_circle (WiresFilled, Balls, 15.5)

计算连通域

connection (Balls, SingleBalls)

根据形状特征选择区域(圆度0.85~1.0之间的)

select_shape (SingleBalls, IntermediateBalls, 'circularity', 'and', 0.85, 1.0)

对区域进行排序(first_point代表区域中列值(col)最小的点,column代表按列排序,true代表从小到大排。也就是说这行代码的意思是,让从区域按列从小到大排列)

sort_region (IntermediateBalls, FinalBalls, 'first_point', 'true', 'column')

对每个区域求最小外接圆(获得Row,Column,Radius)

smallest_circle (FinalBalls, Row, Column, Radius)

可以看到,列确实是从小到到大排列的

显示圆

disp_circle (WindowID, Row, Column, Radius)

完整代码

* ball.hdev: Inspection of Ball Bonding
* 
dev_update_window ('off')
dev_close_window ()
dev_open_window (0, 0, 728, 512, 'black', WindowID)
read_image (Bond, 'die/die_03')
dev_display (Bond)
set_display_font (WindowID, 14, 'mono', 'true', 'false')
disp_continue_message (WindowID, 'black', 'true')
stop ()
threshold (Bond, Bright, 100, 255)
shape_trans (Bright, Die, 'rectangle2')
dev_set_color ('green')
dev_set_line_width (3)
dev_set_draw ('margin')
dev_display (Die)
disp_continue_message (WindowID, 'black', 'true')
stop ()
reduce_domain (Bond, Die, DieGrey)
threshold (DieGrey, Wires, 0, 50)
fill_up_shape (Wires, WiresFilled, 'area', 1, 100)
dev_display (Bond)
dev_set_draw ('fill')
dev_set_color ('red')
dev_display (WiresFilled)
disp_continue_message (WindowID, 'black', 'true')
stop ()
opening_circle (WiresFilled, Balls, 15.5)
dev_set_color ('green')
dev_display (Balls)
disp_continue_message (WindowID, 'black', 'true')
stop ()
connection (Balls, SingleBalls)
select_shape (SingleBalls, IntermediateBalls, 'circularity', 'and', 0.85, 1.0)
sort_region (IntermediateBalls, FinalBalls, 'first_point', 'true', 'column')
dev_display (Bond)
dev_set_colored (12)
dev_display (FinalBalls)
disp_continue_message (WindowID, 'black', 'true')
stop ()
smallest_circle (FinalBalls, Row, Column, Radius)
NumBalls := |Radius|
Diameter := 2 * Radius
meanDiameter := mean(Diameter)
minDiameter := min(Diameter)
dev_display (Bond)
disp_circle (WindowID, Row, Column, Radius)
dev_set_color ('white')
disp_message (WindowID, 'D: ' + Diameter$'.4', 'image', Row - 2 * Radius, Column, 'white', 'false')
dev_update_window ('on')

最后补充:

腐蚀和膨胀(结构圆)

erosion_circle (WiresFilled, RegionErosion, 3.5)
dilation_circle (RegionErosion, RegionDilation, 3.5)

计算连通域个数

count_obj (SingleBalls, Number)

三、其他

性能评测器

可以打开这个,性能评测器

在最右端就可以看见每条代码的运行时间了

缩放窗口

可以根据鼠标位置来查看放大的图

绘制ROI区域

点击编辑ROI,绘制平行矩形

左键选择感兴趣区域,选取完后,点击右键,确定选取

选择完成后,可以进行插入代码

查看特征(特征检测)

对区域进行特征检测

可以查看一些特征的属性


相关文章
|
3月前
|
计算机视觉
Halcon 学习笔记八:颜色识别
Halcon 学习笔记八:颜色识别
94 0
|
4月前
|
算法
[Halcon&图像] 边缘提取算法汇总
[Halcon&图像] 边缘提取算法汇总
156 0
|
4月前
|
算法 计算机视觉
[Halcon&图像] 图像滤波算法原理
[Halcon&图像] 图像滤波算法原理
73 1
|
4月前
|
算法
[Halcon&图像] 图像阈值分割算法汇总
[Halcon&图像] 图像阈值分割算法汇总
67 0
|
4月前
|
编解码 对象存储 UED
[Halcon&标定] 单相机标定
[Halcon&标定] 单相机标定
97 1
|
4月前
|
计算机视觉
[Halcon&图像] 图像增强算子汇总
[Halcon&图像] 图像增强算子汇总
89 1
|
6月前
|
算法 C# C++
|
6月前
|
测试技术 C#
C# halcon SubImage的使用
C# halcon SubImage的使用
|
计算机视觉
【图像处理学习笔记】--图像直方图
图像直方图统计会灰度集出现的次数,主要运用于图像增强,图像分割,图像分类。
48 0
【图像处理学习笔记】--图像直方图
Halcon图像增强算子(直方图均衡化等)
Halcon图像增强算子(直方图均衡化等)
1226 0