Definition at line 163 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(). 00164 { 00165 // find best match using the classifiers (eq.10) 00166 Array::Array2dScalarReal64 response(mDimensionality, 1, 0, 0); 00167 Array::SetVal<Array::Array2dVec3Real64>(mSearchKernel, mSearchKernel, 0); 00168 int w,h; 00169 w = mPosition.Width()/mSampleSpacing; 00170 h = mPosition.Height()/mSampleSpacing; 00171 int i,j; 00172 00173 mStats.SelectGroup(2); 00174 mStats.StartTime(); 00175 for(j=0 ; j<h ; j++) 00176 { 00177 for(i=0 ; i<w ; i++) 00178 { 00179 mClassifier->GetClassifiers(i+j*w, response); 00180 mGabor.Reconstruct(*mSearchKernel, response, i*mSampleSpacing, j*mSampleSpacing); 00181 } 00182 } 00183 mStats.StopTime(); 00184 00185 mStats.SelectGroup(3); 00186 mStats.StartTime(); 00187 int bw = mSearchKernel->CW()/2 +1; 00188 int bh = mSearchKernel->CH()/2 +1; 00189 00190 Array::Array2dVec3Real64* searchArea = new Array::Array2dVec3Real64(21, 21, bw, bh); 00191 FillSearchArea(searchArea, bw, bh); 00192 SetVal(mSearchResult, mSearchResult, 0); //weird that this is necessary, you'd expect that the convolution would initialise the result 00193 00194 TraitBpoInproduct prod; 00195 TraitBpoAddAssignPtr bpoAdd; 00196 searchArea->FindNaN("searchArea"); 00197 mSearchKernel->FindNaN("mSearchKernel"); 00198 mSearchResult->FindNaN("mSearchResult"); 00199 Array::Pattern::FuncGenConv2dDispatch(mSearchResult, searchArea, mSearchKernel, prod, bpoAdd); // why didn't i use the pattern? maybe because the pattern reallocates the destination... 00200 mSearchResult->FindNaN("mSearchResult2"); 00201 00202 Array::Trait::ExportMinMaxPos<double, Array::Array2dScalarReal64> minmax; 00203 Array::Pattern::PatInOutOp(mSearchResult, minmax); 00204 00205 mPosition.mLeft += minmax.mMaxPos.mX - 10; 00206 mPosition.mTop += minmax.mMaxPos.mY - 10; 00207 mPosition.mRight += minmax.mMaxPos.mX - 10; 00208 mPosition.mBottom += minmax.mMaxPos.mY - 10; 00209 00210 FormBackground(); 00211 mStats.StopTime(); 00212 00213 // warning apparently mSearchResult can contain 'not-a-number's which yields a faulty position 00214 if(minmax.mMaxVal < -10000) 00215 mLikelyhood = mInitialLikelyhood * 0.1; 00216 else 00217 { 00218 // to really get a likelyhood we should devide by the maximum possible score, but what's that? 00219 mLikelyhood = mSearchResult->Value(minmax.mMaxPos.mX, minmax.mMaxPos.mY); 00220 } 00221 if(mInitialLikelyhood == 0) 00222 mInitialLikelyhood = mLikelyhood; 00223 00224 delete searchArea; 00225 }
Here is the call graph for this function:
|