为什么在matlab中使用傅立叶逆变换ifft2()时会得到暗图像



我认为使用ifft2((将其转换回时出现了问题。我试图通过创建一个矩阵L来使用理想的低通滤波器,该矩阵有一个半径为50的1的圆。如果你们能告诉我问题出在哪里就太好了。谢谢!

I0 = imread('image.png');
g = I0(:,:,1);
Rg = imref2d(size(g));

G = fft2(g);
AG1 = log(1+abs(G));
MaxVal = max(max(AG1));
AG2 = uint8(255*(AG1/MaxVal));
SAG2 = fftshift(AG2);

%zero matrix L with a circle with value 1's with radius 50 
[xGrid,yGrid] = meshgrid(1:400,1:400);
L = sqrt((xGrid - 200).^2 + (yGrid - 200).^2) <= 50;
U = uint8(double(SAG2).*L);
a=ifft2(U);

u = uint8(real(ifft2(U)));
imshow(u,'InitialMagnification',300);

您正在采取一大堆不必要的操作。如评论中所述,所有int8铸件都是多余的。在计算u时,您还缺少一个ifftshift。这里有一个简短的版本,可以实现你想要的低通过率:

I0 = imread('your_file.png');
g = I0(:,:,1);
G = fft2(g);
SAG2 = fftshift(G);
%zero matrix L with a circle with value 1's with radius 50 
[xGrid,yGrid] = meshgrid(1:400,1:400);
L = sqrt((xGrid - 200).^2 + (yGrid - 200).^2) <= 50;
U = SAG2 .* L;
u = real(ifft2(ifftshift(U)));
figure
imshow(u,[]);

最新更新