在图像滤波和形态学运算中,我们用得最多的是圆形结构元素(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)
效果图如下:
在具体项目中,有时候设计合适的矩形结构元素,也许能达到意想不到的效果。、