【问题标题】:why cv::cuda::createMedianFilter function is slower than cv::medianBlur?为什么 cv::cuda::createMedianFilter 函数比 cv::medianBlur 慢?
【发布时间】:2016-11-05 09:19:34
【问题描述】:

如您所知,Ptr<Filter> cv::cuda::createMedianFilter (int srcType, int windowSize, int partition=128) 函数已添加到 OpenCV3.1.0。

我正在尝试对具有自定义窗口大小(最多 21 个)的 8 位大图像(6000*6000)进行中值过滤。我比较了cv::medianBlurcv::cuda::createMedianFilter,结果是

windowSize    cv::medianBlur    cv::cuda::createMedianFilter
    3             0.071 sec         3.637 sec
    5             0.285 sec         3.679 sec
    11            2.641 sec         3.652 sec
    19            2.566 sec         3.719 sec

1) 为什么 cuda::createMedianFilter 比 cv::medianBlur 慢?

2) 我如何编写内核代码来实现使用具有自定义内核大小的 opencv Mat 的中值滤波器?

【问题讨论】:

  • 问题2,你想问哪一个? CUDA代码怎么写,还是只有CUDA卷积代码怎么写?
  • @kangshiyins CUDA卷积代码怎么写

标签: opencv gpu opencv3.1


【解决方案1】:

我也用cuda::createMedianFilter()发现,每次调用MedianFilter::apply()都会新分配两个GpuMatfilter->apply(),GPU内存分配非常耗时,所以我把这两个Mats移到MedianFilter类中成为成员vars(除非图像大小发生变化,否则不要再次分配)。

使用 1000 张图像 (400 * 300) 测试速度提高 4 倍。另外,好像参数partitions可以设置为src.rows / 2,比原来的parameter-128要快。

src code 中的两个垫子是GpuMat devHist; GpuMat devCoarseHist

【讨论】:

    【解决方案2】:

    在图像大小不变的情况下,卷积运算的速度主要取决于滤波器核的大小。考虑到排序比求和更复杂,中值滤波将花费更长的时间。

    要下层实现自定义过滤内核的CUDA卷积函数,需要获取图像数据的原始指针

    MyConv(char* image, int width, int height, int stride)
    

    然后编写 CUDA 代码。

    这是关于 cuda 卷积的教程。

    http://igm.univ-mlv.fr/~biri/Enseignement/MII2/Donnees/convolutionSeparable.pdf

    这个问题也举了一个例子。

    cuda convolution mapping

    【讨论】:

    • 感谢kangshiyin,在OpenCV的两个函数(medianBlur和createMedianFilter)中我们都可以设置kernelSize。你能清楚地回答第二个问题吗?
    • @amirhossein 你的意思是“自定义内核”而不是“自定义内核大小”吗?
    • @kangshiyins custom kernel size mean: kernel radius, like 3, 5, 7, 9, 11, 13, 15.自定义内核,如5*5的内核,即填充'1'三角形顶部或三角形底部,甚至只有第三行。例如,内核为 5*5,第三行填充为“1”,25 个内核元素中只有 5 个元素为“1”
    • @amirhossein 我知道,但您想在第二季度了解哪一个?你写了“自定义内核大小”,但我认为它会是“自定义内核”
    • @kangshiyins 对于第一个版本,内核大小为 15*15,内核形状为圆形。在这种情况下,用 '1' 填充 157 像素
    猜你喜欢
    • 1970-01-01
    • 2013-01-28
    • 1970-01-01
    • 2017-07-05
    • 2014-06-21
    • 2021-11-18
    • 2016-11-10
    • 1970-01-01
    • 2021-12-22
    相关资源
    最近更新 更多