Im1              im2                im3              im4
如上,im1为原图在右下两个方向补零,im2为在四周补零,im3为im1滤波后截取出的效果图,im4为im2滤波后截取出的效果图。代码如下:
clear all;
f=imread('img.jpg');
[m,n]=size(f);
html特效代码照片f=im2double(f);
f1=zeros(m+20,n+20);
f2=zeros(m+20,n+20);
for i=1:m
for j=1:n
f1(i,j)=f(i,j);
f2(i+10,j+10)=f(i,j);
end
end
imshow(f1);
figure;
imshow(f2);
figure;
n1=2;
w1=20;
g=fft2(f1);
g=fftshift(g);
g2=fft2(f2);
g2=fftshift(g2);
for i=1:m+20
for j=1:n+20
d=sqrt((i-(m+20)/2)^2+(j-(n+20)/2)^2);
h1=1/(1+0.414*(d/w1)^(2*n1));%计算低通滤波器传递函数
s1(i,j)=h1*g(i,j);
s2(i,j)=h1*g2(i,j);
end
end
y1=(real(ifft2(ifftshift(s1))));
y2=(real(ifft2(ifftshift(s2))));
for i=1:m
for j=1:n
x(i,j)=y1(i,j);
x2(i,j)=y2(i+10,j+10);
end
end
x=im2uint8(x);
x2=im2uint8(x2);
imshow(x);
figure;
imshow(x2);
不难看出程序中的操作,读取原图后识别大小,然后生成了两个比原图长宽各增加20像素的纯黑图,把原图放在不同的地方,就生成了两个不同的补零图。
之后对两个图进行了完全相同的操作,首先生成频域图,进行频谱搬移将原点放在图中心。随后生成了一个截止频率为20的二维巴特沃斯滤波器,与频域图做乘法,得到了滤波后的频域图。再通过反向搬移,傅里叶反变换与取实部的过程。到此为止对两张图做了完全相同的操作,此后分别把补得0裁减掉,得到了im3,im4两张效果完全一样的图像。
为何进行不同的补零方法,最后的结果却是相等的呢?首先来看公式:
可以明显看出求和的项中有f(x,y)这个因数,当其为0,也就是算到补零的区域时,其不会使频谱图累加任何值,因为其本身一项就为0。因此无论是如何补0,最后呈现的频域图与原图的频域图都相等,唯一不同的是其大小不一样。同理通过同样的滤波器后,其值也与原图通过滤波器的效果相等。因此,只要补零后行数列数相
同,进行同样的滤波后,最后得到的结果就一定是相同的。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。