Centre of mass of an N-D image (1 < N < 3)

Function test()
    make/n=(100,100, 100)/free w
    w = gauss(x, 10, 3, y, 20, 3, z, 30, 3)
    wave temp = com3D(w)
    print temp
End
 
Function/wave com3D(w)
    Wave w
    variable ii, t1, t2, t3
    make/n=(wavedims(w))/free/d COM
    switch(wavedims(w))
        case 1:
            COM[0] = Pla_peakcentroid(w)
            break
        case 2:
            imagetransform sumallrows w
            COM[0] = Pla_peakcentroid(W_sumrows)
            imagetransform sumallcols w
            COM[1] = Pla_peakcentroid(W_sumcols)
            break
        case 3:
            imagetransform sumplanes w
            Wave temp = com3D(M_SumPlanes)
            COM[0] = temp[0]
            COM[1] = temp[1]
            imagetransform/g = 2 transposeVol w
            imagetransform sumplanes M_volumetranspose
                        imagetransform sumallrows M_sumplanes
            COM[2] = Pla_peakcentroid(W_sumrows)
            break
        default:
            break
    endswitch
    return COM
End
 
Threadsafe Function Pla_peakCentroid(ywave)
    Wave ywave
    variable retval
 
    duplicate/free ywave, W_integrate
    W_integrate = 0
 
    multithread W_integrate[] = Area(tempy, 0, p)
 
    W_integrate /= W_integrate[numpnts(W_tempy)-1]
    variable centroid = binarysearchinterp(W_integrate,0.5)
    if(numtype(centroid))
        retval = NaN
    else
        retval = centroid
    endif
 
    return retval
End

Forum

Support

Gallery

Igor Pro 8

Learn More

Igor XOP Toolkit

Learn More

Igor NIDAQ Tools MX

Learn More