2016-11-02 14 views
2

各画像にFFTを適用しました。私は画像1と2の両方の角度または位相を抽出した。その後、両方の画像間の位相応答を交換したいが、絶対値はそのままにしておきたい。私がこれまで持っているコードは次のとおりです。私は、問題は私たちが行列(fft2)をフーリエ変換内の複素数を変更しなければならないことだと思います2つの画像の位相応答を入れ替えるにはどうすればいいですか?

error: assignment failed, or no method for '<unknown type> = matrix' 

Image1=double(imread('/home/anelmad/Desktop/ml/signal_images_processing/tp6/barbara.png'))/255; 
Image2=double(imread('/home/anelmad/Desktop/ml/signal_images_processing/tp6/lena.bmp'))/255; 
Image1=fft2(Image1); 
Image2=fft2(Image2); 

figure(1); 
imshow(angle(Image1)); 
x=(angle(Image1)); 
angle(Image2)=x; 

figure(2); 
imshow(Image2); 

私はこのエラーを取得します。あれは正しいですか?

+0

angle(Image2)= angle(Image1) – vincet

答えて

8

はい、位相応答を操作する必要があります。ただし、位相応答を正しくスワップしているわけではありません。あなたが求めていることを正しく行うためには、も各画像の大きさを抽出する必要があります。あなたは、両方の画像間の位相応答を交換したい場合、あなたは、単に計算する必要がある、

したがって:あなたはその大きさの観点から、位相の信号の周波数応答を表すことができ、複雑な分析からリコール大きさを取って位相の指数で乗算し、その引数に複素数1jを乗じた出力応答の各要素の上記の式。さらに、を保証して、2つの画像の最終周波数応答を計算するときに2つの角度を交換する必要があります。私はまた、両方の画像の周波数応答変数をそれぞれImage1_FFTImage2_FFTと呼ぶつもりです。注意しなければならないことは、2つの画像の間のFFTサイズが同じか、これが機能しないことを確認する必要があることです。したがって、両方の画像の間で最大の次元が何であるかを決定し、両方の次元でこれらの多くの点を使用してFFTをとった後、その逆を取って画像を再構成します。結果がどのように見えるかをより明確に示すため、結果を切り抜かないことに注意してください。これらの結果を示す上で最も効果的なのは、両方の画像が同じサイズである場合です。

% Read the images in 
Image1=double(imread('/home/anelmad/Desktop/ml/signal_images_processing/tp6/barbara.png'))/255; 
Image2=double(imread('/home/anelmad/Desktop/ml/signal_images_processing/tp6/lena.bmp'))/255; 

% Find dimensions and extent of the FFT 
[rows1, cols1] = size(Image1); 
[rows2, cols2] = size(Image2); 

rows = max(rows1, rows2); 
cols = max(cols1, cols2); 

% Take the FFT 
Image1_FFT=fft2(Image1, rows, cols); 
Image2_FFT=fft2(Image2, rows, cols); 

% NEW - Find the magnitudes and phase responses 
mag1 = abs(Image1_FFT); 
mag2 = abs(Image2_FFT); 
pha1 = angle(Image1_FFT); 
pha2 = angle(Image2_FFT); 

% Recompute frequency responses by swapping the phases 
out1 = mag1 .* exp(j*pha2); 
out2 = mag2 .* exp(j*pha1); 

% Find the inverse images 
out1 = real(ifft2(out1)); 
out2 = real(ifft2(out2)); 

% Show the images 
figure; 
imshow(out1, []); 
figure; 
imshow(out2, []); 

レッツ・カメラマンの画像における負荷とマンドリルの画像が、のは、マンドリルのイメージが大きいとカメラマンの画像と同じサイズまでマンドリルの画像のサイズを変更することを確認してみましょう。この場合、私は結果が両方の画像が同じ大きさでどのように見えるかをお見せしたい:

Image1 = im2double(imread('cameraman.tif')); 
load mandrill; 
clear caption; 
Image2 = X/255; clear X; 
Image2 = imresize(Image2, 0.5, 'bilinear'); 

彼らは次のようになります。

enter image description here

enter image description here

この両方の画像の位相応答を入れ替えて実際に画像を再構成すると、何が起こるのですか?

enter image description here

enter image description here

あなたが見ることができるように、画像の主要な構造が入れ替わっています。カメラマンはマンドリル画像に見え、その逆もあります。要点は、フェーズはイメージのオブジェクトの構造において重要な役割を果たしているということです。単にこのマグニチュードだけではなく、この探索的なエクササイズのポイントです。

関連する問題