数字图像处理实验报告指导老师:学号姓名班级1.产生右图所示图像f1(m,n),其中图像大小为256×256,中间亮条为128×32,暗处=0,亮处=100。
对其进行FFT:①同屏显示原图f1(m,n)和FFT(f1)的幅度谱图;②若令f2(m,n)=(-1)(m+n)f1(m,n),重复以上过程,比较二者幅度谱的异同,简述理由;③若将f2(m,n)顺时针旋转90度得到f3(m,n),试显示FFT(f3)的幅度谱,并与FFT(f2)的幅度谱进行比较;④若将f1(m,n)顺时针旋转90度得到f4(m,n),令f5(m,n)=f1(m,n)+f4(m,n),试显示FFT(f5)的幅度谱,并指出其与FFT(f1)和FFT(f4)的关系;⑤若令f6(m,n)=f2(m,n)+f3(m,n),试显示FFT(f6)的幅度谱,并指出其与FFT(f2)和FFT(f3)的关系,比较FFT(f6)和FFT(f5)的幅度谱。
f1=zeros(256,256);for i=64:1:192for j=122:1:144f1(i,j)=100;endendfft_f1=fft2(f1);fft_f1=abs(fft_f1);tmax=fft_f1(1,1);tmin=fft_f1(1,1);for i=1:256for j=1:256if tmax<fft_f1(i,j)tmax=fft_f1(i,j);endif tmin>fft_f1(i,j)tmin=fft_f1(i,j);endendenddelta=tmax-tmin;for i=1:256for j=1:256fft_f1(i,j)=255*(fft_f1(i,j)-tmin)/delta;endendsubplot(1,2,1);imshow(f1);title('原图');subplot(1,2,2);imshow(fft_f1);title('原图的幅度谱');for i=1:256for j=1:256f2(i,j)=(-1)^(i+j)*f1(i,j);endendfft_f2=fft2(f2);fft_f2=abs(fft_f2);tmax=fft_f2(1,1);tmin=fft_f2(1,1);for i=1:256for j=1:256if tmax<fft_f2(i,j)tmax=fft_f2(i,j);endif tmin>fft_f2(i,j)tmin=fft_f2(i,j);endendenddelta=tmax-tmin;for i=1:256for j=1:256fft_f2(i,j)=255*(fft_f2(i,j)-tmin)/delta;endendsubplot(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('原图中心化的幅度谱');f3=imrotate(f2,-90,'bilinear');fft_f3=fft2(f3);fft_f3=abs(fft_f3);tmax=fft_f3(1,1);tmin=fft_f3(1,1);for i=1:256for j=1:256if tmax<fft_f3(i,j)tmax=fft_f3(i,j);endif tmin>fft_f3(i,j)tmin=fft_f3(i,j);endendenddelta=tmax-tmin;for i=1:256for j=1:256fft_f3(i,j)=255*(fft_f3(i,j)-tmin)/delta;endendsubplot(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('旋转后的幅度谱');图像旋转90度后,幅度谱也旋转了90度。
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);for i=1:256for j=1:256if tmax<fft_f5(i,j)tmax=fft_f5(i,j);endif tmin>fft_f5(i,j)tmin=fft_f5(i,j);endendenddelta=tmax-tmin;for i=1:256for j=1:256fft_f5(i,j)=255*(fft_f5(i,j)-tmin)/delta;endendsubplot(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);for i=1:256for j=1:256if tmax<fft_f6(i,j)tmax=fft_f6(i,j);endif tmin>fft_f6(i,j)tmin=fft_f6(i,j);endendenddelta=tmax-tmin;for i=1:256for j=1:256fft_f6(i,j)=255*(fft_f6(i,j)-tmin)/delta;endendsubplot(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);for i=1:1:32for j=1:1:32a(i,j)=1;endendfor i=33:1:64for j=33:1:64a(i,j)=1;endendfor i=1:64:256for j=1:64:256f(i:i+63,j:j+63)=a;endendimshow(f)for i=2:1:255for j=2:1:255a=[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);endendsubplot(1,3,1);imshow(f);title('原图像');subplot(1,3,2);imshow(zlf1);title('方形中值滤波后图像') subplot(1,3,3);imshow(zlf2);title('十字形中值滤波后图像')for i=2:1:255for j=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;endendjlf4=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邻域加权平均滤波后图像')放大后可看出区别3.产生教材104页题图4.16所示的灰度图像(白为255,黑为0),分别加入高斯白噪声和椒盐噪声,再分别进行3*3的平均滤波和中值滤波,显示原图像、加噪图像和滤波结果图像,并比较四种滤波结果。
f=zeros(256,256);a=255*ones(210,7);for i=0:1:8f(24:233,(29+24*i):(29+24*i+6))=a;endf1=imnoise(f,'gaussian',0,0.1);%加入均值为零方差为0.1的高斯噪声f2=imnoise(f,'salt & pepper',0.1);%加入噪声密度为0.1的椒盐噪声for i=2:1:255for j=2:1:255a=[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;%平均滤波endendsubplot(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页所给图像门限化分割的迭代阈值算法,实现对某一灰度图像的二值化。