2014-07-14 47 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的

除此之外,該代碼是罰款