Definition at line 183 of file TrackerBackFore.h. References FillSearchArea(), Impala::Core::Array::Array2dTem< StorT, elemSize, ArithT >::FindNaN(), FormBackground(), Impala::Core::Array::Pattern::FuncGenConv2dDispatch(), Impala::Core::Tracking::Classifier::GetClassifiers(), Impala::Core::Geometry::Rectangle::Height(), Impala::Core::Geometry::Rectangle::mBottom, mClassifier, mDimensionality, mGabor, mInitialLikelyhood, Impala::Core::Geometry::Rectangle::mLeft, mLikelyhood, Impala::Core::Array::Trait::ExportMinMaxPos< ArithT, DataT >::mMaxPos, Impala::Core::Array::Trait::ExportMinMaxPos< ArithT, DataT >::mMaxVal, mPosition, Impala::Core::Geometry::Rectangle::mRight, mSampleSpacing, mSearchKernel, mSearchResult, mStats, Impala::Core::Geometry::Rectangle::mTop, Impala::Core::Geometry::PointZ::mX, Impala::Core::Geometry::PointZ::mY, Impala::Core::Array::Pattern::PatInOutOp(), Impala::Core::Tracking::KernelSet::Reconstruct(), Impala::Util::TimeStats::SelectGroup(), Impala::Core::Array::SetVal(), Impala::Util::TimeStats::StartTime(), Impala::Util::TimeStats::StopTime(), Impala::Core::Array::Array2dTem< StorT, elemSize, ArithT >::Value(), and Impala::Core::Geometry::Rectangle::Width(). Referenced by Process(). 00184 { 00185 // find best match using the classifiers (eq.10) 00186 Array::Array2dScalarReal64 response(mDimensionality, 1, 0, 0); 00187 Array::SetVal<Array::Array2dVec3Real64>(mSearchKernel, mSearchKernel, 0); 00188 int w,h; 00189 w = mPosition.Width()/mSampleSpacing; 00190 h = mPosition.Height()/mSampleSpacing; 00191 int i,j; 00192 00193 mStats.SelectGroup(2); 00194 mStats.StartTime(); 00195 for(j=0 ; j<h ; j++) 00196 { 00197 for(i=0 ; i<w ; i++) 00198 { 00199 mClassifier->GetClassifiers(i+j*w, response); 00200 mGabor.Reconstruct(*mSearchKernel, response, i*mSampleSpacing, 00201 j*mSampleSpacing); 00202 } 00203 } 00204 mStats.StopTime(); 00205 00206 mStats.SelectGroup(3); 00207 mStats.StartTime(); 00208 int bw = mSearchKernel->CW()/2 +1; 00209 int bh = mSearchKernel->CH()/2 +1; 00210 00211 Array::Array2dVec3Real64* searchArea = 00212 new Array::Array2dVec3Real64(21, 21, bw, bh); 00213 FillSearchArea(searchArea, bw, bh); 00214 SetVal(mSearchResult, mSearchResult, 0); //this initialization is 00215 //necessary, because the 00216 //convolution doesn't 00217 //initialise the result 00218 TraitBpoInproduct prod; 00219 TraitBpoAddAssignPtr bpoAdd; 00220 searchArea->FindNaN("searchArea"); 00221 mSearchKernel->FindNaN("mSearchKernel"); 00222 mSearchResult->FindNaN("mSearchResult"); 00223 Array::Pattern::FuncGenConv2dDispatch(mSearchResult, searchArea, 00224 mSearchKernel, prod, bpoAdd); 00225 // It's unclear why the pattern isn't used. Perhaps this is because the 00226 // pattern reallocates the destination... 00227 mSearchResult->FindNaN("mSearchResult2"); 00228 00229 Array::Trait::ExportMinMaxPos<double, Array::Array2dScalarReal64> minmax; 00230 Array::Pattern::PatInOutOp(mSearchResult, minmax); 00231 00232 mPosition.mLeft += minmax.mMaxPos.mX - 10; 00233 mPosition.mTop += minmax.mMaxPos.mY - 10; 00234 mPosition.mRight += minmax.mMaxPos.mX - 10; 00235 mPosition.mBottom += minmax.mMaxPos.mY - 10; 00236 00237 FormBackground(); 00238 mStats.StopTime(); 00239 00240 // warning: apparently mSearchResult can contain 'not-a-number's which 00241 // yields a faulty position 00242 if(minmax.mMaxVal < -10000) 00243 mLikelyhood = mInitialLikelyhood * 0.1; 00244 else 00245 { 00246 // to really get a likelyhood we should devide by the maximum 00247 // possible score, but that value is unknown 00248 mLikelyhood = mSearchResult->Value(minmax.mMaxPos.mX, minmax.mMaxPos.mY); 00249 } 00250 if(mInitialLikelyhood == 0) 00251 mInitialLikelyhood = mLikelyhood; 00252 00253 delete searchArea; 00254 }
Here is the call graph for this function:
|