图像开运算和闭运算

1、原理

图像开运算与闭运算与膨胀和腐蚀运算有关,由膨胀和腐蚀两个运算的复合与集合操作(并、交、补等)组合成的运算构成。开运算与闭运算依据腐蚀和膨胀演变而来。

1)开运算:先对图像腐蚀后膨胀。

A○S= (AΘS)⊕ S

作用:用来消除小的物体,平滑形状边界,并且不改变其面积。可以去除小颗粒噪声,断开物体之间的粘连。

2)闭运算:先对图像膨胀后腐蚀

A●S= (A⊕S)Θ S

作用:用来填充物体内的小空洞,连接邻近的物体,连接断开的轮廓线,平滑其边界的同时不改变面积。

2、开运算的实现

imgPath = 'E:\opencv_pic\src_pic\pic2.bmp';
img = imread(imgPath);
img=rgb2gray(img);
img = 255-img;
 
se = strel('square', 5);
img2 = imerode(img, se);
img3 = imdilate(img2, se);
subplot(1,3,1),imshow(img),title('原始图像');
subplot(1,3,2),imshow(img2),title('腐蚀后');
subplot(1,3,3),imshow(img3),title('膨胀后');

效果如下图。腐蚀消除了小的噪点,保留了最大的一个噪点,膨胀之后还原了噪点的形状。图像上,草莓蒂上的小花纹已经消失。

 放大后观察,原图里有较大的斑点,6*5的方块(纵向缺1个点),腐蚀后只剩下1个点,膨胀后变为5*5的方块。

放大到像素级可见,腐蚀图上的点(32,110)在膨胀图里被还原为5*5的块。

 使用imopen函数,效果相同。

3、闭运算的实现

imgPath = 'E:\opencv_pic\src_pic\pic2.bmp';
img = imread(imgPath);
img=rgb2gray(img);
img = 255-img;
 
se = strel('square', 4);
img2 = imdilate(img, se);
img3 = imerode(img2, se);
subplot(1,3,1),imshow(img),title('原始图像');
subplot(1,3,2),imshow(img2),title('膨胀后');
subplot(1,3,3),imshow(img3),title('腐蚀后');

闭运算效果如下图。

放大后,图像左侧的噪点在膨胀过程被连在一起,体积增大很多。腐蚀后形状发生了一些改变,体积变小很多。

使用大小为15的结构元素,se = strel('square', 15);草莓中间的空心圈变为实心圈。膨胀过程中,空心被高亮白色填充,但是花瓣部分已经连接在一起形状发生了较大改变。再次腐蚀后,去掉了膨胀造成的粘连,花瓣部分大体形状恢复。

在matlab里,使用imclose函数也可以达到上面先膨胀后腐蚀的效果。

4、总结

单独对比开运算和闭运算,对比图如下。

开运算先腐蚀后膨胀,去除了小的黑点,方块边缘变得圆润了,也就是开运算对图像轮廓进行平滑。

而闭运算先膨胀后腐蚀,把中心比较大的块连接为一个整体,填补了空白的缝隙。

开运算能够除去孤立的小点,毛刺和小桥,而物体的形状轮廓基本不变。

闭运算与开运算相反,能够填平前景物体内的小裂缝、间断和小孔,而总的位置和形状不变。

结构元素大小的不同将导致滤波效果的不同。

不同的结构元素的选择导致了不同的分割,即提取出不同的特征。

5、参考文献

1、形态学开运算闭运算

https://www.jianshu.com/p/2eae48a44f83

2、More Morphology Transformations

https://docs.opencv.org/2.4/doc/tutorials/imgproc/opening_closing_hats/opening_closing_hats.html#more-morphology-transformations

 

尊重原创技术文章,转载请注明。

https://www.cnblogs.com/pingwen/p/12240890.html

posted on 2020-01-29 17:58  啊哈彭  阅读(16788)  评论(0编辑  收藏  举报

导航