【问题标题】:Filtering image with fft用fft过滤图像
【发布时间】:2013-01-14 23:09:38
【问题描述】:

我正在尝试使用 2D FFT 对图像应用滤镜。我有滤波器矩阵(卷积核等),但如果我想使用 fft,我需要将滤波器和图片矩阵扩展为 2 方阵的幂。

首先我用零扩展它(所以图片和过滤器的矩阵将在 2 矩阵的大幂次的左上角),我得到了这个结果

然后我尝试了在不使用 fft 的情况下应用卷积时对图片矩阵所做的操作,从每侧使用滤波器维度/2 的填充图片矩阵,然后使用简单的扩展滤波器矩阵到 2 的幂矩阵进行卷积的填充矩阵fft 我得到了这个

这是原图。

关于算法: 我在两个扩展矩阵上应用 2d fft,而不是在我做简单的逆 fft 之后的点乘矩阵。图片矩阵也是从0到16M的数字(前8位是红色,第二个8位是绿色,第三个8位是蓝色)

我认为问题在于我如何将图片和过滤矩阵扩展为 2 矩阵的平方幂,但我不确定。我测试了 fft 函数(fft 和反 fft,我得到了相同的图片(没有逐点乘法))

过滤器也是

 0 .2  0
.2 .2 .2
 0 .2  0

【问题讨论】:

    标签: image fft convolution


    【解决方案1】:

    您无需一次全部转换图像。 在子块上使用 FFT。按内核大小重叠转换后的子图像,然后丢弃环绕瞬态(重叠保存)或添加输入开启和输入关闭瞬变(重叠添加)。

    先了解fast convolution,然后再尝试二维。

    【讨论】:

    • 对不起,我不明白。子块的尺寸应该是多少?此外,在转换为子图像时,我如何创建环绕瞬态?我知道如何在没有 FFT 的情况下应用卷积,但使用 FFT 让我很困惑。
    • FFT 完成循环卷积。如果 FFT 长度大于两个信号长度之和减去 1,则这等效于线性(即正常)卷积。
    • 另一件事:您在上面提供的过滤器非常小。使用 FFT 可能比直接卷积要慢得多。这只是一个测试过滤器,可以让你的代码变得简单,还是你真正的过滤器?
    • 另外,fft 卷积可以对偶数为 2 的矩阵起作用吗?我重写了代码,所以它会分别为每个通道做 fft 并且它可以工作,但它只适用于 2^n ,其中 n 是奇数。
    • 它应该适用于几乎任意的 FFT 大小。您是否在一次 FFT 中完成整个图像?从技术上讲,这应该可行,但它会比需要的速度慢,并且会限制您可以过滤的图像大小。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-14
    • 2014-12-31
    相关资源
    最近更新 更多