Definition at line 172 of file ColorMoments.h. References Impala::Core::Array::ArraySet< ArrayT >::Array(), B02(), B12(), C02(), C02tilde(), C11(), C12_1(), C12_2(), C12_3(), C12_4(), Impala::Core::Array::ColorMoment::Clean(), Impala::Core::Array::ColorMoment::first, Impala::Core::Array::Array2dTem< StorT, elemSize, ArithT >::H(), Mul(), Impala::Core::Array::ColorMoment::next, PixSum(), ProjectRange(), RecGauss(), Set(), SetVal(), Impala::Core::Array::Array2dTem< StorT, elemSize, ArithT >::SetValue(), Impala::Application::DemoCamera2d::sigma, and Impala::Core::Array::Array2dTem< StorT, elemSize, ArithT >::W(). Referenced by Impala::Core::Feature::ComputeRegionDescriptor(). 00174 { 00175 00176 Real64 TotalPixels=rgb->W()*rgb->H(); 00177 ArraySet<Array2dScalarReal64>* X=new ArraySet<Array2dScalarReal64>(order+1); 00178 ArraySet<Array2dScalarReal64>* Y=new ArraySet<Array2dScalarReal64>(order+1); 00179 00180 ArraySet<Array2dScalarReal64>* R=new ArraySet<Array2dScalarReal64>(degree+1); 00181 ArraySet<Array2dScalarReal64>* G=new ArraySet<Array2dScalarReal64>(degree+1); 00182 ArraySet<Array2dScalarReal64>* B=new ArraySet<Array2dScalarReal64>(degree+1); 00183 00184 X->Array(0)=new Array2dScalarReal64(rgb->W(),rgb->H(),0,0); 00185 Y->Array(0)=new Array2dScalarReal64(rgb->W(),rgb->H(),0,0); 00186 R->Array(0)=new Array2dScalarReal64(rgb->W(),rgb->H(),0,0); 00187 G->Array(0)=new Array2dScalarReal64(rgb->W(),rgb->H(),0,0); 00188 B->Array(0)=new Array2dScalarReal64(rgb->W(),rgb->H(),0,0); 00189 00190 //Oth order/degree values are all 1; 00191 SetVal(X->Array(0),1); 00192 SetVal(Y->Array(0),1); 00193 SetVal(R->Array(0),1); 00194 SetVal(G->Array(0),1); 00195 SetVal(B->Array(0),1); 00196 00197 //1st order/degree values are same with corresponding vectors 00198 X->Array(1)=new Array2dScalarReal64(rgb->W(),rgb->H(),0,0); 00199 Y->Array(1)=new Array2dScalarReal64(rgb->W(),rgb->H(),0,0); 00200 for(int i=0;i<rgb->W();i++){ 00201 for(int j=0;j<rgb->H();j++){ 00202 X->Array(1)->SetValue(i,i,j); 00203 Y->Array(1)->SetValue(j,i,j); 00204 } 00205 } 00206 ProjectRange(R->Array(1),rgb,1); 00207 ProjectRange(G->Array(1),rgb,2); 00208 ProjectRange(B->Array(1),rgb,3); 00209 00210 if(blur){ 00211 Array2dScalarReal64* tmp=0; 00212 RecGauss(tmp,R->Array(1),sigma,sigma,0,0,1); 00213 Set(R->Array(1),tmp); 00214 delete tmp;tmp=0; 00215 RecGauss(tmp,G->Array(1),sigma,sigma,0,0,1); 00216 Set(G->Array(1),tmp); 00217 delete tmp;tmp=0; 00218 RecGauss(tmp,B->Array(1),sigma,sigma,0,0,1); 00219 Set(B->Array(1),tmp); 00220 delete tmp;tmp=0; 00221 } 00222 00223 for(int o=2;o<=order;o++){ 00224 Mul(X->Array(o),X->Array(o-1),X->Array(1)); 00225 Mul(Y->Array(o),Y->Array(o-1),Y->Array(1)); 00226 } 00227 for(int d=2;d<=degree;d++){ 00228 Mul(R->Array(d),R->Array(d-1),R->Array(1)); 00229 Mul(G->Array(d),G->Array(d-1),G->Array(1)); 00230 Mul(B->Array(d),B->Array(d-1),B->Array(1)); 00231 } 00232 ColorMoment* last=0; 00233 for(int o=0;o<=order;o++){ 00234 for (int p=0;p<=o;p++){ 00235 for (int q=0;q<=o;q++){ 00236 if( p+q == o) 00237 for(int d=0;d<=degree;d++){ 00238 for(int r=0;r<=d;r++){ 00239 for(int g=0;g<=d;g++){ 00240 for(int b=0;b<=d;b++){ 00241 if(r+g+b==d){ 00242 Array2dScalarReal64* m = 0; 00243 Set(m,R->Array(r)); 00244 if(g!=0) 00245 Mul(m,m,G->Array(g)); 00246 if(b!=0) 00247 Mul(m,m,B->Array(b)); 00248 if(p!=0) 00249 Mul(m,m,X->Array(p)); 00250 if(q!=0) 00251 Mul(m,m,Y->Array(q)); 00252 Real64 Moment=PixSum(m)/TotalPixels; 00253 delete m; 00254 ColorMoment* cm = new ColorMoment(p,q,r,g,b,Moment,NULL); 00255 if(ColorMoment::first==NULL) 00256 ColorMoment::first=cm; 00257 if(last){ 00258 last->next=cm; 00259 } 00260 last=cm; 00261 } 00262 } 00263 } 00264 } 00265 } 00266 } 00267 } 00268 } 00269 ColorMoment* m=ColorMoment::first; 00270 00271 int count=1; 00272 // while(m){ 00273 // std::cout<<count++<<". "<<m->p<<" "<<m->q<<" "<<m->a<<" "<<m->b<<" "<<m->c<<" : "<<m->value<<std::endl; 00274 // m=m->next; 00275 // } 00276 //moment CMInvariants// 00277 if(CMInvariants==0){ 00278 CMInvariants=new Array2dScalarReal64(24,1,0,0); 00279 } 00280 00281 int i=0; 00282 CMInvariants->SetValue(B02('R'),i++,0); 00283 CMInvariants->SetValue(B02('G'),i++,0); 00284 CMInvariants->SetValue(B02('B'),i++,0); 00285 CMInvariants->SetValue(C02("RG"),i++,0); 00286 CMInvariants->SetValue(C02("RB"),i++,0); 00287 CMInvariants->SetValue(C02("GB"),i++,0); 00288 CMInvariants->SetValue(C02tilde("RG"),i++,0); 00289 CMInvariants->SetValue(C02tilde("RB"),i++,0); 00290 CMInvariants->SetValue(C02tilde("GB"),i++,0); 00291 00292 CMInvariants->SetValue(C11("RG"),i++,0); 00293 CMInvariants->SetValue(C11("RB"),i++,0); 00294 CMInvariants->SetValue(C11("GB"),i++,0); 00295 CMInvariants->SetValue(B12('R'),i++,0); 00296 CMInvariants->SetValue(B12('G'),i++,0); 00297 CMInvariants->SetValue(B12('B'),i++,0); 00298 CMInvariants->SetValue(C12_1("RG"),i++,0); 00299 CMInvariants->SetValue(C12_1("RB"),i++,0); 00300 CMInvariants->SetValue(C12_1("GB"),i++,0); 00301 CMInvariants->SetValue(C12_2("RG"),i++,0); 00302 CMInvariants->SetValue(C12_2("RB"),i++,0); 00303 CMInvariants->SetValue(C12_2("GB"),i++,0); 00304 00305 CMInvariants->SetValue(C12_3("RG"),i++,0); 00306 CMInvariants->SetValue(C12_3("GB"),i++,0); 00307 CMInvariants->SetValue(C12_4("RB"),i++,0); 00308 00309 ColorMoment::Clean(); 00310 for(int o=0;o<=order;o++){ 00311 delete X->Array(o); 00312 delete Y->Array(o); 00313 } 00314 for(int d=0;d<=degree;d++){ 00315 delete R->Array(d); 00316 delete G->Array(d); 00317 delete B->Array(d); 00318 } 00319 delete X,Y,R,G,B; 00320 //PrintData(CMInvariants,false); 00321 }
Here is the call graph for this function:
|