圖像膨脹


1、原理

所謂的圖片的膨脹處理,其實就是在圖像的邊緣添加像素值,使得整體的像素值擴張,進而達到圖像的膨脹效果,也可以說是信號與系統書中所提到的像素插值處理。

對Z2上元素集合A和結構體元素S,使用S對A進行腐蝕,記作:

A⊕S={z|(S)z ∩ A ≠ Ø}

讓位於圖像圓點的結構元素S在Z平面上移動,如果S的圓點移動到z點時,S與A有公共的交集(非空集),則認為這樣的z點構成的集合是S對A的膨脹圖像。

下圖左側是原圖X,B是結構元素,右圖是膨脹的結果。膨脹的方法是,拿B的中心點和X上的點一個一個地對比,如果B上至少有一個點在X的范圍內,則該點為前景有效點;右邊是膨脹后的結果。可以看出,膨脹后的圖比原圖點數多,就象X被膨脹增加了一層。

 2、膨脹的實現

imgPath = 'E:\opencv_pic\src_pic\pic1.bmp';
img = imread(imgPath);
img=rgb2gray(img);
img = 255-img;
 
se = strel('square', 3)
img2 = imdilate(img, se);
subplot(1,2,1),imshow(img),title('原始圖像');
subplot(1,2,2),imshow(img2),title('膨脹圖像');

膨脹后結果如下圖。

 放大后觀察,左側的噪點,第一列最下面一個是2*2的塊,膨脹后變為4*4塊。

如果使用5*5和10*10的結構元素,膨脹效果如下。

se = strel('square', 5)
img2 = imdilate(img, se);
subplot(1,3,1),imshow(img),title('原始圖像');
subplot(1,3,2),imshow(img2),title('膨脹圖像系數5');
se3 = strel('square', 10)
img3 = imdilate(img, se3);
subplot(1,3,3),imshow(img3),title('膨脹圖像系數10');

膨脹使物體的邊界擴大,可能把多個元素連同起來。腐蝕后可以刪除對象邊界的某些像素,而膨脹給圖像中的對象邊界添加像素。腐蝕使圖像變“細”,膨脹是圖像變“粗”。

先腐蝕后再膨脹可以用在圖像濾波,腐蝕后圖像變細,去除了比較小的噪聲,膨脹后恢復原圖像。

imgPath = 'E:\opencv_pic\src_pic\pic1.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('膨脹圖像');

圖像效果如下圖。

3、總結

和腐蝕相反,膨脹能使物體的邊界擴大,具體的結果和圖像的本身、結構元素的形狀有關。一般的,二值化后圖像容易出現斷裂,膨脹可以橋接斷裂的縫隙。

腐蝕和膨脹對比:

膨脹用3X3的結構元素,掃描二值圖像的每一個像素,用結構元素與其覆蓋的二值圖像做“與”運算,如果都為0,結構圖像的該像素為0,否則為1。只要有一個元素非零結果就非零,所以使二值圖像擴大一圈。

腐蝕用3X3的結構元素,掃描二值圖像的每一個像素,用結構元素與其覆蓋的二值圖像做“與”運算,如果都為1,結構圖像的該像素為1,否則為0。只要全部元素都為1結果才為1,所以使二值圖像減小一圈。

 

尊重原創技術文章,轉載請注明。

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM