我有256x256图像数组(名为Mydata
),我将FFT转换应用为fftshift(log1p(abs(fft2(Mydata))));
如何反转变换并在MATLAB中对结果进行成像?
答案 0 :(得分:1)
要完全重建图像,您还需要相位。如果您回想起傅立叶变换的属性,您可以将任何信号分解为其幅度和相位对应物。你在这段代码中所拥有的只是幅度。如果没有相位,则无法忠实地重建信号。因此,您需要将阶段存储在某处。请记住,任何复数num
都可以用欧拉形式表示,例如:
num <-> abs(num)*exp(j*angle(num));
abs
是num
的幅度,angle
是num
的阶段。现在,假设您存储了幅度和阶段:
magData = abs(MyData);
phaseData = angle(MyData);
巧合的是,angle
是MATLAB函数,用于确定复值矩阵中每个元素的相位。要实现逆操作,您只需反转上面执行的操作即可获得原始图像:
ifft2(expm1(ifftshift(magData.*exp(j*phaseData))));
expm1
是MATLAB操作,执行log1p
的反转。