opencv SimpleBlobDetector filterByInertia是什么意思?

时间:2013-02-08 10:43:36

标签: opencv

我不明白filterByInertia是什么意思...我也不理解文档的小描述:

通过最小惯性与最大惯性的比率。提取的blob将具有minInertiaRatio(包括)和maxInertiaRatio之间的此比率(不包括)。

3 个答案:

答案 0 :(得分:10)

Blob Characteristics。上面的图像几乎解释了不同的滤波器参数的作用。 SimpleBlobDetector在看到圆形斑点时最开心,而不同的滤镜会过滤掉与圆形形状不同的偏差孩子。

惯性衡量一个blob的次轴和长轴的比率。

该图还显示了圆度和惯性之间的差异。我在Blob Detection Tutorial

复制了LearnOpenCV.com的这个数字

答案 1 :(得分:9)

我一直想知道这一点;在blob检测方面,OpenCV文档不是很有用。

根据other blob analyzers的描述,斑点的惯性是“斑点围绕其主轴旋转的惯性阻力”。这取决于blob的质量(我猜在这种情况下是区域)如何分布在整个blob的形状中。

涉及很多肮脏的东西 - 其中大多数我不记得怎么做 - 但是this page on the properties of binary images底部的结果总结得相当好(blob检测是通过转换来完成的输入图像到一系列二进制图像):

  

比率I_min/I_max让我们了解对象的圆形程度。对于一行,此比率为0,对于一个圆,该比率为1.

基本上,通过指定minInertiaRatiomaxInertiaRatio,您可以根据斑点的长度来过滤斑点。惯性比为0将产生细长的斑点(更接近线),惯性比为1将产生斑点,其中面积更集中于中心(更接近圆圈)。

答案 2 :(得分:2)

这是一种物理解释:

如果你在一张卡片上切掉斑点,你可以找到它的重心,然后在它上面连接一个轴,穿过这个点(轴是平行到卡片上) ,然后旋转它,并测量它的惯性矩。根据形状的不同,您可能会根据轴的放置方式获得不同的值。对于椭圆,当轴沿长(主)轴连接时,您获得最低值;当沿着短轴放置轴时,获得最大值(因此更多的卡远离轴)。当然,对于一个圆,惯性总是相同的。

如果存在不同的值,则在某个方向上始终存在“最大”惯性,并且“轴”与“最大”位置相距90度。惯量比只是这些惯性之间的比率,min / max。

对于不是椭圆形的形状,该指标会告诉您整体形状是否大致拉长,或者在所有方向上的大小大致相同;没有特别关注不均匀的边界或切口和凹陷(圆度和凸度看)。

在数学上,它做了类似的事情:

  1. 将blob中的点集视为(x,y)样本的总体
  2. 找出这些的平均值,以及协方差矩阵x对y
  3. 找出协方差矩阵的两个特征值(由于该矩阵的性质,它与奇异值相同)
  4. 惯量比是这两个值之间的比率,最小/最大。