【问题标题】:Finding the Blob Centroid寻找 Blob 质心
【发布时间】:2014-07-14 13:08:56
【问题描述】:

找到 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

【问题讨论】:

  • 你能解释一下有什么困难吗?这相当简单,只需找到 x 和 y 坐标的平均值(超过 blob 像素)
  • @OphirGvirtzer 我附上了VB6代码,质心总是1。你能修复代码

标签: algorithm vb6 centroid


【解决方案1】:

如果您查看您的代码,您会重复三遍。第一个是面积,第二个是 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

【讨论】:

  • wckd,你忘记了 Xs,Ys,Area 的初始化,以及 Xs,Ys 按区域的标准化
  • @OphirGvirtzer 我认为 user3819984 可以处理这些简单的细节。它们不会影响算法,所以我没有将它们包含在我的答案中。
  • 添加了规范化,因为回顾那部分是算法的一部分。
【解决方案2】:

您的代码中有两个错误:

  1. 你写的

    Xs = Xs + 1

而不是

Xs = Xs + X

2。 y也一样

除此之外,代码都很好

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-13
    • 2018-09-29
    • 2013-01-05
    • 2013-10-07
    • 2020-07-29
    • 1970-01-01
    相关资源
    最近更新 更多