【问题标题】:Why do MSER results have overlapping pixels为什么 MSER 结果有重叠像素
【发布时间】:2017-05-13 07:14:04
【问题描述】:

首先,我通过 matlab 通过 2 种不同的方法使用 opencv MSER:

  1. 通过matlab 的detectMSERFeatures 函数。这似乎叫 opencv MSER(通过在 detectMSERFeatures 函数中调用 ocvExtractMSER)
  2. 通过更直接的方法:opencv 3.0 wrapper/matlab bindings found in https://github.com/kyamagu/mexopencv

无论哪种方式,我都可以取回我认为是 opencv MSER::detectRegions 2nd arg, "std::vector> &msers 的翻译的像素列表(又名区域)列表"

结果可以是一个包含多个区域的列表,每个区域都有自己的一组点。但是,这些区域的点并不相互排斥。事实上,对于我的前景通常是圆形斑点的数据,它们通常都是同一个连接组件的一部分。即使斑点甚至没有任何孔也是如此(我可能会理解这些区域是否对应于轮廓并且斑点是否有孔)。

我假设这种多区域对一的区域映射甚至是实体 blob 是由于 opencv 的 MSER,在其本机 C++(?)实现中,做同样的事情,但我承认我还没有验证那个(但我肯定不明白。)

那么,有人知道为什么 MSER 会为单个实体连接组件产生多个重叠区域吗?选择一个有什么意义吗?如果有,怎么选? (现在我只是将它们全部组合起来)

编辑 - 我尝试了一个带有一个 blob 的图像,然后我复制了一个图像,其中左半部分与右半部分相同(每一半都是相同的,每个都有相同的 blob )。 MSER 返回 9 个列表/区域,全部对应于这两个 blob。因此,我将不得不进行连通分量分析,以找出区域的哪些子集属于什么 blob,因此显然没有任何直接的方法可以选择返回区域的特定子集,以提供最佳表示这两个 blob(如果你知道根据我的上一个预编辑问题只有一个 blob,那么这样的事情甚至是明智的)

下面的图片是通过绘制为我的单个 blob 图像返回的所有 4 个区域(点列表)制作的。叠加层的创建者:

obj = cv.MSER('MinArea',20,'MaxArea',3000,'Delta',2.5);
[chains, bboxes] = obj.detectRegions(Region8b)
a=cellfun(@(x) cat(1,x{:}),chains,'UniformOutput',false) % get rid of extra layer of cells that detectRegions seems to give it.
% b=cat(1,a{:}); % all the regions points in a single list.  Not used here.
ptsstrs={'rx','wo','cd','k.'};
for k=1:4 
    plot(a{k}(:,1),a{k}(:,2),ptsstrs{k},'MarkerSize',15); 
end

因此,您可以看到它们重叠,但似乎也有一个顺序,我认为每个后续区域/列表都是之前列表的超集。

【问题讨论】:

  • 如果您的 blob 有多个灰度级,MSER 可能会返回多个区域,具体取决于它们的分布方式。
  • 如果它不区分区域和它们所属的连接组件,那有什么意义呢?也许我有这个错误,因为我没有使用实际的 opencv lib 版本并看到原始 MSER 输出,但如果它像我所看到的那样,它会返回一个区域点列表而没有任何进一步的信息。
  • 给定一个带有多个返回区域的 blob,什么是正确的使用或者是一个主观的东西。结果看起来像是它返回了沿途计算的内容(通过水平集或修剪)

标签: matlab opencv


【解决方案1】:

“MSER 检测器逐步通过输入图像的强度范围来检测稳定区域。ThresholdDelta 参数确定检测器测试稳定性的增量数量。” 这来自 Matlab 帮助。找到重叠和子集是合理的。显然,该区域随着算法强度的上下移动而变化。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-12-19
    • 2022-01-04
    • 1970-01-01
    • 2021-05-09
    • 1970-01-01
    • 1970-01-01
    • 2015-01-12
    • 1970-01-01
    相关资源
    最近更新 更多