傅里叶域中的并行图像滤波

时间:2013-05-26 19:35:51

标签: image-processing fft convolution dft

我们正在开发一个项目,我们将在Apache Hadoop上进行图像处理。我们希望通过将图像分割成更小的部分来加速计算(图像非常大),在每个部分上应用傅里叶域中的任何滤波器,然后在将所有部分合并在一起之前转换回空间域。我们知道如何通过用邻居的像素填充每个部分来根据空间域进行过滤(根据掩模大小)。如果在频域中进行过滤,这是否也适用?

在数学上,我认为我们会失去一些较低的频率,但模糊图像与模糊所有区域不应该有太大的不同?

2 个答案:

答案 0 :(得分:1)

我认为你会发现比你想象的那样(并非不可能)比通过分裂有效地过滤图像更困难 - 尽管这不是一种不寻常的方法 - 因为你必须照顾组成的瓷砖的交叉点分裂图像。

正如(我认为)你在问题中所说的,大多数空间滤波器(即那些基于卷积与某些内核的滤波器)在图像的边缘采用启发式方法,其中内核将重叠在图像边界的“外部” 。可以忽略未知像素值,假定为零,从图像反射回来等。在您的情况下,这些效果将发生在图像切片之间的分割中,其中实际上具有“缺失”像素。这可以通过确保瓦片彼此重叠来克服,使得每个瓦片在应用滤波器时可以包括来自其邻居的像素。这同样适用于傅立叶域 - 您还需要确保您的图块足够大以包含您希望保留的所有频率。

第二点 - 你说,为了模糊,“在数学上,我认为我们会失去一些较低的频率” - 但实际上你保留低频并且丢失高频,即在傅立叶域中,模糊是低通滤波器。

如果要分割成足够小的图块,大多数过滤操作可能会更快地保留在空间域中。 FFT的成本将消除您从多线程中获得的任何节省。当然,对于一些傅立叶滤波 - 如解卷积 - 你必须使用整个图像。

答案 1 :(得分:1)

是的,同样的原则适用。这个过程是:

  1. 将图像分解为重叠的图块(每个方向的重叠量等于过滤器长度 - 1)。
  2. 对每个图块进行零填充(以避免circular convolution)。
  3. 对每个图块进行FFT。
  4. 将结果乘以滤波器的FFT。
  5. 逆FFT。
  6. 将结果重新拼接在一起,确保在重叠区域中求和。