python - 平滑框过滤器的内核大小

标签 python opencv image-processing filter signal-processing

对于OpenCV中的盒式过滤器,可以通过cv2.boxFilter()中的ksize参数定义平滑内核的大小。我想知道ksize实际上是X和Y方向正方向上的尺寸还是原点周围的尺寸?
(a) shows a box filter. I am assuming that the corresponding ksize would be (1, 1)
在上图中-ksize应该为(1,1),对吗?还是(0.5,1)?如果在两个方向上的宽度均为5,则ksize应该是(5,5)还是(10,5)?对于上述情况,我希望在正X方向和负X方向上的宽度均为5,在y方向上的高度为5。我认为y应该始终为5,因为对于框式过滤器来说,负y并没有多大意义。

最佳答案

通过测试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.  ]])
就像克里斯说的那样,ksize是盒子的整个宽度和高度,过滤器居中。

关于python - 平滑框过滤器的内核大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63984673/

相关文章:

python - SQLAlchemy 从查询结果中访问列类型

python - 每十年检索一次

c++ - 通过 openCV 创建矩形蒙版的更好方法

python-3.x - 如何修复错误 “module ' cv2.cv 2' has no attribute setMouseCallBack?”

opencv - 如何在 OpenCV 中定义分水岭的标记?

python - Python 2.7 的操作顺序

python - 如何从ray中的对象存储中清除对象?

c++ - 使用 C++ 和 Opencv 的注视点/区域

opencv - 使用 OpenCV 查找重叠/复杂的圆

image-processing - 如何将 EMNIST 数据加载到 Tensorflow