2017-05-11 12 views
0

ランダム位相マスクを掛けた画像のフーリエ変換を評価しています。ランダム位相は、初期量の角度(すなわち、次のコードにおけるA1)の値が0からπの間にあるように調整される。逆フーリエ変換では、MATLABの角度関数が-piの値をpiの範​​囲に返すため、値の範囲は-piからpi(つまりコードのA)に変化します。角度(つまり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

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); 
+0

ありがとうございます。しかし、私は、IFTの位相を0からπに制限する必要があると述べて間違っていました。そのフーリエ領域における位相量、すなわち角度(FT)は0からpiの範囲に制限する必要がある。さらに、この制限の後でさえ、逆フーリエ変換で入力画像を得るべきである。これは可能ですか、解決できない問題がありますか? –

+0

それはできないと思います。 fftの位相を変更した場合、元の信号はifftの後には復元できません。 – KKS