0

找到 blob 的质心(质心)的算法是什么?

公式

我找到了上面的等式,但我不知道如何将其转换为 VB 6.0。我在网上查找了 VB 6.0 中的简单质心算法,但没有找到计算 X 和 Y 坐标值的算法。

我尝试在 VB6.0 中执行上述算法。但是,它总是1以中心为中心。:

Private Sub FindCentroid(bmp As PictureBox)

Dim area As Double
Dim x As Integer, y As Integer
Dim Xc, Yc, Xs, Ys As Integer

area = 0
For y = 0 To bmp.ScaleHeight - 1
    For x = 0 To bmp.ScaleWidth - 1
If bmp.Point(x, y) = vbWhite Then area = area + 1

Next x: Next y

Xs = 0
For y = 0 To bmp.ScaleHeight - 1
    For x = 0 To bmp.ScaleWidth - 1
        If bmp.Point(x, y) = vbWhite Then Xs = Xs + 1
 Next x
Next y

Ys = 0

For y = 0 To bmp.ScaleWidth - 1
    For x = 0 To bmp.ScaleHeight - 1

        If bmp.Point(y, x) = vbWhite Then Ys = Ys + 1

Next x
Next y

Xc = Xs / area
Yc = Xs / area

End Sub
4

2 回答 2

3

如果您查看您的代码,您会重复三遍。第一个是面积,第二个是 Xs,第三个是 Ys。其次,您的代码与您提供的方程式不匹配。

尝试这样的事情:

For y = 0 To bmp.ScaleHeight - 1
  For x = 0 To bmp.ScaleWidth - 1
    If bmp.Point(x, y) = vbWhite 
      Then 
        Xs = Xs + x
        Ys = Ys + y
        area = area + 1
    endIF
  Next x
Next y

我不知道 VB 语法,所以你必须稍微调整一下。

更新

完成算法按面积归一化:

Ys = Ys / area
Xs = Xs / area
于 2014-07-14T14:37:13.640 回答
0

您的代码中有两个错误:

  1. 你写了

    Xs = Xs + 1

代替

Xs = Xs + X

2. y 也一样

除此之外,代码很好

于 2014-07-15T07:12:10.797 回答