在圖像濾波和形態學運算中,我們用得最多的是圓形結構元素(circle)或者方形結構元素,例如:
① 圓形結構元素
opening_circle (Region, RegionOpening, 3.5)
erosion_circle (Region, RegionErosion, 3.5)
② 方形結構元素
mean_image (Image, ImageMean, 9, 9)
opening_rectangle1 (Region, RegionOpening, 5, 5)
其實方形結構元素也屬於矩形結構元素。但是由於通常圓形結構元素和方形結構元素的處理效果類似,所以我暫時把它們歸為同一類。
至於矩形結構元素,我這里特指結構元素的長、寬比例懸殊的。例如:
mean_image (Image, ImageMean, 200, 1)
opening_rectangle1 (Region, RegionOpening, 1, 50)
下面舉幾個例子說明一下矩形結構元素使用時的妙用。
【例1】
要求:提取出下圖中的黑色橫線。

分析:如果直接用絕對閾值,或者動態閾值來分割的話,很難得到理想的效果。
算法如下:
1 read_image (Image, 'C:/Users/02/Desktop/fabric.png') 2
3 *用(100, 1)的矩形結構元素濾波,使黑線更加明顯,並且模糊其他部分 4 mean_image (Image, ImageMean, 100, 1) 5 *用(1, 80)的矩形結構元素濾波,將黑線模糊掉 6 mean_image (ImageMean, ImageMean1, 1, 80) 7
8 dyn_threshold (ImageMean, ImageMean1, RegionDynThresh, 10, 'dark') 9 connection (RegionDynThresh, ConnectedRegions) 10 dev_display (Image) 11 select_shape (ConnectedRegions, SelectedRegions, 'area', 'and', 3000, 9999999)
黑線提取效果圖:

讀者朋友里面有會用Photoshop的嘛?我多引申一句。
模糊濾波算子mean_image的簽名是:
mean_image(Image : ImageMean : MaskWidth, MaskHeight : )
當MaskWidth和MaskHeight差異很大時,其實很像Photoshop里面的“動感模糊”濾鏡:

【例2】
要求:把下圖中黑色區域頂部不平整的地方去掉。這些部分一般是工件周邊的臟污或者毛刺干擾,需去掉。難點是既需要去掉這些不平整區域,又不能影響剩下的矩形區域的形狀。

嘗試了一下,opening_circle 算子肯定不行(opening_circle 會磨平矩形的棱角)。下面第5行中開運算矩形結構元素如果是(300, 300)的話,那么會把整個區域腐蝕掉,也是不行的。
具體實現代碼如下:
1 read_image (Image, 'C:/Users/02/Desktop/2c.png') 2 dev_set_draw ('margin') 3 dev_set_line_width (2) 4 threshold (Image, Region, 0, 20) 5 opening_rectangle1 (Region, RegionOpening, 300, 1) 6 dev_display (Image) 7 dev_display (RegionOpening)
效果圖如下:

在具體項目中,有時候設計合適的矩形結構元素,也許能達到意想不到的效果。、
