数字图像处理MATLAB上机作业.docx
《数字图像处理MATLAB上机作业.docx》由会员分享,可在线阅读,更多相关《数字图像处理MATLAB上机作业.docx(18页珍藏版)》请在冰点文库上搜索。
数字图像处理MATLAB上机作业
数字图像处理实验报告
指导老师:
学号
姓名
班级
1.产生右图所示图像f1(m,n),其中图像大小为256X256,中间亮条为128X32,暗处=0,亮处=100对其进行FFT:
1同屏显示原图f1(m,n)和FFT(f1)的幅度谱图;
2若令f2(m,n)=(-1)(m+n)f1(m,n),重复以上过程,
比较二者幅度谱的异同,简述理由;
3若将f2(m,n)顺时针旋转90度得到f3(m,n),试显示FFT(f3)的幅度谱,
并与FFT(f2)的幅度谱进行比较;
4若将f1(m,n)顺时针旋转90度得到f4(m,n),令f5(m,n)=f1(m,n)+f4(m,n),
试显示FFT(f5)的幅度谱,并指出其与FFT(f1)和FFT(f4)的关系;
5若令f6(m,n)=f2(m,n)+f3(m,n),试显示FFT(f6)的幅度谱,并指出其与FFT(f2)和FFT(f3)的关系,
比较FFT(f6)和FFT(f5)的幅度谱。
f1=zeros(256,256);
fori=64:
1:
192
forj=122:
1:
144
f1(i,j)=100;
end
end
fft_f1=fft2(f1);
fft_f1=abs(fft_f1);
tmax=fft_f1(1,1);
tmin=fft_f1(1,1);
fori=1:
256
forj=1:
256
iftmaxtmax=fft_f1(i,j);
end
iftmin>fft_f1(i,j)
tmin=fft_f1(i,j);
end
end
end
delta=tmax-tmin;
fori=1:
256
forj=1:
256
fft_f1(i,j)=255*(fft_f1(i,j)-tmin)/delta;
end
end
subplot(1,2,1);
imshow(f1);
title('原图’);
subplot(1,2,2);
imshow(fft_f1);
title('原图的幅度谱’);
原因
原團的幅度谱
fori=1:
256
forj=1:
256f2(i,j)=(-1)F+j)*f1(i,j);
end
endfft_f2=fft2(f2);fft_f2=abs(fft_f2);tmax=fft_f2(1,1);
tmin=fft_f2(1,1);
fori=1:
256
forj=1:
256
iftmaxend
iftmin>fft_f2(i,j)
tmin=fft_f2(i,j);
end
end
end
delta=tmax-tmin;
fori=1:
256
forj=1:
256
fft_f2(i,j)=255*(fft_f2(i,j)-tmin)/delta;
end
endsubplot(2,2,1);imshow(f1);title('原图’);
subplot(2,2,2);
imshow(fft_f1);
title('原图的幅度谱’);subplot(2,2,3);
imshow(f2);
title('原图中心化’);
subplot(2,2,4);
imshow(fft_f2);
title('原图中心化的幅度谱’);
原團的幅度谱
原團中心化
原图中心化的幅度谱
iBv*
f3=imrotate(f2,-90,'bilinear');
fft_f3=fft2(f3);
fft_f3=abs(fft_f3);
tmax=fft_f3(1,1);
tmin=fft_f3(1,1);
fori=1:
256
forj=1:
256
iftmaxend
iftmin>fft_f3(i,j)
tmin=fft_f3(i,j);
end
end
enddelta=tmax-tmin;
fori=1:
256
forj=1:
256
fft_f3(i,j)=255*(fft_f3(i,j)-tmin)/delta;
end
end
subplot(2,2,1);
imshow(f2);
title('原图中心化’);
subplot(2,2,2);
imshow(fft_f2);
title('原图中心化的幅度谱’);
subplot(2,2,3);
imshow(f3);
title('旋转后的图像’);subplot(2,2,4);
imshow(fft_f3);
title('旋转后的幅度谱’);
厲團中心化
原图中心化的幅度谱
I
旋转后的幅度谱
WWW
f4=imrotate(f1,-90,'bilinear');
f5=f1+f4;
fft_f5=fft2(f5);
fft_f5=abs(fft_f5);
tmax=fft_f5(1,1);
tmin=fft_f5(1,1);
fori=1:
256
forj=1:
256
iftmaxend
iftmin>fft_f5(i,j)
tmin=fft_f5(i,j);
end
end
end
delta=tmax-tmin;
fori=1:
256
forj=1:
256fft_f5(i,j)=255*(fft_f5(i,j)-tmin)/delta;
end
end
subplot(2,2,1);
imshow(f1);
title('原图’);
subplot(2,2,2);
imshow(fft_f1);
title('原图的幅度谱’);
subplot(2,2,3);
imshow(f5);
title('相加后的图像’);
subplot(2,2,4);
imshow(fft_f5);
title('相加后的幅度谱’);
原国的幅度谱
相加后的画像
原图与旋转90度后的图像进行叠加后,相应的幅度谱也进行叠加。
f6=f2+f3;
fft_f6=fft2(f6);
fft_f6=abs(fft_f6);
tmax=fft_f6(1,1);
tmin=fft_f6(1,1);
fori=1:
256
forj=1:
256
iftmaxtmax=fft_f6(i,j);
end
iftmin>fft_f6(i,j)
tmin=fft_f6(i,j);
end
end
end
delta=tmax-tmin;
fori=1:
256
forj=1:
256
fft_f6(i,j)=255*(fft_f6(i,j)-tmin)/delta;
end
end
subplot(2,2,1);
imshow(fft_f2);title('F2');
subplot(2,2,2);imshow(fft_f3);title('F3');
subplot(2,2,3);imshow(fft_f5);title('F5');
subplot(2,2,4);imshow(fft_f6);title('F6');
FFT
(2)和FFT(3)相差90度。
FFT(6)是FFT(5)的中心化。
2.产生教材104页题图4.18(右图)所示的二值图像(白为1,黑为0),编程实现习题4.18所要求的处理(3*3的平均滤波和中值滤波)功能(图像四周边界不考虑,处理结果按四舍五入仍取0或1),显示处理前后的图像,比较其异同。
a=zeros(64,64);
f=zeros(256,256);
fori=1:
1:
32
forj=1:
1:
32
a(i,j)=1;
end
end
fori=33:
1:
64
forj=33:
1:
64a(i,j)=1;
end
end
fori=1:
64:
256
forj=1:
64:
256f(i:
i+63,j:
j+63)=a;
end
end
imshow(f)
fori=2:
1:
255
forj=2:
1:
255
a=[f(i-1,j-1),f(i-1,j),f(i-1,j+1),f(i,j-1),f(i,j),f(i,j+1),f(i+1,j-1),f(i+1,j),f(i+1,
j+1)];
b=[f(i-1,j),f(i,j-1),f(i,j),f(i,j+1),f(i+1,j)];
c=sort(a);
d=sort(b);
zlf1(i,j)=c(5);
zlf2(i,j)=d(5);
endend
subplot(1,3,1);
imshow(f);
title('原图像');
subplot(1,3,2);
imshow(zlfl);
title('方形中值滤波后图像’)
subplot(1,3,3);
imshow(zlf2);
title('十字形中值滤波后图像')
方形中值滤波后图像
十字形中值滤波后图像
fori=2:
1:
255
forj=2:
1:
255jlf4(i,j)=(f(i-1,j)+f(i+1,j)+f(i,j-1)+f(i,j+1))/4;
jlf8(i,j)=(f(i-1,j-1)+f(i-1,j)+f(i-1,j+1)+f(i,j-1)+f(i,j+1)+f(i+1,j-1)+f(i+1,j)+f(i+1,j+1))/8;
jjlf4(i,j)=(f(i-1,j)+f(i+1,j)+f(i,j-1)+f(i,j+1)+f(i,j))/5;
jjlf8(i,j)=(f(i-1,j-1)+f(i-1,j)+f(i-1,j+1)+f(i,j-1)+f(i,j+1)+f(i+1,j-1)+f(i+1,j)+f(i+
1,j+1)+f(i,j))/9;
end
end
jlf4=round(jlf4);
jlf8=round(jlf8);
jjlf4=round(jjlf4);
jjlf8=round(jjlf8);
subplot(2,2,1);
imshow(jlf4);
title('4邻域平均滤波后图像’);
subplot(2,2,2);
imshow(jlf8);
title('8邻域平均滤波后图像')
subplot(2,2,3);
imshow(jjlf4);
title('4邻域加权平均滤波后图像')
subplot(2,2,4);
imshow(jjlf8);
title('8邻域加权平均滤波后图像')
4邻域平均滤波后團像
8邻域平均滤S后團像
4邻域加权平均滤波后團像
塔邻域加权平均滤波后图像
放大后可看出区别
4邻域平均滤波后图像
8邻域平均滤液后團像
4邻域加权平均滤波后團像
8邻域加权平均滤波后團像
3•产生教材104页题图4.16所示的灰度图像(白为255,黑为0),分别加入高斯白噪声和椒盐噪声,再分别进行3*3的平均滤波和中值滤波,显示原图像、加噪图像和滤波结果图像,并比较四种滤波结果。
f=zeros(256,256);
a=255*ones(210,7);
fori=0:
1:
8
f(24:
233,(29+24*i):
(29+24*i+6))=a;
end
f1=imnoise(f,'gaussian',0,0.1);%加入均值为零方差为0.1的高斯噪声
f2=imnoise(f,'salt&pepper',0.1);%加入噪声密度为0.1的椒盐噪声
fori=2:
1:
255
forj=2:
1:
255
a=[f1(i-1,j-1),f1(i-1,j),f1(i-1,j+1),f1(i,j-1),f1(i,j),f1(i,j+1),f1(i+1,j-1),f1(i+1,j
),f1(i+1,j+1)];
b=[f2(i-1,j-1),f2(i-1,j),f2(i-1,j+1),f2(i,j-1),f2(i,j),f2(i,j+1),f2(i+1,j-1),f2(i+1,j
),f2(i+1,j+1)];
c=sort(a);
d=sort(b);
zlf1(i,j)=c(5);%中值滤波
zlf2(i,j)=d(5);%中值滤波
jlf8(i,j)=(f1(i-1,j-1)+f1(i-1,j)+f1(i-1,j+1)+f1(i,j-1)+f1(i,j+1)+f1(i+1,j-1)+f1(i+1,j
)+f1(i+1,j+1)+f1(i,j))/9;%平均滤波
jjlf8(i,j)=(f2(i-1,j-1)+f2(i-1,j)+f2(i-1,j+1)+f2(i,j-1)+f2(i,j+1)+f2(i+1,j-1)+f2(i+1,
j)+f2(i+1,j+1)+f2(i,j))/9;%平均滤波
end
end
subplot(2,4,1);imshow(f);
title('原图像');
subplot(2,4,2);imshow(f1);
title('高斯噪声污染后的图像’);
subplot(2,4,3);imshow(zlf1);
title('中值滤波后的图像’);
subplot(2,4,4);imshow(jlf8);
title('平均滤波后的图像’);
subplot(2,4,5);imshow(f);
title('原图像');
subplot(2,4,6);imshow(f2);
title('椒盐噪声污染后的图像’);
subplot(2,4,7);imshow(zlf2);
title('中值滤波后的图像’);
subplot(2,4,8);imshow(jjlf8);
title('平均滤波后的图像’);
原團像根盐唾声污染石的團像中值遥渡后的團像平均遞波石的團像
5.(第4、5题选做一题)编程实现教材214页所给图像门限化分割的迭代阈值算法,实现对某一灰度图像的二值化。
Pic=imread('C:
\Users\Administrator\Desktop\242dd42a2834349bfb0c018ccbea15ce36d3beb5.j
pg');%读取RGB格式的图像
a=rgb2gray(Pic);%进行RGB到灰度图像的转换
T=0.5*(double(min(a(:
)))+double(max(a(:
))));
do=false;
while~do
g=(a>T);
Tnext=0.5*(mean(a(g))+mean(a(~g)));
do=abs(T-Tnext)<0.2;
T=Tnext;
end
figure;subplot(1,2,1);imshow(a);
subplot(1,2,2);imshow(g);
'?
■■■uu■
6.
%ReadInputRetinaImageinlmg=imread('Input.bmp');
if(dim==3)
dim=ndims(inlmg);
%lnputisacolorimageinImg=rgb2gray(inlmg);end
%ExtractBloodVessels
Threshold=10;
bloodVessels=VesselExtract(inlmg.Threshold);
%OutputBloodVesselsimagefigure;
subplot(121);imshow(inlmg);title('InputImage');subplot(122);imshow(bloodVessels);title('ExtractedBloodVessels');
VesselExtract.m:
functionbloodVessels=VesselExtract(inlmg,threshold)%Kirsch'sTemplatesh1=[5-3-3;
50-3;
5-3-3]/15;
h2=[-3-35;
-305;
-3-35]/15;
h3=[-3-3-3;
50-3;
55-3]/15;
h4=[-355;
-305;
-3-3-3]/15;
h5=[-3-3-3;
-30-3;
555]/15;
h6=[555;
-30-3;
-3-3-3]/15;
h7=[-3-3-3;
-305;
-355]/15;
h8=[55-3;
50-3;
-3-3-3]/15;
%SpatialFilteringbyKirsch'sTemplates
t仁filter2(h1,inlmg);
t2=filter2(h2,inlmg);
t3=filter2(h3,inlmg);
t4=filter2(h4,inlmg);
t5=filter2(h5,inlmg);
t6=filter2(h6,inlmg);
t7=filter2(h7,inlmg);
t8=filter2(h8,inlmg);
s=size(inlmg);
bloodVessels=zeros(s
(1),s
(2));
temp=zeros(1,8);
fori=1:
s
(1)
forj=1:
s
(2)
temp
(1)=t1(i,j);temp
(2)=t2(i,j);temp(3)=t3(i,j);temp(4)=t4(i,j);temp(5)=t5(i,j);temp(6)=t6(i,j);temp(7)=t7(i,j);temp(8)=t8(i,j);if(max(temp)>threshold)
bloodVessels(i,j)=max(temp);
endendend