【zz】matlab 腐蝕膨脹算法


1.圖像膨脹的Matlab實現:

可以使用imdilate函數進行圖像膨脹,imdilate函數需要兩個基本輸入參數,即待處理的輸入圖像和結構元素對象。結構元素對象可以是strel函數返回的對象,也可以是一個自己定義的表示結構元素鄰域的二進制矩陣。此外,imdilate還可以接受兩個可選參數:PADOPT(padopt) ——影響輸出圖片的大小、PACKOPT(packopt).——說明輸入圖像是否為打包的二值圖像(二進制圖像)。舉個實例如下:

步驟1,首先創建一個包含矩形對象的二值圖像矩陣。

>> BW=zeros(9,10);

>> BW(4:6,4:7) =1

BW =

0 0 0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 0 0 
0 0 0 1 1 1 1 0 0 0 
0 0 0 1 1 1 1 0 0 0 
0 0 0 1 1 1 1 0 0 0 
0 0 0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 0 0

步驟2,使用一個3×3的正方形結構元素對象對創建的圖像進行膨脹。

>> SE=strel('square',3)

SE = 
Flat STREL object containing 9 neighbors.

Neighborhood: 
1 1 1 
1 1 1 
1 1 1

步驟3,將圖像BW和結構元素SE傳遞給imdilate函數。

>> BW2=imdilate(BW,SE)

BW2 =

0 0 0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 0 0 
0 0 1 1 1 1 1 1 0 0 
0 0 1 1 1 1 1 1 0 0 
0 0 1 1 1 1 1 1 0 0 
0 0 1 1 1 1 1 1 0 0 
0 0 1 1 1 1 1 1 0 0 
0 0 0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 0 0

步驟4,顯示結果。

>> imshow(BW,'notruesize')

>> imshow(BW2,'notruesize')

 

2.圖像腐蝕的Matlab實現:

可以使用imerode函數進行圖像腐蝕。imerode函數需要兩個基本輸入參數:待處理的輸入圖像以及結構元素對象。此外,imerode函數還可以接受3個可選參數:PADOPT(padopt) ——影響輸出圖片的大小、PACKOPT(packopt).——說明輸入圖像是否為打包的二值圖像(二進制圖像)。M——指定原始圖像的行數。

以下程序示例說明了如何對某一副具體圖像進行腐蝕操作,腐蝕前后的效果對比如圖末。

步驟1,讀取圖像cameraman.tif (該圖像是Matlab當前目錄下自帶的圖片)

>> BW1=imread('cameraman.tif');

步驟2,創建一個任意形狀的結構元素對象

>> SE=strel('arbitrary',eye(5));

步驟3,以圖像BW1和結構元素SE為參數調用imerode函數進行腐蝕操作。

>> BW2=imerode(BW1,SE);

步驟4,顯示操作結果

>> imshow(BW1) 
>> figure,imshow(BW2)

3.膨脹和腐蝕聯合操作(圖像開運算操作):

下面以圖像開啟為例,說明如何綜合使用imdilate和imerode這兩個函數,實現圖像處理操作。

步驟1,創建結構元素:

>> clear;close all 
>> SE = strel('rectangle',[40 30]); %注意:結構元素必須具有適當的大小,既可以刪電流線又可以刪除矩形.

步驟2,使用結構元素腐蝕圖像: %將會刪除所有直線,但也會縮減矩形

>> BW1=imread('circbw.tif'); 
>> BW2=imerode(BW1,SE); 
>> imshow(BW2) 
>> figure,imshow(BW1)

步驟3,恢復矩形為原有大小,使用相同的結構元素對腐蝕過的圖像進行膨脹.

>> BW3=imdilate(BW2,SE); 
>> figure,imshow(BW3)

4.基於膨脹與腐蝕的形態操作——骨架化和邊緣檢測

(1)骨架化:

某些應用中,針對一副圖像,希望對圖像中所有對象簡化為線條,但不修改圖像的基本結構,保留圖像基本輪廓,這個過程就是所謂的骨架化。提供了專門的函數bwmorph,可以實現骨架化操作。

>> clear;close all 
>> BW1=imread('circbw.tif'); 
>> BW2=bwmorph(BW1,'skel',Inf); 
>> imshow(BW1) 
>> figure,imshow(BW2)

(2)邊緣檢測

對於一副灰度二進制圖像,如果圖像像素值為1,則該像素的狀態為ON,如果其像素值為0,則該像素的狀態為OFF。在一副圖像中,如果圖像某個像素滿足以下兩個條件:

1.該像素狀態為ON,

2.該像素鄰域中有一個或多個像素狀態為OFF。

則認為該像素為邊緣像素。

Matlab中提供了專門的函數bwperim,可以用於判斷一副二進制圖像中的哪些像素為邊緣像素。

以下程序代碼示例就是利用bwperim函數,對圖像circbw.tif進行邊緣檢測,其邊緣像素檢測效果如尾圖。

>> clear;close all 
>> BW1=imread('circbw.tif'); 
>> BW2=bwperim(BW1); 
>> imshow(BW1) 
>> figure,imshow(BW2)

基於腐蝕和膨脹的形態操作函數如下:

bwhitmiss 圖像邏輯"與"操作,該函數使用一個結構元素對圖像進行腐蝕操作后,再使用第二個結構元素對圖像進行腐蝕操作

imbothat 從原始圖像中減去經過形態關閉后的圖像,該函數可用來尋找圖像中的灰度槽

imclose 閉合操作.首先對圖像進行膨脹,然后再對膨脹后的圖像進行腐蝕,兩個操作使用同樣的結構元素

imopen 開啟操作,首先對圖像進行腐蝕,然后再對腐蝕后的圖像進行膨脹,兩個操作使用同樣的結構元素

imtophat 從原始圖像中減去形態開啟后的圖像,可以用來增強圖像的對比度


免責聲明!

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



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