【问题标题】:Why the BorderType option is absent in OpenCV MedianBlur?为什么 OpenCV MedianBlur 中没有 BorderType 选项?
【发布时间】:2015-07-23 08:18:15
【问题描述】:

我正在使用 OpenCV,但我遇到了一个问题,例如为什么 GaussianBlur 有 BorderType 选项,但 MedianBlur 没有?
我研究过可分离式过滤器,也许它与此有关?
因为 GaussianBlur 是可分离的,但 MedianBlur 不是。
而且在 OpenCV 的开源代码中很难理解为什么例如这两个过滤器有那么大的区别。

【问题讨论】:

  • 似乎某个聪明人决定在medianBlur 的上下文中使用borderType=BORDER_REPLICATE 对任何人都适用。但是,例如,当试图从图像中删除细(网格)线时,当线条接触/穿过图像边界时,这种边框类型会产生不需要的结果。我的解决方法是使用copyMakeBorder(..., top/bottom/left/right=ksize/2, borderType=BORDER_REFLECT_101)。但是由于medianBlur(...)也加了边框,所以这里效率有点低……

标签: c++ image opencv


【解决方案1】:

可能是因为决定在中值滤波器的情况下不需要参数。当算法计算接近图像边界的像素的值和该像素外展空间图像域的邻域时,他们只是在其实现中省略它并仅从放置在图像上的像素计算中值,但您可以编写实现而不是省略该像素将它们视为 0 或 128 或 255 或从靠近它们的像素计算的其他值,但这可能不是好方法。

例如,如果您必须使用掩码大小等于 3 的中值滤波器计算图像角落的像素值,那么当您仅从放置在图像上的四个像素计算中值时,它就很好了。您不需要邻域中的所有 9 个像素。添加一些插值可能会扭曲结果。

【讨论】:

  • 但是我看过MedianFilter的源码,有一部分边框。它使用 cv::CopyMakeBorder ,但只使用选项 BORDER_REPLICATE 标记,但不止于此,可以在很多情况下提供帮助。
  • 而且没有填充是无法完成的,因为它会比有填充要慢得多。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-07-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-05
  • 2011-03-27
  • 1970-01-01
相关资源
最近更新 更多