【问题标题】:Smoothing kernel size for box filter箱式滤波器的平滑内核大小
【发布时间】:2021-01-07 02:24:00
【问题描述】:

对于OpenCV中的box filter,smoothing kernel size可以通过cv2.boxFilter()中的ksize参数来定义。我想知道 ksize 是否实际上是 X 和 Y 正方向或原点周围的大小?

在上图中 - ksize 应该是 (1, 1),对吗?还是应该是 (0.5, 1)?例如,对于两个方向的宽度为 5,ksize 应该是 (5, 5) 还是 (10, 5)?对于上述情况,我希望在正负 X 方向上的宽度为 5,在 y 方向上的高度为 5。我认为 y 无论如何都应该是 5,因为对于盒式过滤器来说,负 y 并没有多大意义。

【问题讨论】:

  • 为什么负 y 没有多大意义?对你来说,x 和 y 方向有什么区别?
  • 无论如何,ksize 是框的全宽和全高,框是围绕原点对称定义的。

标签: python opencv image-processing filter signal-processing


【解决方案1】:

通过测试boxFilter的脉冲响应很容易发现。让x 成为 9x9 图像

>>> x
array([[0., 0., 0., 0., 0., 0., 0., 0., 0.],
       [0., 0., 0., 0., 0., 0., 0., 0., 0.],
       [0., 0., 0., 0., 0., 0., 0., 0., 0.],
       [0., 0., 0., 0., 0., 0., 0., 0., 0.],
       [0., 0., 0., 0., 1., 0., 0., 0., 0.],
       [0., 0., 0., 0., 0., 0., 0., 0., 0.],
       [0., 0., 0., 0., 0., 0., 0., 0., 0.],
       [0., 0., 0., 0., 0., 0., 0., 0., 0.],
       [0., 0., 0., 0., 0., 0., 0., 0., 0.]])

然后以cv2.boxFilter(x, 6, (5,5)) 的形式运行带有 ksize=(5,5) 的 boxFilter

array([[0.  , 0.  , 0.  , 0.  , 0.  , 0.  , 0.  , 0.  , 0.  ],
       [0.  , 0.  , 0.  , 0.  , 0.  , 0.  , 0.  , 0.  , 0.  ],
       [0.  , 0.  , 0.04, 0.04, 0.04, 0.04, 0.04, 0.  , 0.  ],
       [0.  , 0.  , 0.04, 0.04, 0.04, 0.04, 0.04, 0.  , 0.  ],
       [0.  , 0.  , 0.04, 0.04, 0.04, 0.04, 0.04, 0.  , 0.  ],
       [0.  , 0.  , 0.04, 0.04, 0.04, 0.04, 0.04, 0.  , 0.  ],
       [0.  , 0.  , 0.04, 0.04, 0.04, 0.04, 0.04, 0.  , 0.  ],
       [0.  , 0.  , 0.  , 0.  , 0.  , 0.  , 0.  , 0.  , 0.  ],
       [0.  , 0.  , 0.  , 0.  , 0.  , 0.  , 0.  , 0.  , 0.  ]])

就像cris说的,ksize是box的全宽和全高,filter是居中的。

【讨论】:

  • 很好的演示如何自己解决问题。值得一票,即使你拼错了我的名字。 :)
  • 感谢帕斯卡!
  • 脉冲响应是对滤波器进行逆向工程的秘密武器。
  • @CrisLuengo 对不起!我修好了。
猜你喜欢
  • 1970-01-01
  • 2013-02-01
  • 2012-12-13
  • 1970-01-01
  • 1970-01-01
  • 2012-03-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多