图像处理 - 计算二值图像中空白质心的算法

Posted

技术标签:

【中文标题】图像处理 - 计算二值图像中空白质心的算法【英文标题】:Image processing -Algorithm to calculate centroids of white space in binary image 【发布时间】:2014-03-14 01:16:03 【问题描述】:

问题是我需要一个简化版本的算法,它可以计算二进制图像中几个白色轮廓的质心。例如,如果只有一个白色轮廓,则轮廓中心的坐标 Xc 和 Yc 使用公式计算:

其中M是m_i强度之和,m_i是像素强度值,x_i和y_i是图像上的像素位置,n是像素总数。

任何人都可以提出类似的方法来处理多个轮廓,或者如何在使用相同的公式计算其中一个轮廓时忽略其他轮廓?

【问题讨论】:

小心,你的标准化应该超过 sum(m_i),而不是超过 M。 我在图像处理书上找到了这个公式。直到你提到这是错误的,我才注意到。 :)) 你能告诉我们更多关于你的问题吗?根据您的环境,可能会有一些适用的库/简化。也许显示和图像,你有什么代码? 其实我觉得M大概是定义为总权重。 (我把它和n 混淆了。) 我不需要用于论文的代码。环境是黑色空间中的两个白色圆圈。二进制图像,没有噪音。 【参考方案1】:

首先使用一些称为connected component labeling 的算法来分离不同的blob。这将为每个区域分配一个唯一的 ID。然后,您可以计算每个 blob 的质心。

【讨论】:

如果我这样做不是正确的吗 - 在分离不同的 blob 之后,我将我目前不使用的 blob 的强度设置为零?例如有值的blobls:1 2 3 4..现在我需要计算第一个blob的质心,所以其他blob 2 3 4,得到0,所以我可以使用上面的公式。 @user 是的,但这样你得到的运行时间并不理想。您可以在 O(size if CC) 而不是 O(size of image) 中处理连接的组件 @sansuiso 在某些情况下,某些轮廓之间可能有噪声,并且连接的组件不会整体检测到它。 在我的例子中,没有噪音只有两个白色轮廓。【参考方案2】:

您可以使用k means 算法与不同的 k 值,其中最小平方误差。查找连接的组件可以帮助您获得图像中的最大斑点,但容易受到噪声的影响,但它是存在的总轮廓的上限。使用 k 计算聚类后,计算轮廓的质心很简单。

【讨论】:

以上是关于图像处理 - 计算二值图像中空白质心的算法的主要内容,如果未能解决你的问题,请参考以下文章

OpenCV---超大图像二值化和空白区域过滤

图像灰度化、二值化理解

一种超级快速的图像二值化技术

如何进行数字图像处理中的膨胀和腐蚀计算

图像二值化处理Java

二值图像连通分量的提取(python+opencv)