学习一下region的官方示例,看看有啥未知的知识点(五)

勇哥大致看了一下halcon中有关region相关的官方例程,还是有一些很趣的东西。

因此有个想法是把它全部滤一遍,在这里记录一下以备查。


  • 关闭边缘振幅图像的region边缘(close_edges)

  • region沿指定的点做镜像 (transpose_region)

  • region平移 (move_region )

  • 使用结构元素来扩展输入区域(minkowski_add1)

  • 使用结构化元素侵蚀区域(minkowski_sub1)

  • 延伸内容(总结下形态学算法:腐蚀、膨胀、开运算、闭运算、顶帽、黑帽、形态学梯度)


(1) 关闭边缘振幅图像的region边缘


image.png

这个是没有关闭边缘的边,它是sobel_算子找到的边,经过threshold过滤后的结果。

image.png


下图这个是算子close_edges关闭边缘后的效果

感觉这个算子还蛮有用处的,有点补全region边界的意思。

image.png


(二)region沿指定的点做镜像


观察下面程序的效果,会发现这种镜像是同时做了上下左右的镜像。


dev_close_window ()
dev_open_window (0, 0, 512, 512, 'white', WindowID)
dev_set_color ('black')
* Draw with the mouse an arbitrary region into the window
draw_region (Region, WindowID)
transpose_region (Region, Transposed, 203,239)
dev_clear_window ()
dev_set_draw ('margin')
dev_set_color ('red')
dev_display (Region)
dev_set_color ('green')
dev_display (Transposed)

image.png

下图是transpose_region算子的功能说明。


image.png


(三)region平移


move_region  用于平移Region,它很简单。有这种算子很好,避免了我们去做麻烦的仿射变换(它至少要3条指令)。

dev_close_window ()
dev_open_window (0, 0, 512, 512, 'white', WindowID)
dev_set_color ('black')
dev_set_draw ('margin')
dev_clear_window ()
* Draw with the mouse an arbitrary region into the window
draw_region (Region, WindowID)
area_center (Region, Area, Row1, Column1)
Button := 1
while (Button == 1)
    * Click to the position where the region should be placed
    * Use right mouse button to exit the loop
    get_mbutton (WindowID, Row, Column, Button)
    move_region (Region, RegionMoved, Row - Row1, Column - Column1)
endwhile

image.png

image.png


(四)使用结构元素来扩展输入区域


minkowski_add1使用结构元素来扩展输入区域。通过将minkowski_add1应用于区域,其边界将变得平滑。在此过程中,该区域的面积会扩大。此外,断开的区域可以合并。但是,这些区域在逻辑上仍然是不同的区域。

如果期望的行为是将它们合并为一个区域,则必须首先调用算子 union1


dev_clear_window()
dev_get_window(WindowHandle)
dev_set_draw('margin')
draw_region(Region1, WindowHandle)
draw_region(Region2, WindowHandle)
minkowski_add1(Region1, Region2, RegionMinkAdd, 1)
connection(RegionMinkAdd, ConnectedRegions)
count_obj(ConnectedRegions, n1)


下图中,鼠绘一个三角,再鼠绘了一个结构region。


image.png

下图是算子的效果


image.png

下图是minkowski_add1算子的原理示意:

image.png



(五)使用结构化元素侵蚀区域


minkowski_sub1使用结构化元素计算输入区域的Minkowski减法。通过将 minkowski_sub1应用于区域,其边界将变得平滑。在此过程中,该区域的面积减小了。此外,连接区域可以被分割。但是,这些区域在逻辑上保持为一个区域。

这个算子有点类似于erosion1


dev_clear_window()
dev_get_window(WindowHandle)
dev_set_draw('margin')
draw_region(Region1, WindowHandle)
draw_region(Region2, WindowHandle)
minkowski_sub1(Region1, Region2, RegionMinkAdd, 1)
connection(RegionMinkAdd, ConnectedRegions)
count_obj(ConnectedRegions, n1)

dev_set_color('blue')
dev_display(RegionMinkAdd)

image.png


(六)延伸内容

上面介绍的minkowski_add1之类的算子,是属于形态学的算子。

常见的形态学算法有:腐蚀、膨胀、开运算、闭运算、顶帽、黑帽、形态学梯度。

在halcon中,顶帽、黑帽、形态学梯度这些没有直接的算子,你可以按下面的说明通过几个算子组合而成。


*下面的代码都属于“腐蚀、膨胀、开运算、闭运算”类型的形态学算子

*开运算
opening(ConnectedRegions, ConnectedRegions, RegionOpening1)
*闭运算
closing(RegionOpening1, RegionOpening1, RegionClosing1)
*腐蚀
erosion1(RegionClosing1, RegionClosing1, RegionErosion1, 1)
*膨胀
dilation1(RegionErosion1, RegionErosion1, RegionDilation1, 1)
*圆形结构开运算
opening_circle(ConnectedRegions, RegionOpening, 3.5)
*圆形结构闭运算
closing_circle(RegionOpening, RegionClosing, 3.5)
*圆形结构腐蚀
erosion_circle(RegionClosing, RegionErosion, 3.5)
*圆形结构膨胀
dilation_circle(RegionErosion, RegionDilation, 3.5)
*结构膨胀
minkowski_add1(RegionDilation, RegionDilation, RegionMinkAdd1, 1)
*结构腐蚀
minkowski_sub1(RegionMinkAdd1, RegionMinkAdd1, RegionMinkSub, 1)


开运算(open)

开运算是先腐蚀后膨胀的过程,可以用来消除小物体(下图白色),在纤细处分离物体,并在平滑较大物体边界的同时不明显的改变其面积。

image.png


闭运算(close)

闭运算是先膨胀后腐蚀的过程,可以用来消除小型黑洞(下图文字中黑色区域)

image.png


形态学梯度(Gradient)

形态学梯度是膨胀图与腐蚀图之差,对二值图可以将团块(blob)边缘凸显出来,可以用来保留对象边缘轮廓。

这个在halcon中没有直接的算子。

image.png


顶帽(Top Hat)

顶帽运算也称为“礼帽”,是闭运算结果和原图做差的结果,可以用来分离比邻近点亮一些的斑块。

image.png


黑帽(Black Hat)

黑帽运算是原图像和开运算做差的结果,可以用来分离比邻近点暗一些的斑块。

image.png



--------------------- 

作者:hackpig

来源:www.skcircle.com

版权声明:本文为博主原创文章,转载请附上博文链接!


本文出自勇哥的网站《少有人走的路》wwww.skcircle.com,转载请注明出处!讨论可扫码加群:

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

会员中心
搜索
«    2024年4月    »
1234567
891011121314
15161718192021
22232425262728
2930
网站分类
标签列表
最新留言
    热门文章 | 热评文章 | 随机文章
文章归档
友情链接
  • 订阅本站的 RSS 2.0 新闻聚合
  • 扫描加本站机器视觉QQ群,验证答案为:halcon勇哥的机器视觉
  • 点击查阅微信群二维码
  • 扫描加勇哥的非标自动化群,验证答案:C#/C++/VB勇哥的非标自动化群
  • 扫描加站长微信:站长微信:abc496103864
  • 扫描加站长QQ:
  • 扫描赞赏本站:
  • 留言板:

Powered By Z-BlogPHP 1.7.2

Copyright Your skcircle.com Rights Reserved.

鄂ICP备18008319号


站长QQ:496103864 微信:abc496103864