opencv--开运算和闭运算

图像的开闭运算

实例:

python OpenCV使用场景

https://blog.csdn.net/qq_39507748/article/details/104539673

原理:

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

1 开运算: 先腐蚀,后膨胀。


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

2 闭运算: 先膨胀,后腐蚀

作用:
1、填充物体内的小空间,连接邻近的物体;
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('膨胀后');

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

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

使用imopen函数,效果相同

闭运算实现

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);草莓中间的空心圈变为实心圈。膨胀过程中,
空心被高亮白色填充,但是花瓣部分已经连接在一起形状发生了较大改变。再次腐蚀后,
去掉了膨胀造成的粘连,花瓣部分大体形状恢复

总结

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

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

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

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

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

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

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

参考文献

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 @ 2022-03-29 14:08  酷酷的排球  阅读(761)  评论(0编辑  收藏  举报