image - 如何在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')
解决方案
假设两个图像的大小相同,您可以使用以下公式组合幅度和相位:
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);
推荐阅读
- linux - Erlang:控制Erlang进程崩溃时如何使连接的外部OS进程自动死亡?
- field - 我在哪里可以找到 Google 数据洞察中的交易 ID 字段 (GA4)?
- python - 如何使用 Python 解析来自公共 Google 日历的事件
- python - 如何打印具有给定页面范围的 WORD 文档。Python
- javascript - 我需要使用哪个 jquery 事件来仅查看 Html 中的最后一个数据
- macos - 如何跟踪 Safari 的错误修复?
- javascript - 如何在水平条形图js中的每个条上默认设置百分比值
- flutter - 如何在checkboxlisttile中选择多个复选框
- php - 使用 PHP OOP 和本机 SQL 将大型表单插入 SQL 数据库的最快方法?
- postgresql - 如何在 github 操作中删除 docker 中的 postgresql 模式