我不明白 filterByInertia 是什么意思......我也不明白文档的小描述:
通过最小惯量与最大惯量之比。提取的 blob 将在minInertiaRatio
(包括)和maxInertiaRatio
(不包括)之间具有此比率。
我不明白 filterByInertia 是什么意思......我也不明白文档的小描述:
通过最小惯量与最大惯量之比。提取的 blob 将在minInertiaRatio
(包括)和maxInertiaRatio
(不包括)之间具有此比率。
. 上图几乎解释了不同过滤器参数的作用。当 SimpleBlobDetector 看到圆形斑点时最开心,不同的过滤器会过滤掉与圆形偏差的不同孩子。
惯性测量斑点的短轴和长轴的比率。
该图还显示了圆度和惯性之间的差异。我从LearnOpenCV.com的Blob 检测教程中复制了这个图
我也一直在想这个问题;OpenCV 文档在 blob 检测方面不是很有帮助。
根据其他斑点分析仪的描述,斑点的惯性是“斑点对围绕其主轴旋转的惯性阻力”。这取决于斑点的质量(我猜在这种情况下是区域)如何分布在整个斑点的形状中。
涉及到很多数学问题——其中大部分我不记得该怎么做——但是这个页面底部关于二进制图像属性的结果总结得很好(斑点检测是通过转换输入图像到一系列二进制图像):
这个比率让我们对物体的圆润程度有了一些了解。对于一条线,该比率为 0,对于圆形,该比率为 1。
所以基本上,通过指定minInertiaRatio
,maxInertiaRatio
您可以根据它们的拉长程度过滤斑点。惯性比为 0 将产生细长的斑点(更接近线),而惯性比为 1 将产生区域更集中于中心(更接近圆形)的斑点。
这是物理解释:
如果你在一张卡片上剪下一团,你可以找到它的重心,然后在上面连接一个轴,穿过这个点(轴平行于卡片),然后旋转它,测量它的力矩的惯性。根据形状的不同,您可能会根据放置轴的方式获得不同的值。对于椭圆,当轴沿长(长)轴连接时,您将获得最低值,而当轴沿短轴放置时,您将获得最大值(这样更多的卡片远离轴)。当然,对于一个圆来说,惯性总是相同的。
如果有不同的值,在某个方向总是会有一个“最大”惯性,而轴与“最大”相距 90 度的位置总是有一个“最小”惯性。惯性比只是这些惯性之间的比率,最小/最大。
对于不是椭圆的形状,该度量告诉您整体形状是大致拉长的,还是在各个方向上大致相同;不特别关心不均匀的边界或切口和凹陷(圆度和凸度)。
在数学上,它做了这样的事情: