天天看點

matlab 圖像形态學,matlab數字圖像處理----形态學圖像處理

一、基本形态學運算

(1)概念部分

%形态學:通常指生物學中對動植物的形狀和結果進行處理的一個分支

%數學形态學:是根據形态學概念發展而來的具有嚴格數學理論基礎的科學,并在圖像處理和模式識别領域得到了成功應用

%基本思想是:

%用具有一定形态的結構元素去度量和提取圖像中的對應形狀以達到對圖像分析和識别的目的

%形态學圖像處理表現為一種領域運算形式:

%一種特殊定義的鄰域稱之為“結構元素”,在每個像素位置上它與二值圖像對應的區域進行特定的邏輯運算,邏輯運算的結果為輸出圖像的相應像素

%形态學運算的效果取決于結構元素的大小,内容以及邏輯運算的性質

%用途是:

%簡化圖像資料,保持它們基本的形狀特性,并出去不相幹的結構

%基本運算包括:

%二值腐蝕和膨脹,二值開閉運算

%二值圖像中的基本邏輯操作:與、或、非(補)

%盡管邏輯操作與集合操作存在一一對應關系,但邏輯操作隻是針對二值圖像

%二值形态學基本運算:膨脹、腐蝕、開和閉

%開操作opening:B對A進行的開操作就是先用B對A腐蝕,然後用B對結果進行膨脹;開運算平滑了對象的輪廓,斷開了

%狹窄的連接配接,去掉了細小的突出部分和噪聲

%閉操作closing:B對A進行的閉操縱就是先用B對A膨脹,然後用B對結果進行腐蝕;閉運算使物體的輪廓線變得光滑,

%将狹窄的缺口連接配接起來,并填充比結構元素小的洞口

%開操作的作用:

%使輪廓平滑,抑制A物體邊界的小的離散點或尖峰

%用來消除小物體、在纖細點處分離物體、平滑較大物體的邊界的同時并不改變其面積

%閉操作的作用:

%用來填充物體内細小空洞、連接配接鄰近物體、平滑其邊界的同時并不明顯改變其面積

%函數Strel用來構造各種形狀和大小的結構元素 Se = strel(shape, parameters)

%Se = strel(‘diamond’, R)建立一個平坦的菱形結構元素,其中R是從結構元素原點到菱形的最遠點距離

Se = strel(‘diamond’,5)

%Se = strel(‘disk’,R)建立一個平坦的圓盤形結構的元素,其中半徑是R

Se = strel(‘disk’, 5)

%Se = strel(‘line’,LEN,DEG)建立一個平坦的線性元素,其中LEN表示長度,DEG表示線的角度

Se = strel(‘line’,9,0)

(2)實驗代碼部分

%練習:建立圖像并進行膨脹操作

bw = zeros(9,9);

bw(3:5, 4:6)=1;%置白

se = strel(‘square’,3)%矩形結構元素

bw2 = imdilate(bw,se)%進行膨脹操作

subplot(1,2,1),imshow(bw);

subplot(1,2,2),imshow(bw2);

%練習:對二值圖像進行膨脹

bw = imread(‘text.png’);%讀入圖像

se = strel(‘line’,11,90);%線性結構元素

bw2 = imdilate(bw, se);

subplot(1,2,1),imshow(bw);

subplot(1,2,2),imshow(bw2)

%練習:對灰階圖像進行膨脹

bw = imread(‘cameraman.tif’);

se = strel(‘ball’,5,5);%球形結構元素

bw2 = imdilate(bw,se);

subplot(1,2,1),imshow(bw);

subplot(1,2,2),imshow(bw2);

%練習:對灰階圖像進行腐蝕

bw = imread(‘circles.png’);

se = strel(‘disk’,11)%盤型結構元素

bw2 = imerode(bw,se);

subplot(1,2,1),imshow(bw);

subplot(1,2,2),imshow(bw2);

%練習:對圖像進行腐蝕和膨脹操作

se = strel(‘rectangle’,[40,30])%矩形結構元素

bw = imread(‘circbw.tif’);

bw1 = imerode(bw,se);

bw2 = imdilate(bw1,se);

subplot(1,3,1),imshow(bw);

subplot(1,3,2),imshow(bw1);

subplot(1,3,3),imshow(bw2);

%練習:對圖像進行開運算(先腐蝕再膨脹)

I = imread(‘snowflakes.png’)%讀入圖像

se = strel(‘disk’,5);%盤型結構元素

I1 = imopen(I,se);

subplot(1,2,1),imshow(I);

subplot(1,2,2),imshow(I1,[]);

%練習:對圖像進行閉運算

I = imread(‘circles.png’)%讀入圖像

se = strel(‘disk’,10);%盤型結構元素

I1 = imclose(I,se);

subplot(1,2,1),imshow(I);

subplot(1,2,2),imshow(I1,[]);