我打算假设您知道MSER特征检测如何工作的基础知识(如果没有,请参阅Wikipedia和简短摘要)。
您有两种类型的MSER区域,正面和负面。
第一种类型,通过对所有强度进行阈值处理(对于灰度图像,0
至255
)。例如。对于阈值T = 100
,具有强度<= 100
的所有像素被分配为black
或,并且所有像素> 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指示区域需要稳定以被认为是最大稳定的多少个不同的灰度级。对于较大的三角洲,您将获得较少的区域。
注:在original paper引入MSER区域,实际的计算公式为:
V_T = (size(CC_{T+delta}(p))-size(CC_{T-delta}(p)))/size(CC_T(p))
在OpenCV实现使用一个稍微不同的公式,以加快特征提取。
minArea,maxArea
如果区域是最大稳定,它仍然可以,如果它具有小于minArea像素或多于maxArea像素拒绝。
maxVariation
回到从点1的变化(相同的功能,为增量):如果一个区域是最大稳定,它仍然可以,如果该区域的变化是大于maxVariation拒绝。即使该区域“相对”稳定(比邻居区域更稳定),它也可能不是“绝对”稳定的。对于较小maxVariation,你会得到欠发达地区
minDiversity
此参数存在修剪过于相似的区域(例如,对于只有几个像素不同的)。
对于区域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)
。对于较大的多样性,您将获得较少的区域。
(对于该参数的精确公式我不得不通过该程序代码以DIG)
完美答案!非常感谢。 – Flayn
OpenCV返回的区域大于maxArea ... – Flayn
@Flayn我知道这是对您的评论的一个非常迟的回应,但OpenCV一般在MSER实现方面存在一些问题(或者至少在之前有几个版本,而且稳步通过几个版本)。它返回的区域甚至不总是按定义最大限度地稳定... – penelope