圖像的開閉運算
實例:
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
