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

andyfaff
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 9
Learn More
Igor XOP Toolkit
Learn More
Igor NIDAQ Tools MX
Learn More