我假设您了解 MSER 特征检测的工作原理(如果不了解,请参阅Wikipedia和简短回顾)。
您有两种类型的 MSER 区域,正面和负面。
第一种类型,您通过对所有强度进行阈值处理(对于灰度图像,0
到255
)。例如,对于一个阈值T = 100
,所有具有强度的像素< 100
都被分配black
,或foreground
,并且所有像素>= 100
的强度都是white
或background
。
现在,假设您正在观察一个特定的像素p
。在某个阈值处,我们称之为T1
,它将开始属于前景并保持这种状态直到T=255
。在T1
一个像素将属于一个组件CC_T1(p)
。5
灰度级之后,它将属于组件CC_(T1+5)(p)
。
针对所有阈值获得的所有这些连接组件都是 MSER 的潜在候选者。(如果您反转我的black/foreground
和white/background
分配阈值,则会获得其他类型的组件)。
参数有助于确定哪些潜在候选人确实是最大稳定的:
三角洲
对于每个区域,都会测量变化:
V_T = (size(CC_T(p))-size(CC_{T-delta}(p)))/size(CC_{T-delta}(p))
对于每个可能的阈值Ti
。如果一个像素的这种变化是变化的局部最小值,即V_T < V_{T-1}
和V_T < V_{T+1}
,则该区域是最大稳定的。
参数delta表示一个区域需要多少个不同的灰度级才能被认为是最大稳定的。对于较大的 delta,您将获得较少的区域。
注意:在介绍 MSER 区域的原始论文中,实际公式为:
V_T = (size(CC_{T+delta}(p))-size(CC_{T-delta}(p)))/size(CC_T(p))
OpenCV 实现使用稍微不同的公式来加速特征提取。
最小面积,最大面积
如果一个区域是最大稳定的,如果它的像素小于minArea像素或大于maxArea像素,它仍然可以被拒绝。
最大变化
回到点 1 的变化(与 delta 的函数相同):如果一个区域是最大稳定的,如果该区域的变化大于maxVariation ,它仍然可以被拒绝。
也就是说,即使该区域“相对”稳定(比相邻区域更稳定),它也可能不够“绝对”稳定。对于较小的 maxVariation,您将获得较少的区域
最小多样性
该参数用于修剪过于相似的区域(例如,只有几个像素不同)。
对于一个最大稳定的区域CC_T1(p)
,找到一个区域是CC_T2(p)
“父最大稳定区域”。这意味着 ,T2 > T1
是CC_T2(p)
一个最大稳定的区域,并且不存在最大稳定的T2 > Tx > T1
区域CC_Tx(p)
。现在,比较父级的大小:
diversity = (size(CC_T2(p)) - size(CC_T1(p))) / size(CC_T1(p))
如果这diversity
小于maxDiversity,则删除CC_T1(p)
该区域。对于更大的多样性,您将获得更少的区域。
(对于这个参数的确切公式,我不得不挖掘程序代码)