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

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

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:


Generated on Fri Mar 19 11:22:46 2010 for ImpalaSrc by  doxygen 1.5.1