一 基础部分
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)的幅度谱。
Matlab源代码:
问题1:
I1=zeros(256);
for i=112:144
for j=64:192
I1(j,i)=100;
end
end
figure;
subplot(121);
imshow(I1);
title('原图像');
subplot(122);
imshow(abs(fft2(histeq(I1))));
title('原图像的幅度谱');
问题2:
I2=zeros(256);
for i=112:144
for j=64:192
I2(j,i)=(-1).^(i+j)*I1(j,i);
end
end
figure;
subplot(221);
imshow(I1);
title('原图像f1');
subplot(222);
imshow(abs(fft2(histeq(I1))));
title('原图像的幅度谱');
subplot(223);
imshow(I2);
title('中心化后图像f2');
subplot(224);
imshow(abs(fft2(histeq(I2))));
title('中心化后图像f2的幅度谱');
分析:f2(m,n)相较f1(m,n)频谱中心化
问题3:
I3=imrotate(I2,90,'bilinear');
figure;
subplot(131);
imshow(I2);
title('中心化后图像f2');
subplot(132);
imshow(abs(fft2(histeq(I2))));
title('中心化后图像f2的幅度谱');
subplot(133);
imshow(abs(fft2(histeq(I3))));
title('旋转后图像f3的幅度谱');
分析:f3(m,n)的FFT转换图像也是f2(m,n)的FFT转换图像左转90°所得。
问题4:
I4=imrotate(I1,90,'bilinear');
I5=I4+I1;
figure;
subplot(221);
imshow(I1);
title('原图像f1');
subplot(222);
imshow(abs(fft2(histeq(I5))));
title('相加后图像f5幅度谱');
subplot(223);
imshow(abs(fft2(histeq(I1))));
title('原图像的幅度谱');
subplot(224);
imshow(abs(fft2(histeq(I4))));
title('旋转后图像f4的幅度谱');
分析:f4(m,n)相较f1(m,n)频谱顺时针旋转90度
问题5:
I6=I2+I3;
figure;
subplot(221);
imshow(abs(fft2(histeq(I6))));
title('相加后图像f6幅度谱');
subplot(222);
imshow(abs(fft2(histeq(I5))));
title('相加后图像f5的幅度谱');
subplot(223);
imshow(abs(fft2(histeq(I2))));
title('中心化后图像f2的幅度谱');
subplot(224);
imshow(abs(fft2(histeq(I3))));
title('旋转后图像f3幅度谱');
分析:f6(m,n)是对f5(m,n)实现了频谱中心化
2 产生教材104页题图4.18(右图)所示的二值图像(白为1,黑为0),编程实现习题4.18所要求的处理(3*3的平均滤波和中值滤波)功能(图像四周边界不考虑,处理结果按四舍五入仍取0或1),显示处理前后的图像,比较其异同。
Halcon源代码:
dev_close_window()
ROW_GEN_DEMO := 30
ROW_GEN_DEMO_0 := ROW_GEN_DEMO * 0
ROW_GEN_DEMO_1 := ROW_GEN_DEMO * 1
ROW_GEN_DEMO_2 :=