はい、位相応答を操作する必要があります。ただし、位相応答を正しくスワップしているわけではありません。あなたが求めていることを正しく行うためには、はも各画像の大きさを抽出する必要があります。あなたは、両方の画像間の位相応答を交換したい場合、あなたは、単に計算する必要がある、
したがって:あなたはその大きさの観点から、位相の信号の周波数応答を表すことができ、複雑な分析からリコール大きさを取って位相の指数で乗算し、その引数に複素数1j
を乗じた出力応答の各要素の上記の式。さらに、を保証して、2つの画像の最終周波数応答を計算するときに2つの角度を交換する必要があります。私はまた、両方の画像の周波数応答変数をそれぞれImage1_FFT
とImage2_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');
彼らは次のようになります。
この両方の画像の位相応答を入れ替えて実際に画像を再構成すると、何が起こるのですか?
あなたが見ることができるように、画像の主要な構造が入れ替わっています。カメラマンはマンドリル画像に見え、その逆もあります。要点は、フェーズはイメージのオブジェクトの構造において重要な役割を果たしているということです。単にこのマグニチュードだけではなく、この探索的なエクササイズのポイントです。
angle(Image2)= angle(Image1) – vincet