工控编程吧
标题:
工业视觉halcon 形态学closing函数介绍
[打印本页]
作者:
qq263946146
时间:
2019-6-1 17:06
标题:
工业视觉halcon 形态学closing函数介绍
1.closing(Region, StructElement : RegionClosing : : )
closing操作被定义为膨胀后的闵可夫斯减法。
通过对一个区域进行
closing
,
较大的结构基本保持完整,
相邻区域之间的小间隙和小于
StructElement
的孔被封闭,区域边界被平滑。
所有
closing
变量都共享一个属性,即不同的区域没有合并,但仍然是不同的对象。
StructElement的位置是没有意义的,因为关闭操作对于参考点的选择是不变的。
可以使用
gen_circle、
gen_rectangle1、
gen_rectangle2、
gen_ellipse、
draw_region、
gen_region_polygon、
gen_region_points等操作符生成结构化元素(StructElement)。
例程:
read_image (Image, 'printer_chip/printer_chip_01')
threshold (Image, Region, 128, 255)
connection (Region, ConnectedRegions)
gen_circle (Circle, 200, 200, 100.5)
closing (ConnectedRegions, Circle, RegionClosing)
执行例程,closing 函数用圆形结构Circle对ConnectedRegions进行闭合运算,
ConnectedRegions内的区域孔洞被填充。
2.closing_circle(Region : RegionClosing : Radius : )
closing_circle的行为类似于上面的 closing函数,
即,对区域边界进行光滑处理,封闭Radius 小于圆形结构单元的区域内的孔洞。
closing_circle操作被定义为一个膨胀,然后是Minkowski减法,两者都具有相同的圆形结构元素。
例程:
dev_update_window ('off')
read_image (Fins, 'fin' + [1:3])
get_image_size (Fins, Width, Height)
dev_close_window ()
dev_open_window (0, 0, Width[0], Height[0], 'black', WindowID)
set_display_font (WindowID, 14, 'mono', 'true', 'false')
for I := 1 to 3 by 1
select_obj (Fins, Fin, I)
dev_display (Fin)
binary_threshold (Fin, Background, 'max_separability', 'light', UsedThreshold)
dev_set_color ('blue')
dev_set_draw ('margin')
dev_set_line_width (4)
dev_display (Background)
disp_continue_message (WindowID, 'black', 'true')
stop ()
closing_circle (Background, ClosedBackground, 250)
dev_set_color ('green')
dev_display (ClosedBackground)
disp_continue_message (WindowID, 'black', 'true')
stop ()
difference (ClosedBackground, Background, RegionDifference)
opening_rectangle1 (RegionDifference, FinRegion, 5, 5)
dev_display (Fin)
dev_set_color ('red')
dev_display (FinRegion)
area_center (FinRegion, FinArea, Row, Column)
if (I < 3)
disp_continue_message (WindowID, 'black', 'true')
stop ()
endif
endfor
执行例程,可以看到,区域的边缘毛刺被去除了,
这也是这个函数的功能 之一。
3.closing_rectangle1(Region : RegionClosing : Width, Height : )
closing_rectangle1在输入区域
Region 上执行一个dilation_rectangle1和一个erosion_rectangle1。
矩形结构单元的大小由参数的Width, Height决定。
与所有closing变量一样,区域边界被平滑,小于矩形结构元素的区域内的孔被闭合。
例程:
* 例程序展示如何使用dots_image分割点打印。
read_image (Image, 'needle1')
get_image_size (Image, Width, Height)
dev_close_window ()
dev_open_window (0, 0, Width, Height, 'black', WindowHandle)
* 原图像很容易分割,我们将通过在图像中添加背景纹理来增加难度
read_image (ImageNoise, 'angio-part')
crop_part (ImageNoise, ImagePart, 0, 0, Width, Height)
mult_image (Image, ImagePart, ImageResult, 0.015, 0)
* 使用dots_image增强点打印
dots_image (ImageResult, DotImage, 5, 'dark', 2)
threshold (DotImage, Region, 80, 255)
* 下面的代码将各个点连接成字符。
closing_rectangle1 (Region, RegionClosing1, 1, 5)
closing_rectangle1 (RegionClosing1, RegionClosing2, 5, 1)
gen_rectangle2 (Rectangle, 10, 10, rad(45), 3, 0)
closing (RegionClosing2, Rectangle, RegionClosing3)
gen_rectangle2 (Rectangle, 10, 10, rad(135), 3, 0)
closing (RegionClosing3, Rectangle, RegionClosing4)
connection (RegionClosing4, ConnectedRegions)
select_shape (ConnectedRegions, SelectedRegions, ['area','height'], 'and', [100,20], [700,40])
*由于closings可能导致合并字符,我们需要再次分离它们。
partition_dynamic (SelectedRegions, Partitioned, 25, 20)
*最后,我们计算字符的原始形状。
intersection (Partitioned, Region, Characters)
dev_set_color ('red')
dev_display (ImageResult)
dev_display (Characters)
[halcon]1[/halcon]
欢迎光临 工控编程吧 (https://www.gkbc8.com/)
Powered by Discuz! X3.4