我正在评估图像的傅立叶变换乘以随机相位掩模。调整随机相位使得初始量的角度值(即下面代码中的A1)位于0到pi之间。在逆傅立叶变换时,值范围变为-pi到pi(即代码中的A),因为MATLAB中的角度函数将-pi中的值返回到pi范围。有没有办法将角度的值范围(即A)限制为0到pi?代码附后。 fft2和ifft2是MATLAB的内置函数,分别用于生成傅立叶变换和逆傅立叶变换。
clear all;
close all;
clc;
%generation of two concentric circles image
[x,y]=meshgrid(-64:1:63);
g0= (x.^2+y.^2<=25^2).*(x.^2+y.^2>=20^2)+(x.^2+y.^2>=50^2).*(x.^2+y.^2<=55^2);
figure;
imagesc(abs(g0));
colormap(gray);
axis off;
axis equal;
title('input image');
delta1=rand(128);%random phase generation
%generating initial quantity EL
EL=(g0/(sqrt(2))).*exp(1i*pi*delta1);
A1=angle(EL);
FT=fft2(EL);
IFT=ifft2(FT);
A=angle(IFT);
答案 0 :(得分:0)
在ifft之后,零不会完全恢复为零,但会变成非常小的数字,如1e-17 + j * 2e-17。
你可以在ifft之后用力将非常小的数字变为零。
请插入一些代码,如下所示。
[x,y]=meshgrid(-64:1:63);
g0= (x.^2+y.^2<=25^2).*(x.^2+y.^2>=20^2)+(x.^2+y.^2>=50^2).*(x.^2+y.^2<=55^2);
figure(1);
imagesc(abs(g0));
colormap(gray);
axis off;
axis equal;
title('input image');
delta1=rand(128);%random phase generation
%generating initial quantity EL
EL=(g0/(sqrt(2))).*exp(1i*pi*delta1);
A1=angle(EL);
FT=fft2(EL);
IFT=ifft2(FT);
dim=size(IFT);
for k=1:dim(1);
for m=1:dim(2);
if real(IFT(k,m)) < 1e-10 & imag(IFT(k,m)) < 1e-10
IFT(k,m) = 0;
end
end
end %changing very small number into zero by force
A=angle(IFT);