# [Tutor] What Centroid Algorithm Is This?

Eike Welk eike.welk at gmx.net
Mon Jan 26 21:20:55 CET 2009

```On Monday 26 January 2009, Wayne Watson wrote:
> the three def stmts below. Maybe someone can hazard a guess? It
> looks like someone had fun doing this.

First bookmark this webpage. It explains every important function in
Numpy:
http://www.scipy.org/Numpy_Example_List_With_Doc

>      def Centroid( self, ref, curr, mask ):
ref is maybe dark frame
>          slopes = indices((488,722),int32)
>
Do discrimination; areas that are not covered by the meteor are 0
>          result = where(curr > ref, curr-ref, nada)
>

Compute center of mass
http://en.wikipedia.org/wiki/Center_of_mass#Definition
Look at first formula
- result is m
- slopes[1] is x-component of r
- slopes[0] is y-component of r
>          xresult = result * slopes[1]
>          yresult = result * slopes[0]
>          total   = sum(ravel(asarray(result,int32)))
>          count   = sum(ravel(result > 0))
>          if total == 0:
>              return 360,240,0,0
>
>          xpos = sum(ravel(xresult))/total
>          ypos = sum(ravel(yresult))/total
>
>          return xpos,ypos,total,count

Example algorithm done in Ipython invoked with
ipython --pylab
----
In [20]:weights = array([0,0,1,1,1],'d')
#These are three weights of mass 1.
#They are located at the positions 2, 3, 4.
#The center of gravity is therefore at position 3.

In [21]:distances = indices(weights.shape)

In [22]:distances
Out[22]:array([[0, 1, 2, 3, 4]])

In [23]:moments = weights * distances

In [24]:moments
Out[24]:array([[ 0.,  0.,  2.,  3.,  4.]])

In [25]:tot_weight = sum(weights)

In [26]:tot_moment = sum(moments)

In [27]:center = tot_moment/tot_weight

In [28]:center
Out[28]:3.0
#Yay, this is the correct result!

Kind regards,
Eike.
```