2014-07-14 46 views
0

寻找斑点质心(质心)的算法是什么?查找斑点质心

formula

我发现上面的公式,但我不知道如何把它翻译成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 
+0

你能解释一下什么是困难?这很简单,只需找到x和y坐标的平均值(在blob像素上) –

+0

@OphirGvirtzer我附加了VB6代码,质心总是1.你能修复代码 – user3819984

回答

3

如果你看一下你的代码重复自己的三倍。首先是面积,第二次是X,第三次是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语法,所以你必须来调整一下。

UPDATE

要通过区域完成算法规范化:

Ys = Ys/area 
Xs = Xs/area 
+0

wckd,你忘了初始化Xs,Ys ,面积和Xs的正常化,Ys的面积 –

+0

@OphirGvirtzer我认为用户3819984可以处理这些简单的细节。他们不影响算法,所以我没有将它们包含在我的答案中。 – wckd

+0

添加了归一化,因为回头看那部分是算法的一部分。 – wckd

0

你在你的代码中有两处错误:

  1. 你写

    两个X =两个X + 1

代替

Xs = Xs + X 

2.同一y的

除此之外,该代码是罚款