1

We are working on a project where we are going to do image processing on Apache Hadoop. We want to speed up the computation by splitting up images into smaller parts (the images are very large), apply any filters in Fourier domain on each part, then convert back to spatial domain before merging all parts together. We know how to filtering in spatial domain by padding each part with pixels from neighbors (according to the mask size). Does this also apply if filtering is done in the frequency domain?

Mathematically, I think we would lose some of the lower frequencies, but blurring an image vs. blurring all regions independently shouldn't be so much different?

4

2 回答 2

1

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

  1. 将图像分解为重叠的图块(每个方向的重叠量等于过滤器长度 - 1)。
  2. 零填充每个图块(以避免循环卷积)。
  3. 取每个图块的 FFT。
  4. 将结果乘以滤波器的 FFT。
  5. 逆 FFT。
  6. 将结果缝合在一起,确保在重叠区域中求和。
于 2013-05-27T10:54:49.867 回答
1

我认为您会发现通过拆分来有效过滤图像比您想象的要困难(并非不可能)-尽管这不是一种不常见的方法-因为您必须注意构成拆分图像的图块的交叉点。

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

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

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

于 2013-05-27T09:26:42.310 回答