图像数据的 FFT:“镜像”以避免边界效应

信息处理 图像处理 fft matlab
2021-12-23 19:10:29

我在 Matlab 中加载并显示了一些大米的图像:

g = imread('rice.png');
imshow(g);

白饭

我对这张图片进行 FFT 并移动它:

G = fft2(g);
imshow(log(abs(fftshift(G)) + 1), []);

FFT(米)

如果我将 ax 和 y 轴放在图像的中心;我发现图像是对称的 g(-x,-y)=g(x,y)。对于一维信号,我们知道实信号的 FFT 具有对称的实部和不对称的虚部。我想这就是我们在这里看到的二维?

由于原始图像底部比顶部更暗,因此在周期性边界处存在强烈的水平不连续性,从而导致 FFT 中出现垂直线。

我想摆脱这种边界效应。一种常见的方法似乎是windowing

但是我想通过我在一篇名为“镜像”的论文中找到的一种技术来解决这个问题。这篇论文不是很具体,所以我需要你的帮助来弄清楚这种方法:-)。

首先,我从原始图像创建一个对称的“平铺”:

tile=[flipdim(g,2) g; flipdim(flipdim(g,1),2) flipdim(g,1)];
imshow(tile);

在此处输入图像描述

现在我对这个“瓷砖”进行 FFT:

Tile=fft2(tile);
imshow(log(abs(fftshift(Tile)) + 1), []) 

在此处输入图像描述

垂直线似乎(几乎)消失了:很好。然而,镜像似乎引入了更多的对称性。

什么是正确的结果:原始图像的 FFT 或“镜像”图像的 FFT?

有没有一种方法可以“镜像”,这样我既能摆脱边界效应,又能获得纯粹的真实 FFT?

提前感谢您的任何答案!

1个回答

原始图像的 FFT 是正确的。您看到的伪影是 DFT 的典型特征,因为 DFT 基函数难以表示非周期性信号。尽管 DFT 的长度是有限的,但它实际上代表了一个延伸到负无穷和正无穷的周期性信号。DFT 的基函数都是正弦曲线,其周期是 DFT 大小的整数除数,因此它们都以相同的值开始和结束,并且很难以这种方式拟合非周期性的信号。所以,想象一下平铺你的图像:边缘确实有一个突然的不连续性。边缘没有很好地匹配,这就是边界效应的原因。

正如您所指出的,在经常使用 FFT 的音频信号处理中,一种非常常见的方法是使用窗口函数。这会使边缘向 0 逐渐变细,并减少这种影响。

在图像处理中,通常使用DCT而不是 DFT,因为它施加了不同的对称约束,可以提供更好的结果。换句话说,它用于防止您遇到的问题。与 DFT 的基函数(记住它们如何以相同的值开始和结束)相比,DCT 的基函数是整数除数或整数除数的一半,因此它们中的许多以不同的值开始和结束。结果,隐含的边界条件不同:假设信号关于其边缘对称,这实际上有点类似于您正在试验的“镜像”。这是我的另一篇文章,其中包含有关 DCT 的更多信息:https ://dsp.stackexchange.com/a/362/392

所以,作为一个简短的总结,如果你完全准备使用 FFT,你可能想尝试开窗。但是,最好的选择可能是使用 DCT,这意味着边界条件类似于您的“镜像”想法,因此可以更好地处理图像。