在图像滤波和形态学运算中,我们用得最多的是圆形结构元素(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)

 

效果图如下:

 

在具体项目中,有时候设计合适的矩形结构元素,也许能达到意想不到的效果。、

 

 

 

 

 

posted on 2019-11-23 12:01  xh6300  阅读(2486)  评论(4编辑  收藏  举报