1. 程式人生 > >影象開運算和閉運算

影象開運算和閉運算

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