首页 > 解决方案 > 如何在matlab中将一幅图像的相位与另一幅图像的幅值组合并生成组合图像的倒数

问题描述

我计算了两个图像(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')  

标签: imagematlabfft

解决方案


假设两个图像的大小相同,您可以使用以下公式组合幅度和相位:

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

然后获得逆只是一个简单的使用问题ifft2(可能随后ifftshift取决于您的应用程序;如果没有更多上下文,我无法判断您是否需要使用fftshift'ed 图像):

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

推荐阅读