图像处理-在二进制图像中计算白色空间的质心算法

3
问题在于我需要一个简化版的算法,来计算二值图像中多个白色轮廓的质心。例如,如果只有一个白色轮廓,则可以使用以下公式计算轮廓中心的坐标Xc和Yc:
公式
其中,M是强度m_i的总和,m_i是像素的强度值,x_i和y_i是图像上的像素位置,n是像素总数。
有人能建议一些类似的方法来处理多个轮廓,或者在使用相同公式计算其中一个轮廓时如何忽略其他轮廓?

3
注意,你的归一化应该是在 sum(m_i) 上完成,而不是在 M 上完成。 - Geoff
1
我在图像处理书中找到了这个公式。在你提到它是错误的之前,我没有注意到它。:)) - user3029227
你能多说一些关于你的问题吗?根据你的环境,可能有一些库/简化可以适用。也许可以展示一张图片和你所拥有的代码? - Geoff
实际上,我认为M可能被定义为总重量。(我把它和n混淆了。) - Geoff
我不需要代码,这是为了一篇论文。环境是黑色空间中的两个白色圆圈。二进制图像,没有噪音。 - user3029227
2个回答

2
首先使用一些被称为连通区域标记的算法来分离不同的斑块。这将为每个区域分配一个唯一的ID。然后,您可以计算每个斑块的质心。

1
如果我这样做不是很好吗——在分离不同的 blob 后,将我暂时不使用的 blob 的强度设置为零?例如,有值为 1、2、3、4 的 blob。现在我需要计算第一个 blob 的质心,所以其他的 blob 2、3、4 都变成了 0,这样我就可以使用上面的公式了。 - user3029227
1
@user 是的,但是那样你会得到一个次优的运行时间。你可以在O(CC大小)而不是O(图像大小)中处理连接组件。 - Niklas B.
@sansuiso 有时候会出现一些轮廓中间有噪点的情况,导致连通组件无法将其作为整体检测出来。 - Vikram Bhat
在我的情况下,没有噪音,只有两个白色轮廓。 - user3029227

1
你可以使用k均值算法k means,并使用不同的k值来获得最小平方误差。找到连通组件可以帮助您获得图像中的最大斑点,但容易受到噪声的影响,但它是总轮廓的上限。在使用k均值计算聚类后,计算轮廓的质心就很容易了。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接