Home || Visual Search || Applications || Architecture || Important Messages || OGL || Src

void Impala::Core::Tracking::TrackerBackFore::SearchObject (  )  [inline, private]

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:


Generated on Thu Jan 13 09:21:07 2011 for ImpalaSrc by  doxygen 1.5.1