【问题标题】:Finding Local Maxima in an Image在图像中查找局部最大值
【发布时间】:2017-05-11 20:21:58
【问题描述】:

我想找到每个“3X3”大小的窗口的局部最大值。那么,我们如何在 OpenCV 中找到图像中每个 3X3 大小窗口的局部最大值?

【问题讨论】:

标签: opencv


【解决方案1】:

可以使用形态学运算dilate:

Mat img; // your input image that you should fill with values
Mat maxims(img.size(), img.type()); // container for all local maximums
dilate(img, maxims, Mat());

因此,“maxims”的每个像素都是“img”中适当的 3x3 窗口的最大值。在 Wikipedia 或其他地方阅读有关形态学运算(膨胀、腐蚀、闭合、打开等)的更多信息。

【讨论】:

  • 为什么不改用minMaxLoc
  • @a-Jays,因为在 3x3 矩阵上多次调用它(作为像素数)效率不高。调用本身将比检测最大值更昂贵,因为它涉及各种初始化,例如临时矩阵头的定义等。在相当大的矩阵上使用时可以忽略不计,但在那些微小的矩阵上则不行。另一方面, dilate() 针对此特定任务进行了高度优化。并且最大值的检测更加简洁 - 只需一行简单的代码,而不是 minMaxLoc 所需的循环。
【解决方案2】:

请看我对Find local maxima in grayscale image using OpenCV的回复

这个想法是用一个中间有一个“洞”的内核进行扩张(即将每个像素替换为其所有邻居中的最大值,不包括像素本身),然后将结果与原始图像进行比较。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-07-29
    • 2014-04-08
    • 2017-01-04
    • 1970-01-01
    • 1970-01-01
    • 2010-12-23
    • 2014-05-15
    • 2016-05-18
    相关资源
    最近更新 更多