Как поменять местами отклики двух изображений?

Я применил БПФ к каждому изображению. Я извлек угол или фазу обоих изображений 1 и 2. После этого я хотел бы поменять местами фазовые характеристики между обоими изображениями, но сохранить величину без изменений. Код, который у меня пока есть:

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

Я получаю эту ошибку:

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

Я думаю, что проблема заключается в том, что мы должны изменить комплексное число в матрице преобразования Фурье (fft2). Это верно?

1 ответ

Решение

Да, вы правы в том, что вам нужно манипулировать фазовым откликом. Однако вы не меняете фазовый отклик должным образом. Чтобы правильно делать то, что вы просите, вы также должны извлечь величину каждого изображения. Вспомните из сложного анализа, где вы можете представить частотную характеристику сигнала с точки зрения его величины и фазы:

Поэтому, если вы хотите поменять местами фазовый отклик между обоими изображениями, вам просто нужно вычислить вышеприведенное уравнение для каждого элемента в выходном отклике, где вы берете величину и умножаете ее на экспоненту фазы с аргументом, умноженным на комплекс. число 1j, Кроме того, вы должны убедиться, что вы поменяли местами два угла при вычислении окончательной частотной характеристики двух изображений. Я также собираюсь назвать переменные частотной характеристики обоих изображений, чтобы быть Image1_FFT а также Image2_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');

Они выглядят так:

Вот что происходит, когда мы меняем фазовые характеристики обоих изображений и реконструируем изображения по факту:

Как видите, преобладающая структура изображений поменялась местами. Оператор виден на изображении мандрил и наоборот. Дело в том, что фаза играет важную роль в структуре объектов на изображениях, а не просто в величине... которая, как я полагаю, является целью этого исследовательского упражнения - чтобы вы пришли к такому выводу.

Другие вопросы по тегам