10

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

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

4

3 回答 3

14

斑点特征. 上图几乎解释了不同过滤器参数的作用。当 SimpleBlobDetector 看到圆形斑点时最开心,不同的过滤器会过滤掉与圆形偏差的不同孩子。

惯性测量斑点的短轴和长轴的比率。

该图还显示了圆度和惯性之间的差异。我从LearnOpenCV.com的Blob 检测教程中复制了这个图

于 2015-02-25T06:11:19.850 回答
9

我也一直在想这个问题;OpenCV 文档在 blob 检测方面不是很有帮助。

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

涉及到很多数学问题——其中大部分我不记得该怎么做——但是这个页面底部关于二进制图像属性的结果总结得很好(斑点检测是通过转换输入图像到一系列二进制图像):

这个比率I_min/I_max让我们对物体的圆润程度有了一些了解。对于一条线,该比率为 0,对于圆形,该比率为 1。

所以基本上,通过指定minInertiaRatiomaxInertiaRatio您可以根据它们的拉长程度过滤斑点。惯性比为 0 将产生细长的斑点(更接近线),而惯性比为 1 将产生区域更集中于中心(更接近圆形)的斑点。

于 2013-02-08T16:55:47.713 回答
2

这是物理解释:

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

如果有不同的值,在某个方向总是会有一个“最大”惯性,而轴与“最大”相距 90 度的位置总是有一个“最小”惯性。惯性比只是这些惯性之间的比率,最小/最大。

对于不是椭圆的形状,该度量告诉您整体形状是大致拉长的,还是在各个方向上大致相同;不特别关心不均匀的边界或切口和凹陷(圆度和凸度)。

在数学上,它做了这样的事情:

  1. 将 blob 中的点集视为 (x,y) 样本的总体
  2. 求这些的均值,以及协方差矩阵 x 与 y
  3. 求协方差矩阵的两个特征值(由于该矩阵的性质,它们与其奇异值相同)
  4. 惯性比是这两个值之间的比率,最小/最大。
于 2016-06-24T16:03:51.230 回答