Как объединить фазу одного изображения с величиной другого изображения в Matlab и создать инверсию объединенного изображения - PullRequest
0 голосов
/ 10 марта 2019

Я рассчитал преобразование Фурье для двух изображений (img1 & img2) и отобразил его фазу и величину. Я хочу объединить фазу img1 и величину img2 и создать новое изображение. Как я могу сгенерировать объединенное изображение, а также рассчитать его обратное. Ниже мой код:

imagesc(img1); 
img1 = fftshift(img1(:,:,2)); 
F = fft2(img1); 

figure;  
imagesc(log(abs(fftshift(F)))); colormap(gray); 
title('magnitude Spectrum'); 
set(gca,'position',[0 0 1 1],'units','normalized')  
figure; 

imagesc(angle(F)); colormap(gray); 
title('PhaseSpectrum'); 
set(gca,'position',[0 0 1 1],'units','normalized') 

figure;  
imagesc(img2); 
img2 = fftshift(img2(:,:,2)); 
F2 = fft2(img2); 

figure;  
imagesc(log(abs(fftshift(F2)))); colormap(gray); 
title('magnitude Spectrum'); 
set(gca,'position',[0 0 1 1],'units','normalized')  

figure; 
imagesc(angle(F2)); colormap(gray); 
title('PhaseSpectrum'); 
set(gca,'position',[0 0 1 1],'units','normalized')  

1 Ответ

0 голосов
/ 11 марта 2019

Предполагая, что два изображения имеют одинаковый размер, вы можете объединить амплитуду и фазу, используя следующую формулу:

combined = abs(F2) .* exp(i * angle(F));

Тогда получение инверсии - это просто вопрос использования ifft2 (возможно,затем ifftshift в зависимости от вашего приложения; я не могу без контекста сказать, нужно ли вам работать с fftshift 'редактированными изображениями или нет):

combined_img = ifft2(combined);

Если изображения не являютсятого же размера, вы должны сначала получить представления в частотной области того же размера со следующим:

m = max(size(img1,1), size(img2,1));
n = max(size(img1,2), size(img2,2));
F = fft2(img1,m,n);
F2 = fft2(img2,m,n);
...