Поиск центроида блоба

Каков алгоритм нахождения центроида капли (центра масс)?

формула

Я нашел приведенное выше уравнение, но не знаю, как перевести его в 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

person mike    schedule 14.07.2014    source источник
comment
Можете объяснить, в чем сложность? Это довольно просто, просто найдите среднее значение (по пикселям блоба) координат x и y.   -  person Ophir Gvirtzer    schedule 14.07.2014
comment
@OphirGvirtzer Я прикрепил код VB6, центроид всегда равен 1. Можете ли вы исправить код   -  person mike    schedule 14.07.2014


Ответы (2)


Если вы посмотрите на свой код, вы повторитесь три раза. Первый для области, второй для 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
person wckd    schedule 14.07.2014
comment
wckd, вы забыли инициализацию Xs, Ys, Area и нормализацию Xs, Ys по площади - person Ophir Gvirtzer; 15.07.2014
comment
@OphirGvirtzer Я предполагал, что user3819984 сможет позаботиться об этих простых деталях. Они не влияют на алгоритм, поэтому я не включил их в свой ответ. - person wckd; 15.07.2014
comment
Добавлена ​​нормализация, потому что, оглядываясь назад, эта часть является частью алгоритма. - person wckd; 15.07.2014

У вас есть две ошибки в вашем коде:

  1. Вы написали

    Xs = Xs + 1

вместо

Xs = Xs + X

2. то же самое для у

В остальном код в порядке

person Ophir Gvirtzer    schedule 15.07.2014