zoukankan      html  css  js  c++  java
  • (转) 开运算opening_circle和闭运算closing_circle的异同

    从去除毛刺的策略看开运算opening_circle和闭运算closing_circle的异同

    例一:毛刺在往外凸的面上

    策略1:分割出黑色部分,然后通过开运算去掉毛刺,再通过原黑色部分区域减去开运算之后的区域,得到毛刺部分的区域。 

    1 read_image (Tu, 'C:/Users/xiahui/Desktop/tu.jpg')
    2 binary_threshold (Tu, Region, 'max_separability', 'dark', UsedThreshold)
    3 opening_circle (Region, RegionOpening, 50.5)
    4 difference (Region, RegionOpening, RegionDifference)
    5 dev_display (Tu)
    6 dev_display (RegionDifference)

    可以看到,虽然毛刺被分割出来了,但是多出了4块干扰的区域。原因是执行opening_circle时,四个尖角被削平了。

    开运算是先腐蚀再膨胀。腐蚀之后,毛刺被削没了,但是4个尖角大致保持以前的形状;4个尖角再经过膨胀运算后,就变得不尖了。

    策略2:分割出白色部分,然后通过闭运算封闭凹槽,再通过闭运算之后的区域减去原白色部分区域,得到毛刺部分的区域。

    1 read_image (Tu, 'C:/Users/xiahui/Desktop/tu.jpg')
    2 binary_threshold (Tu, Region, 'max_separability', 'light', UsedThreshold)
    3 closing_circle (Region, RegionClosing, 50.5)
    4 difference (RegionClosing, Region, RegionDifference)
    5 dev_display (Tu)
    6 dev_display (RegionDifference)

    分割效果很好。

    例二:毛刺在往内凹的面上

    策略1:分割出黑色部分,然后通过开运算去掉毛刺,再通过原黑色部分区域减去开运算之后的区域,得到毛刺部分的区域。

    1 read_image (Ao, 'C:/Users/xiahui/Desktop/ao.jpg')
    2 binary_threshold (Ao, Region, 'max_separability', 'dark', UsedThreshold)
    3 opening_circle (Region, RegionOpening, 50.5)
    4 difference (Region, RegionOpening, RegionDifference)
    5 dev_display (Ao)
    6 dev_display (RegionDifference)

    分割效果不佳,现象和原因同例一。

    策略2:分割出白色部分,然后通过闭运算封闭凹槽,再通过闭运算之后的区域减去原白色部分区域,得到毛刺部分的区域。

    1 read_image (Ao, 'C:/Users/xiahui/Desktop/ao.jpg')
    2 binary_threshold (Ao, Region, 'max_separability', 'light', UsedThreshold)
    3 closing_circle (Region, RegionClosing, 50.5)
    4 difference (RegionClosing, Region, RegionDifference)
    5 dev_display (Ao)
    6 dev_display (RegionDifference)

    分割效果很好。

    说明:

    以上的opening_circle (Region, RegionOpening, 50.5)可以用下面的代码来完全等效:

    set_system ('tsp_clip_region', 'false')
    erosion_circle (Region, RegionErosion1, 50.5)
    dilation_circle (RegionErosion1, RegionDilation, 50.5)

    set_system ('tsp_clip_region', 'false')的意思是当region(一般是膨胀以后)超过图像区域时,不修剪region

    下面我通过一些简单图形来观察开运算(腐蚀—膨胀)和闭运算(膨胀—腐蚀)的执行效果。

    用腐蚀、膨胀算子来模拟开运算的过程:

    复制代码
    1 *模拟开运算
    2 set_system ('tsp_clip_region', 'false')
    3 read_image (Rect, 'C:/Users/xiahui/Desktop/Rect.jpg')
    4 binary_threshold (Rect, Region, 'max_separability', 'dark', UsedThreshold)
    5 erosion_circle (Region, RegionErosion, 30.5)
    6 dilation_circle (RegionErosion, RegionDilation, 30.5)
    7 dev_display (Rect)
    8 dev_display (RegionDilation)
    复制代码

    (这个星花腐蚀和膨胀值要小些,不然没有上图的效果)

    用膨胀、腐蚀算子来模拟闭运算的过程:

    复制代码
    1 *模拟闭运算
    2 set_system ('tsp_clip_region', 'false')
    3 read_image (Rect, 'C:/Users/xiahui/Desktop/rect.jpg')
    4 binary_threshold (Rect, Region, 'max_separability', 'dark', UsedThreshold)
    5 dilation_circle (Region, RegionDilation, 30.5)
    6 erosion_circle (RegionDilation, RegionErosion, 30.5)
    7 dev_display (Rect)
    8 dev_display (RegionErosion)
    复制代码

    (矩形闭运算后可完全复原)

    (正八边形闭运算后可完全复原)

    叠加在一起看看:

    (无法复原)

    结论:

    1、膨胀会使尖角变平滑。
    2、对于凸多边形来说(可用shape_trans (Region, RegionTrans, 'convex')生成凸多边形),腐蚀以后,region的外形特征保持不变,矩形腐蚀以后仍是矩形,三角形腐蚀以后还是三角形。


    3、对于非凸多边形来说,腐蚀以后,region的外形特征大致保持不变,但是如果region的尖角特别细,则会腐蚀掉,这样region的形状就会发生较大变化。


    4、圆角腐蚀以后,可能变成尖角。


    5、开运算会使尖角变平滑。


    6、对于凸多边形来说,闭运算之后,region不发生任何变化。


    7、对于有凹槽的非凸多边形来说,闭运算之后region的凹槽被填充。第一步膨胀过程中,夹角变圆角,第二步腐蚀过程中,圆角又可能复原成了尖角(见第4条)。

     

  • 相关阅读:
    hdu 5101 Select
    hdu 5100 Chessboard
    cf B. I.O.U.
    cf C. Inna and Dima
    cf B. Inna and Nine
    cf C. Counting Kangaroos is Fun
    Radar Installation 贪心
    spfa模板
    Sequence
    棋盘问题
  • 原文地址:https://www.cnblogs.com/bile/p/10173945.html
Copyright © 2011-2022 走看看