我正在实现图像增强的代码并应用傅立叶和逆傅里叶变换我使用下面的代码,但结果它给出了黑色图像。
F = fft2(image); F = fftshift(F); % Center FFT
F = abs(F); % Get the magnitude
F = log(F+1); % Use log, for perceptual scaling, and +1 since log(0) is undefined
F = mat2gray(F); % Use mat2gray to scale the image between 0 and 1
Y = ifft2(F);
subplot(1,1,1);
imshow(Y,[]); % Display the result
答案 0 :(得分:2)
您尝试对纯真实(和正),abs(F)
的矩阵的逆FFT进行成像。反FT是一个复杂的FT,因为你失去了原始FT的相位,你将得到奇怪的结果(几乎是黑色图像,最终第一个像素是白色......)。
第二个错误,你移动fft进行一些计算,但是你没有在
之前反转移位对于你想要的,你必须保持FFT的相位:
F = fft2(image); F = fftshift(F); % Center FFT
Fp = angle(F); % Get the phase
F = abs(F); % Get the magnitude
F = log(F+1); % Use log, for perceptual scaling, and +1 since log(0) is undefined
F = mat2gray(F); % Use mat2gray to scale the image between 0 and 1
Y = real(ifft2(ifftshift(F.*exp(1i*Fp))));
subplot(1,1,1);
imshow(Y,[]); % Display the result
注意:您需要采用逆FFT的实部,因为Matlab会自动创建一个复数数组作为FT(直接或反向)的输出,即使它是实际输出。如果您在我的计算机上看到max(abs(imag(Y(:))))
,6e-11的值,则可以检查此项。