【问题标题】:Separable 2D Blur Kernel [closed]可分离的 2D 模糊内核
【发布时间】:2011-06-09 02:41:03
【问题描述】:

我们都知道高斯核的可分离性。 还有其他常见的可分离模糊内核吗?

我正在寻找一个几乎与高斯模糊一样快的内核。

由于各种原因,我无法使用高斯模糊。 我更喜欢不需要三角函数的东西(否则我会使用某种像 Hann 这样的“Windows”)。

谢谢。

【问题讨论】:

  • 不清楚您正在寻找 - 为什么高斯不适合您?你知道你可以改变高斯滤波器中的 sigma 来改变内核的整体大小,对吧?

标签: image-processing


【解决方案1】:

从 cmets 到较早的答案,听起来您正在处理一个错误的假设,即计算高斯滤波器系数占应用高斯滤波器成本的很大一部分。这肯定是不是的情况。计算密集型部分是将系数与图像进行卷积。无论系数如何计算,对于任何给定的 NxN 滤波器,其成本都是相同的。

应用高斯(或任何可分离滤波器)的伪代码:

  • 计算一维高斯(或其他可分离滤波器)系数
  • 对于每一行
    • 对于每个列
      • 在水平轴上应用一维系数
  • 对于每一行
    • 对于每个列
      • 在垂直轴上应用一维系数

(注意:在上面的讨论中,我假设一个对称 (NxN) 过滤器。)

【讨论】:

  • 我知道,相信我。我真的想要高斯模糊的替代品。这是必须的。
  • @Drazick:但是 为什么 ?您说这是为了提高效率,但我刚刚解释了为什么如果您切换到不同的过滤器没有区别。还有其他你没有提到的原因吗???
【解决方案2】:

如果您想获得高斯模糊效果而无需花费成本,请多次进行框模糊。无限数量的传递将复制高斯,但只需要大约 3 次就足以欺骗眼睛。

如果您通过分别进行水平和垂直条带来实现框模糊,那么一个非常快速的实现就是扫描每个像素条并保持运行总和,在前面加上像素半径/2,同时减去像素半径/2后面的像素并乘以缓存的 1/半径来计算运行平均值。

这样做的好处是模糊半径对计算所需时间的影响可以忽略不计。

【讨论】:

  • 这是一个移动总和(或平均值,如果归一化)。
【解决方案3】:

盒式过滤器是可分离的并且很常见。但我真的不知道你在寻找什么样的过滤器 - 例如,它应该是旋转对称的吗?如果不是,则行和列模糊过滤器的任何卷积都是可分离的蓝色过滤器。

【讨论】:

  • 它应该具有尽可能接近高斯模糊的效果。欢迎使用圆形对称。谢谢。
  • “尽可能接近高斯模糊”——那么使用高斯模糊有什么问题?
  • 我想要一些更容易计算的东西。更好的性能。
  • @Drazick:你只需要计算系数一次。这样做的成本可以忽略不计。计算密集型部分是将这些系数应用于图像。无论您应用什么类型的过滤器,这将是相同的(对于给定的内核大小)。只需使用高斯并预先计算系数。
  • 不使用高斯但“尽可能接近高斯模糊”的唯一原因可能是这是某种作业,需要使用除高斯以外的其他东西。
【解决方案4】:

可以使用已知的一维信号处理中的经典窗口:
http://en.wikipedia.org/wiki/Window_function

可以使用外积创建 2d 内核。
实现应该与任何可分离的过滤器一样。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-15
    • 1970-01-01
    • 1970-01-01
    • 2011-08-23
    • 2020-10-18
    • 1970-01-01
    相关资源
    最近更新 更多