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
尊重原創技術文章,轉載請注明。