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,绘制平行矩形

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

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

查看特征(特征检测)

对区域进行特征检测

可以查看一些特征的属性


相关文章
halcon的灰度变换(图像增强)
halcon的灰度变换(图像增强)
1356 1
Halcon找圆系列(1)如何检测圆形
Halcon找圆系列(1)如何检测圆形
2909 0
Halcon找圆系列(1)如何检测圆形
|
算法 数据可视化
Halcon边缘检测和线条检测(3),文章含BLOB检测常用方法和shape_trans内接和外接算子的说明
Halcon边缘检测和线条检测(3),文章含BLOB检测常用方法和shape_trans内接和外接算子的说明
2999 0
Halcon边缘检测和线条检测(3),文章含BLOB检测常用方法和shape_trans内接和外接算子的说明
halcon算子模板匹配(一)基于形状的模板匹配
halcon算子模板匹配(一)基于形状的模板匹配
5092 0
|
机器学习/深度学习 文字识别 算法
[Halcon&图像] 缺陷检测的一些思路、常规检测算法
[Halcon&图像] 缺陷检测的一些思路、常规检测算法
7695 2
|
计算机视觉
[Halcon&图像] 形态学处理(腐蚀、膨胀、开运算、闭运算)
[Halcon&图像] 形态学处理(腐蚀、膨胀、开运算、闭运算)
1411 1
|
资源调度 算法
[Halcon&测量] 一维测量
[Halcon&测量] 一维测量
756 0
[Halcon&测量] 一维测量
|
算法
halcon系列之直线拟合和圆形拟合算子
halcon系列之直线拟合和圆形拟合算子
2038 0
|
计算机视觉
Halcon 学习笔记八:颜色识别
Halcon 学习笔记八:颜色识别
1575 0
|
计算机视觉
halcon系列基础之Scale_image_range
halcon系列基础之Scale_image_range
935 0

热门文章

最新文章