35 #ifndef AIMS_MOMENT_MOMNORMSTGY_H
36 #define AIMS_MOMENT_MOMNORMSTGY_H
56 template<
class T >
inline
62 double mx = m->
m1()[ 0 ] / m->
m0();
63 double my = m->
m1()[ 1 ] / m->
m0();
64 double mz = m->
m1()[ 2 ] / m->
m0();
66 double tx = (double)p[0] * cx - mx;
67 double ty = (double)p[1] * cy - my;
68 double tz = (double)p[2] * cz - mz;
70 m->
m2()[ 0 ] += tx * tx;
71 m->
m2()[ 1 ] += ty * ty;
72 m->
m2()[ 2 ] += tz * tz;
73 m->
m2()[ 3 ] += tx * ty;
74 m->
m2()[ 4 ] += tx * tz;
75 m->
m2()[ 5 ] += ty * tz;
77 m->
m3()[ 0 ] += tx * tx * tx;
78 m->
m3()[ 1 ] += ty * ty * ty;
79 m->
m3()[ 2 ] += tz * tz * tz;
80 m->
m3()[ 3 ] += tx * tx * ty;
81 m->
m3()[ 4 ] += tx * tx * tz;
82 m->
m3()[ 5 ] += tx * ty * ty;
83 m->
m3()[ 6 ] += ty * ty * tz;
84 m->
m3()[ 7 ] += tx * tz * tz;
85 m->
m3()[ 8 ] += ty * tz * tz;
86 m->
m3()[ 9 ] += tx * ty * tz;
90 template<
class T >
inline
96 int dx = d->getSizeX();
97 int dy = d->getSizeY();
98 int dz = d->getSizeZ();
100 long o = d->getStrides()[0];
107 for ( z=0; z<dz; z++ )
108 for ( y=0; y<dy; y++ )
110 it = &d->at( 0, y, z );
111 for ( x=0; x<dx; x++, it+=o )
118 m->
m1()[ 0 ] += (double)x * cx;
119 m->
m1()[ 1 ] += (double)y * cy;
120 m->
m1()[ 2 ] += (double)z * cz;
124 double mx = m->
m1()[ 0 ] / m->
m0();
125 double my = m->
m1()[ 1 ] / m->
m0();
126 double mz = m->
m1()[ 2 ] / m->
m0();
132 for ( z=0; z<dz; z++ )
133 for ( y=0; y<dy; y++ )
135 it = &d->at( 0, y, z );
136 for ( x=0; x<dx; x++, it+=o )
138 addVoxel2( m,
Point3d( x, y, z ) );
143 for ( x=0; x<3; x++ ) m->
m1()[ x ] *= ct;
144 for ( x=0; x<6; x++ ) m->
m2()[ x ] *= ct;
145 for ( x=0; x<10; x++ ) m->
m3()[ x ] *= ct;
149 template <
typename T>
164 m->
sum() += bk.size();
165 m->
m0() += bk.size();
167 for( ib=bk.begin(); ib!=eb; ++ib )
169 m->
m1()[ 0 ] += (double)ib->first[0] * cx;
170 m->
m1()[ 1 ] += (double)ib->first[1] * cy;
171 m->
m1()[ 2 ] += (double)ib->first[2] * cz;
174 double mx = m->
m1()[ 0 ] / m->
m0();
175 double my = m->
m1()[ 1 ] / m->
m0();
176 double mz = m->
m1()[ 2 ] / m->
m0();
182 for( ib=bk.begin(); ib!=eb; ++ib )
183 addVoxel2( m, ib->first );
188 for ( x=0; x<3; x++ ) m->
m1()[ x ] *= ct;
189 for ( x=0; x<6; x++ ) m->
m2()[ x ] *= ct;
190 for ( x=0; x<10; x++ ) m->
m3()[ x ] *= ct;
void doit(Moment< T > *, carto::rc_ptr< carto::Volume< T > > &, T, int)
std::map< Point3d, T, BucketMapLess > Bucket