I'm looking at a GUI program that handles meteor images. They leave a trail across the sky. Each video frame (30 fps) provides data on the track, and a centroid is found around each track point. 'm not familiar with the algorithm that does this, but part of it is in the three def stmts below. Maybe someone can hazard a guess? It looks like someone had fun doing this.

    def MakeSelectsAndWeights( self ):
        global SELECT1, SELECT2
        global WEIGHT1, WEIGHT2

        a1 = indices((640,))[0]

        a2 = a1 + a1 * (701.0-640.0)/702.0
        a3 = floor(a2)
        SELECT1 = a3.astype( intc )

        SELECT2 = SELECT1 + 1

        WEIGHT2 = a2  - a3
        WEIGHT1 = 1.0 - WEIGHT2

One more
    def Centroid( self, ref, curr, mask ):
        slopes = indices((488,722),int32)
        nada   = zeros((488,722),uint8)

        result = where(curr > ref, curr-ref, nada)
        result = where(result > mask, result-mask, nada)

        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

Another
    def Central( self, ref, curr, mask ):
        slopes = indices((488,722),int32)
        nada   = zeros((488,722),uint8)

        result = where(curr > ref, curr-ref, nada)
        result = where(result > mask, result-mask, nada)
        total   = sum(ravel(asarray(result,int32)))
        count   = sum(ravel(result > 0))
        if total == 0:
            print "Count: %d Total: %d" % (count,total)
            return 361,244,0,0

        blur  = result[0:-2, 0:-2]
        blur += result[0:-2, 1:-1]
        blur += result[0:-2, 2:  ]
        blur += result[1:-1, 0:-2]
        blur += result[1:-1, 1:-1]
        blur += result[1:-1, 2:  ]
        blur += result[2:  , 0:-2]
        blur += result[2:  , 1:-1]
        blur += result[2:  , 2:  ]

        index = argmax(ravel(blur))
        ypos, xpos  = divmod(index, 720)
        xpos += 1
        ypos += 1

        return xpos,ypos,total,count

--
           Wayne Watson (Watson Adventures, Prop., Nevada City, CA)

             (121.01 Deg. W, 39.26 Deg. N) GMT-8 hr std. time)

         Copper and its alloys have been found effective in hospital
         sinks, hand rails, beds, ... in significantly reducing
         bacteria. Estimates are 1/20 people admitted to a hospital
         become infected, and 1/20 die from the infection.
                       -- NPR Science Friday, 01/16/2009

                    Web Page: <www.speckledwithstars.net/>

_______________________________________________
Tutor maillist  -  Tutor@python.org
http://mail.python.org/mailman/listinfo/tutor

Reply via email to