平均图像滤波是一种非常常见的图像预处理功能,关于平均滤波的简短介绍可以在这里找到。在 Opencv 中,这是由cv::blur完成的。
当平均滤波的大小增加时,这个处理所花费的时间也会增加。提高平均滤波速度的常用方法可以分为两类:
- 提高空间域的速度,例如快速均值滤波技术
- 使用 2D-FFT 提高频域速度
所以在这里我的问题是:通常使用什么方法来提高平均图像过滤的速度?如果有人研究过这个主题,每种方法的优缺点是什么?有人将 cv::blur 的速度与改进的平均图像过滤进行比较吗?谢谢。
对于简单的平均滤波器,最好的选择是使用快速空间域优化,就像你链接的那样。另一个例子是Integral Images。
基本思想是在过滤器框内,某些和在相邻框之间共享,不需要再次计算。缺点是您需要额外的内存来存储这些中间值。优点是复杂度与内核大小无关(给定 N × N 图像,复杂度为N * N * constant
)。
仅当您已经准备好图像 FFT 时,才使用频域技术很方便,可能是因为其他类型的处理需要它。否则计算 2D FFT 是一项N * N * logN * constant
操作,因此优于空间优化滤波。