【问题标题】:Restricting the range of angle of Fourier transformed quantity限制傅里叶变换量的角度范围
【发布时间】:2017-05-11 06:48:17
【问题描述】:

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

【问题讨论】:

    标签: matlab fft


    【解决方案1】:

    经过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);
    

    【讨论】:

    • 非常感谢。但是我错误地指出 IFT 的相位需要限制为 0 到 pi。它是傅里叶域中的相位量,即角度(FT),需要限制在 0 到 pi 的范围内。此外,即使经过这个限制,我们也应该通过傅里叶逆变换得到输入图像。这是可能的还是我在寻找一些无法解决的问题?
    • 我认为这是不可能的。如果改变fft的相位,在ifft之后就不能恢复原来的信号了。
    猜你喜欢
    • 2015-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多