限制傅立叶变换量的角度范围

时间:2017-05-11 06:48:18

标签: matlab fft

我正在评估图像的傅立叶变换乘以随机相位掩模。调整随机相位使得初始量的角度值(即下面代码中的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);

1 个答案:

答案 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);