【发布时间】:2014-06-05 08:19:13
【问题描述】:
我有 256x256 图像数组(命名为 Mydata),我将 FFT 转换为 fftshift(log1p(abs(fft2(Mydata))));
如何在 MATLAB 中进行逆变换并将结果成像?
【问题讨论】:
标签: image matlab image-processing fft
我有 256x256 图像数组(命名为 Mydata),我将 FFT 转换为 fftshift(log1p(abs(fft2(Mydata))));
如何在 MATLAB 中进行逆变换并将结果成像?
【问题讨论】:
标签: image matlab image-processing fft
要完全重建图像,您还需要相位。如果您回忆一下傅立叶变换的属性,您可以将任何信号分解为其幅度和相位对应物。您在这段代码中所拥有的只是数量级。没有相位,您就无法忠实地重建信号。因此,您需要将相位存储在某处。请记住,任何复数 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 是执行log1p 逆运算的 MATLAB 运算。
【讨论】: