1. 程式人生 > >從去除毛刺的策略看開運算opening_circle和閉運算closing_circle的異同

從去除毛刺的策略看開運算opening_circle和閉運算closing_circle的異同

去除 ner 形狀 enc ML ans 在一起 url dev

從去除毛刺的策略看開運算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條)。

從去除毛刺的策略看開運算opening_circle和閉運算closing_circle的異同