首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >计算二值图像中物体长度的算法

计算二值图像中物体长度的算法
EN

Stack Overflow用户
提问于 2010-06-08 00:53:12
回答 5查看 3.3K关注 0票数 8

我需要计算二值图像中对象的长度(对象内部像素之间的最大距离)。因为它是一个二进制图像,所以我们可以认为它是一个二维数组,值为0(白色)和1(黑色)。我需要的是一个聪明的(最好是简单的)算法来执行这个操作。请记住,图像中有许多对象。

要澄清的图像:

示例输入图像:

EN

Stack Overflow用户

回答已采纳

发布于 2010-06-08 01:29:27

我认为问题很简单,如果对象的边界是凸的,并且没有三个顶点在一条线上(即不改变多边形就不能删除任何顶点):那么您可以随机选取两个点,并使用简单的梯度下降类型搜索来找到最长的线:

代码语言:javascript
运行
复制
Start with random vertices A, B
See if the line A' - B is longer than A - B where A' is the point left of A; if so, replace A with A'
See if the line A' - B is longer than A - B where A' is the point right of A; if so, replace A with A'
Do the same for B
repeat until convergence

因此,我建议找到每个种子斑点的凸包,删除所有“多余”顶点(以确保收敛),并运行上面的算法。

构造凸包是一个O( n )操作IIRC,其中n是边界像素的数量。对于像这样的小物体来说应该是相当有效的。:我只记得凸包算法需要O( n )来对点进行排序。如果边界点是连接分量分析的结果,则它们已排序。因此,整个算法应该在O(n)时间内运行,其中n是边界点的数量。(不过,这需要做大量的工作,因为您可能需要编写自己的凸包算法,或者修改一个算法来跳过排序。)

添加:对评论的响应

如果你不需要100%的精度,你可以简单地将一个椭圆拟合到每个斑点并计算长轴的长度:这可以通过central moments (IIRC,如果协方差矩阵的最大特征值是平方根)来计算,所以它是一个O(n)运算,可以在图像上进行一次有效的扫描。它还有一个额外的优点,那就是它考虑了斑点的所有像素,而不仅仅是两个极值点,即它受噪声的影响要小得多。

票数 3
EN
查看全部 5 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2991469

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档