我正在开发一个图像处理应用程序,该应用程序使用离散傅立叶变换来实现模糊/锐化。该应用程序或多或少都在工作,但是有关机制的某些内容仍然让我感到困惑。

特别地,这是对零频率进行居中的过程。

我看到的示例通过将输入图像与大小等于输入图像的矩阵相乘来预处理(灰度强度的)输入图像,其值是$(-1)^ {x + y} $,其中$ x $是行,$ y $是列,因此按$ 1 $和$ -1 $交替排列的模式

根据注释,这等效于交换矩阵的象限通过翻转$ x $和$ y $轴来实现。了解为什么将输入矩阵乘以1 / -1会导致零频率分量围绕0居中。

感谢

评论

您也可以在Gonzalez的《数字图像处理》的第4章4.6-实现中找到一些参考(我有第二版)。希望对您有所帮助。

#1 楼

哦!真是太酷了!它基于卷积定理(即,在空间/时域中的乘法等效于在频域中的卷积)而起作用。

它不会在$ x $和$ y $轴上翻转,正在旋转傅立叶变换的图像(可想像是在圆柱体周围移动一半)。这里的技巧是在空间域中交替-1,1是频率最高的信号。因此,该图像的傅立叶变换是频域中的单个点。对单个点进行卷积等效于将图像从零频率偏移(旋转)该点。

这里是测试图像:
。它的傅里叶变换看起来像:

如果对交替图像()进行傅里叶变换,它会在傅里叶变换中心处产生一个单点。 (回想一下,我们还没有旋转,所以傅立叶变换的中心是高频,而低频仍然在拐角处。)但这就是“旋转内核”!与该旋转内核进行卷积将所有内容向下和向右移动(但是从右下角掉落的内容将旋转到左上角。)

将原始图像与旋转内核进行卷积(在图像域中)给您:,同时将傅立叶变换图像与旋转核(在频域中)卷积得到:

我们可以检查出,将testimage与图像域中的棋盘相乘得出,其傅立叶变换为:

评论


$ \ begingroup $
我很困惑。这是使用卷积实现类似fftshift的功能吗?直接重新排列4个象限在计算上便宜吗?
$ \ endgroup $
– Endolith
2013年5月9日15:28

$ \ begingroup $
这里没有直接卷积。这是在图像域中使用逐像素乘法来获得傅立叶域中的卷积等效项。是的,fftshift并不是很昂贵,但是这种技巧可能具有更好的缓存行为。逐像素乘法实际上只是翻转了其他每个像素的符号。如此容易矢量化,读-修改-写的写入是保证的高速缓存命中,并且处理器很容易预取读取。
$ \ endgroup $
–流浪逻辑
13年5月9日在16:55

$ \ begingroup $
哦,对,这是一个符号翻转,不是真正的乘法。
$ \ endgroup $
– Endolith
13年5月9日18:00

$ \ begingroup $
为什么测试图像(第二个图像)的傅立叶变换看起来像这样?我实际上看到了两个图像,一个黑色,另一个黑色。
$ \ endgroup $
– hakunami
13年2月2日在2:12

#2 楼

Wandering Logic的答案是正确且详细的。只是认为您想看一些数学而不是图片:

如果看一维情况,您将输入乘以$(-1)^ k = e ^ {j \ omega } $,其中频率$ \ omega $恰好是$ 2 \ pi(k / 2)$。也就是说,乘法会将信号的频谱偏移采样频率的一半。

效果是零频率-之前的索引为0-现在为图像宽度(或高度,取决于您是乘列还是乘行。