MedianBlur()计算最大内核大小

时间:2019-05-03 11:21:31

标签: opencv

我想使用具有非常高的Ksize(例如301或更高)的MedianBlur函数。但是,如果我将ksize传递的太高,有时该函数将崩溃。错误消息是:

OpenCV Error: (k < 16) in cv::medianBlur_8u_O1, in file ../opencv\modules\imgproc\src\smooth.cpp

(我使用opencv4nodejs,但我也尝试了原始的OpenCV 3.4.6)。 我确实在try / catch循环中减小了ksize,但效果不佳,因为我必须处理视频。

我确实签出了OpenCV源代码并做了一些研究。 在OpenCV 3.4.6中,崩溃来自第241行,文件opencv \ modules \ imgproc \ src \ median_blur.simd.hpp:

for ( k = 0; k < 16 ; ++k )
{
    sum += H.coarse[k];
    if ( sum > t )
    {
         sum -= H.coarse[k];
         break;
    }
}
CV_Assert( k < 16 ); // Error here

t基于ksize计算。但是sum和H.coarse数组的计算非常复杂。

经过进一步的研究,我找到了关于该算法的科学文献:https://www.researchgate.net/publication/321690537_Efficient_Scalable_Median_Filtering_Using_Histogram-Based_Operations

我正在尝试阅读,但老实说,我不太了解。

如何计算给定图像的最大ksize?

1 个答案:

答案 0 :(得分:0)

最大内核大小由图像的位深确定。正如您在出版物中提到的那样:

“ 8位值限制为最大值255。我们的目标是 支持更大的内核,包括更大的内核 大小大于17×17,因此使用更大的32位数据类型。

因此对于数据类型为CV_8U的图像,最大内核大小为255。