【问题标题】:How to find Center of Mass for my entire binary image?如何找到我的整个二进制图像的质心?
【发布时间】:2014-03-24 16:22:55
【问题描述】:

我有兴趣找到整个二进制图像的坐标 (X,Y),而不是单独查找每个组件的 CoM。 我怎样才能有效地做到这一点? 我猜想使用 regionprops,但找不到正确的方法。

【问题讨论】:

  • 你有centroid 的公式,对吧?你试过编码吗?
  • 先计算边界框再计算质心? (因为您不想要单个组件的质心)。
  • 我有方程,计算边界框不会考虑不同组件之间的孔和间隙。

标签: matlab image-processing computer-vision image-segmentation morphological-analysis


【解决方案1】:

您可以将所有区域定义为regionprops 的单个区域

props = regionprops( double( BW ), 'Centroid' ); 

根据BWregionprops的数据类型决定是否应该将每个连接的组件标记为不同的区域,或者将所有非零值视为具有多个组件的单个区域。


或者,您可以自己计算质心

[y x] = find( BW );
cent = [mean(x) mean(y)];

【讨论】:

    【解决方案2】:

    只需遍历所有像素,计算其 X 和 Y 坐标的平均值

    void centerOfMass (int[][] image, int imageWidth, int imageHeight)
    {
        int SumX = 0;
        int SumY = 0;
        int num  = 0; 
        for (int i=0; i<imageWidth; i++)
        {
            for (int j=0; j<imageHeight; j++)
            {
                if (image[i][j] == WHITE)
                {
                   SumX = SumX + i;
                   SumY = SumY + j; 
                   num = num+1;
                }
            }
        }
    
        SumX = SumX / num;
        SumY = SumY / num;
        // The coordinate (SumX,SumY) is the center of the image mass
    }
    

    将此方法扩展到[0..255]范围内的灰度图像:而不是

    if (image[i][j] == WHITE)
                    {
                       SumX = SumX + i;
                       SumY = SumY + j; 
                       num = num+1;
                    }
    

    使用以下计算

    SumX = SumX + i*image[i][j];
    SumY = SumY + j*image[i][j]; 
    num = num+image[i][j];
    

    在这种情况下,值为 100 的像素的权重是值为 1 的暗像素的 100 倍,因此暗像素对质心计算的贡献很小。 请注意,在这种情况下,如果您的图像很大,您可能会遇到 32 位整数溢出,因此在这种情况下使用 long int sumX, sumY 变量而不是 int

    【讨论】:

    • 我知道。但是 C/C++ 等同于 java,可以读成纯英文。所以其他偶然发现这个问题并使用不同编程语言的人仍然能够理解数学解决方案。我确信“idow90”将能够理解算法并将其转换为 Matlab,这基本上就是你的答案
    • 即使颜色是黑色也不应该增加num吗?应用灰度图像的公式,我应该添加所有非黑色颜色吗?
    • num 计算整体白色像素的数量。 SumX 和 SumY 计算 X 和 Y 方向的积分。除以白色像素的总数给出正确答案。我应您的要求扩展了灰度图像的答案
    猜你喜欢
    • 2019-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-05
    • 2020-08-13
    • 1970-01-01
    • 1970-01-01
    • 2015-09-29
    相关资源
    最近更新 更多