我正在实现 Box 过滤器,我想知道我是否应该允许过滤器掩码大小(如 3 X 5 或其他大小),其中宽度与高度不同。
到目前为止,我只实现了掩码大小为 3x3 或 5x5 的过滤器。允许宽度与高度不同是否有效?我想我可以允许用户指定这样的掩码,但如果他得到奇怪的结果,那是他的错吗?
谢谢
我正在实现 Box 过滤器,我想知道我是否应该允许过滤器掩码大小(如 3 X 5 或其他大小),其中宽度与高度不同。
到目前为止,我只实现了掩码大小为 3x3 或 5x5 的过滤器。允许宽度与高度不同是否有效?我想我可以允许用户指定这样的掩码,但如果他得到奇怪的结果,那是他的错吗?
谢谢
盒子过滤器传统上实现为N x N
,但您可以将其更改为您喜欢的任何内容。
顺便说一句,OpenCV 让您可以创建自己的过滤器,cv::filter2D()
但该功能不允许您创建非二次过滤器。然而,cv::blur()
这是一个盒子过滤器,让你传递N x M
尺寸。
请注意,如果您的应用程序需要使用多个不同大小的框过滤器对同一图像进行重复框过滤,则首先计算给定图像的积分(即 O(N),以像素数 N 为单位)效率更高),然后根据积分计算每个滤波器的输出(同样在 O(N) 中)。对于 m 个过滤器,这给出了一个 m * O(N) 算法,而不管盒子大小。如果您使用几个大框进行过滤,这通常是一个很大的性能提升。
有关 OpenCV 实现,请参见此处。
是的,它是有效的。
过滤器可以在不同的维度上有所不同。如果您使用的镜头在中心周围不均匀,这也可能发生在光学中。