一、實驗?zāi)康?/h4>
- 理解腐蝕和膨脹的原理,掌握開運算、閉運算及形態(tài)學(xué)的邊界提取。
- 掌握孤立點檢測、線檢測和邊緣檢測的方法。
- 掌握全局閾值處理的方法。
二、實驗內(nèi)容
1. 開運算和閉運算實驗。
圖1(a)顯示了一幅被噪聲圖像污染的指紋圖像,圖1(b)給出了結(jié)構(gòu)元,請自編程序,實現(xiàn)以下運算:
(1) 用圖1(b)所示的結(jié)構(gòu)元對圖1(a)進(jìn)行腐蝕。
(2) 對圖1(a)進(jìn)行開運算。
(3) 對開運算的結(jié)果進(jìn)行膨脹處理。
(4) 對開運算的結(jié)果進(jìn)行閉運算處理。
(5) 分析實驗結(jié)果。
答:文章來源:http://www.zghlxwxcb.cn/news/detail-457815.html
%%
%對污染的指紋圖像進(jìn)行腐蝕運算
clear all;close all;clc
f=imread('1.tif');%f 240x317
[M, N]=size(f);
f1=zeros(M,N);
figure;imshow(f)
se=ones(3); %結(jié)構(gòu)元素為 3×3 時
[m, n]=size(se);
sx=floor(m/2); %取整
sy=floor(n/2);
f = padarray(f,[sx sy]); %對 f 進(jìn)行零填充
[M, N]=size(f); %獲取填充后 f 的大小
for i=sx+1:M-sx
for j=sy+1:N-sy
fblock=f(i-sx:i+sx,j-sy:j+sy);
andresult=se&fblock; %與運算
if (andresult==se)
f1(i-sx,j-sy)=1;
else
f1(i-sx,j-sy)=0;
end
end
end
subplot(1,4,1); imshow(f1);title('腐蝕運算結(jié)果');
%%
%%對污染的指紋圖像進(jìn)行開運算,即腐蝕之后進(jìn)行膨脹運算
f1 = padarray(f1,[sx sy]);
f2=zeros(238,315); %開運算的結(jié)果
for i=sx+1:M-sx
for j=sy+1:N-sy
fblock=f1(i-sx:i+sx,j-sy:j+sy);
andresult=se&fblock;
As=sum(sum(andresult));
if As>0
f2(i-sx,j-sy)=1;
else
f2(i-sx,j-sy)=0;
end
end
end
subplot(1,4,2);imshow(f2);title('開運算結(jié)果');
%%
%對開運算的結(jié)果進(jìn)行膨脹處理。
f2 = padarray(f2,[sx sy]);
f3=zeros(238,315); %開運算的結(jié)果繼續(xù)膨脹
for i=sx+1:M-sx
for j=sy+1:N-sy
fblock=f2(i-sx:i+sx,j-sy:j+sy);
andresult=se&fblock;
As=sum(sum(andresult));
if As>0
f3(i-sx,j-sy)=1;
else
f3(i-sx,j-sy)=0;
end
end
end
subplot(1,4,3); imshow(f3);title('開運算后膨脹結(jié)果');
%%
%對開運算的結(jié)果進(jìn)行閉運算
f3 = padarray(f3,[sx sy]);
f4=zeros(238,315); %存儲開運算后閉運算結(jié)果
for i=sx+1:M-sx
for j=sy+1:N-sy
fblock=f3(i-sx:i+sx,j-sy:j+sy);
andresult=se&fblock; %與運算
if (andresult==se)
f4(i-sx,j-sy)=1;
else
f4(i-sx,j-sy)=0;
end
end
end
subplot(1,4,4); imshow(f4);title('開運算后閉運算結(jié)果');
2. 用形態(tài)學(xué)處理提取邊界。
圖2(a)給出了一幅簡單的二值圖像,圖2(b)給出了結(jié)構(gòu)元,請按照式(1),對圖2(a)進(jìn)行處理。
β ( A ) = A ? ( A ? B ) \beta (A)=A-(A\ominus B) β(A)=A?(A?B)
其中, B B B 是結(jié)構(gòu)元。先通過 B B B 對 A A A 腐蝕,再執(zhí)行 A A A 和腐蝕結(jié)果之間的差,即可得到集合 A A A 的邊界。
答:
close all; clear all; clc;
f=imread('2.tif');
%先腐蝕
se=ones(3);%結(jié)構(gòu)元
[m, n]=size(se);
sx=floor(m/2); %取整
sy=floor(n/2);
f_padded = padarray(f,[sx sy]); %對 f 進(jìn)行零填充
[M, N]=size(f_padded); %獲取填充后 fp 的大小
for i=sx+1:M-sx
for j=sy+1:N-sy
fblock=f_padded(i-sx:i+sx,j-sy:j+sy);
andresult=se&fblock; %與運算
if (andresult==se)
f1(i-sx,j-sy)=1;
else
f1(i-sx,j-sy)=0;
end
end
end
%后做差
fe=f-f1;
figure,imshow(fe)
4. 全局閾值處理。
圖6給出了一幅帶噪聲的指紋圖像,請進(jìn)行以下運算:
(1) 求圖6的直方圖。
(2) 用
T
=
m
T=m
T=m (平均圖像灰度)開始,并令
Δ
T
=
0.01
\Delta T=0.01
ΔT=0.01,應(yīng)用“實驗講義”中給出的迭代算法得到全局閾值。
(3) 用(2)中得到的全局閾值對圖像進(jìn)行分割。
答:
clear all;close all;clc
f=imread('4.tif');
imhist(f);
f=im2double(f);
T=mean(f(:));%當(dāng)前閾值
t=0;%下一次閾值
while abs(T-t)>0.01%當(dāng)T與t相差過大
G1=f>T;%邏輯判斷,f>T的部分為1,反之為0,注意G1會是logical類型的變量
t=0.5*mean(f(G1))+0.5*mean(f(~G1));
T=t;
end
%顯式的使用find
% index=find(f>T);
% f(index)=1;
% index=find(f<T);
% f(index)=0;
% imshow(f);
%使用邏輯索引來改善速度,不需要顯式的使用find
f(f>T)=1;
f(f<=T)=0;
imshow(f);
文章來源地址http://www.zghlxwxcb.cn/news/detail-457815.html
到了這里,關(guān)于形態(tài)學(xué)圖像處理和圖像分割MATLAB實驗的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!