形态学相关算子

 

腐蚀:利用n*n的结构元素扫描图像的每一个像素,结构元素原点与扫描像素覆盖,进行“与”运算,如果都为1,则结果图像的该像素为1,否则为0。(收缩图像)

膨胀:利用n*n的结构元素扫描图像的每一个像素,结构元素原点与扫描像素覆盖,进行“与”运算,如果都为0,则结果图像的该像素为0,否则为1。(扩大图像)

腐蚀是求局部最小值的操作,结构元沿着图像逐像素滑动,计算结构元覆盖的区域的像素点的最小值,并把这个最小值赋值给结构元原点覆盖的像素点,这种操作可以将图像中小于结构元的细节部分滤除掉。

膨胀操作则与腐蚀相反,结构元覆盖的区域会被拓展

region边界应用:

原图 - 腐蚀后 = 内边界

原图 - 膨胀后 = 外边界

 

1.gen_disc_se

功能:创建椭圆形结构元素,用于图像的腐蚀膨胀

2.gray_erosion

功能:使用结构元素对图像做腐蚀操作

3.gray_dilation

功能:使用结构元素对图像做膨胀操作

4.erosion_circle

功能:使用圆形结构元素对区域region做腐蚀操作

5.erosion_rectangle1

功能:使用矩形结构元素对区域region做腐蚀操作

6.dilation_circle

功能:使用圆形结构元素对区域region做膨胀操作

7.dilation_rectangle1

功能:使用矩形结构元素对区域region做膨胀操作

8.erosion1

功能:使用结构元素对区域region做迭代腐蚀操作

9.erosion2

功能:使用结构元素对区域region做迭代腐蚀操作(可设置结构元素原点)

10.dilation1

功能:使用结构元素对区域region做迭代膨胀操作

11.dilation2

功能:使用结构元素对区域region做迭代膨胀操作(可设置结构元素原点)

12.minkowski_add1

功能:使用结构元素对区域region做闵可夫斯基加法操作

13.minkowski_add2

功能:使用结构元素对区域region做闵可夫斯基加法操作(可设置结构元素原点)

如果结构元素对称,则闵可夫斯基加法与膨胀效果一样

如果结构元素不对称,则闵可夫斯基加法与膨胀效果不一样

14.minkowski_sub1

功能:使用结构元素对区域region做闵可夫斯基减法操作

15.minkowski_sub2

功能:使用结构元素对区域region做闵可夫斯基减法操作(可设置结构元素原点)

如果结构元素对称,则闵可夫斯基减法与腐蚀效果一样

如果结构元素不对称,则闵可夫斯基减法与腐蚀效果不一样

16.hit_or_miss

功能:对区域region做击中与击不中区域计算

 

****************************开运算****************************

 

先腐蚀后膨胀,用来消除小物体,分离物体,平滑较大物体的边界,扩大暗背景,收缩亮前景。

1.opening

功能:使用结构元素对区域region做开运算

2.opening_circle

功能:使用圆形结构元素对区域region做开运算

3.opening_rectangle1

功能:使用矩形结构元素对区域region做开运算

4.gray_opening

功能:使用灰度值结构元素对图像做开运算

5.gray_opening_rect

功能:使用矩形灰度值结构元素对图像做开运算

6.gray_opening_shape

功能:使用多边形灰度值结构元素对图像做开运算

****************************闭运算****************************

先膨胀后腐蚀,用来填充物体内部细小孔洞,连接邻近物体,平滑边界,扩大亮前景,收缩暗背景。

1.closing

功能:使用结构元素对区域region做闭运算

2.closing_circle

功能:使用圆形结构元素对区域region做闭运算

3.closing_rectangle1

功能:使用矩形结构元素对区域region做闭运算

4.gray_closing

功能:使用灰度值结构元素对图像做闭运算

5.gray_closing_rect

功能:使用矩形灰度值结构元素对图像做闭运算

6.gray_closing_shape

功能:使用多边形灰度值结构元素对图像做闭运算

****************************顶帽(礼帽)变换****************************

顶帽运算往往用来分离比邻近点亮一些的斑块。(顶帽变换结果 = 原始图像 - 开运算结果

当一幅图像具有大幅的背景的时候,而微小物品比较有规律的情况下,可以使用顶帽运算进行背景提取。

dev_close_window ()
read_image(Image, 'E:/MyHalcon/yzm.png')
dev_open_window_fit_image (Image, 0, 0, -1, -1, WindowHandle)
dev_display (Image)
rgb1_to_gray (Image, GrayImage)
threshold (GrayImage, Regions, 0, 223)

gen_ellipse (Ellipse, 200, 200, 0, 3, 2)
top_hat (Regions, Ellipse, RegionBottomHat)
difference (Regions, RegionBottomHat, ImageSub)
dev_clear_window ()
dev_display(RegionBottomHat)
disp_message (WindowHandle, '顶帽结果', 'window', 12, 12, 'black', 'true')
disp_continue_message (WindowHandle, 'black', 'true')
stop()
dev_clear_window ()
dev_display(ImageSub)
disp_message (WindowHandle, '与原图求差异,提取前景', 'window', 12, 12, 'black', 'true')

1.原图

2.阈值图

3.顶帽变换结果

4.提取前景

 

1.top_hat

功能:区域region顶帽变换操作

2.gray_tophat

功能:灰度图像做顶帽变换操作,通过gen_disc_se生成灰度结构元素

3.bottom_hat

功能:区域region底帽(黑帽)变换操作

4.gray_bothat

功能:灰度图像做底帽变换操作

底帽变换结果 = 闭运算结果 - 原始图像

适用于在较亮的背景中求暗的像素点

5.morph_hat

功能:区域region形态帽变换操作(闭运算-开运算)

 

posted @ 2019-08-29 15:14  Z大山  阅读(2381)  评论(1编辑  收藏  举报