Reimplemented from Impala::Core::Tracking::SearcherBase. Definition at line 41 of file SearcherPyramid.h. References Impala::Core::Array::Array2dTem< StorT, elemSize, ArithT >::CH(), Impala::Core::Array::Array2dTem< StorT, elemSize, ArithT >::CW(), Impala::Core::Array::Pattern::FuncGenConv2dDispatch(), Impala::Core::Tracking::ImagePyramid::GetLevel(), Impala::Core::Tracking::ImagePyramid::GetSize(), Impala::Core::Tracking::ImagePyramid::Levels(), max, Impala::Core::Array::Array2dTem< StorT, elemSize, ArithT >::mBH, Impala::Core::Array::Array2dTem< StorT, elemSize, ArithT >::mBW, Impala::Core::Array::Array2dTem< StorT, elemSize, ArithT >::mCH, Impala::Core::Array::Array2dTem< StorT, elemSize, ArithT >::mCW, Impala::Core::Array::Trait::FuncExportMinMax< ArithT, DataT >::minPos, mInputPyramid, Impala::Core::Tracking::SearcherBase::mLastPos, mTemplatePyramid, Impala::Core::Geometry::PointZ::mX, Impala::Core::Geometry::PointZ::mY, Impala::Core::Array::Pattern::PatInOutOp(), Impala::Core::Array::Pattern::PatSet(), Impala::Core::Tracking::ImagePyramid::PropagateBaseChanges(), Impala::Core::Array::Trait::FuncExportMinMax< ArithT, DataT >::Reset(), Impala::Core::Tracking::Position::size, Impala::Core::Tracking::Position::translation, Impala::Core::Tracking::Point::x, and Impala::Core::Tracking::Point::y. 00042 { 00043 if(mTemplatePyramid == 0) 00044 return; 00045 00046 mInputPyramid->PropagateBaseChanges(); 00047 mTemplatePyramid->PropagateBaseChanges(); 00048 00049 //search in the highest level in both pyramids (template is always the smaller) 00050 int level = mTemplatePyramid->Levels()-1; 00051 Point searchSize(mInputPyramid->GetSize(level)); 00052 Point searchPos(0, 0); 00053 Point searchBorder(mInputPyramid->GetSize(0)); 00054 00055 Array::Array2dVec3Real64* searchArea; 00056 Array::Array2dVec3Real64* searchResult; 00057 searchArea = new Array::Array2dVec3Real64(searchSize.x + 2*searchBorder.x, searchSize.y + 2*searchBorder.y, 0, 0, 0); 00058 searchResult = new Array::Array2dVec3Real64(searchSize.x + 2*searchBorder.x, searchSize.y + 2*searchBorder.y, 0, 0, 0); 00059 00060 Array::Trait::FuncExportMinMax<Array::Vec3Real64, Array::Array2dVec3Real64> minmax; 00061 Array::Trait::FuncBpoManhatDist dist; 00062 Array::Trait::FuncBpoAddAssignPtr bpoAss; 00063 00064 while(level>=0) 00065 { 00066 searchBorder.x = mTemplatePyramid->GetLevel(level)->CW(); 00067 searchBorder.y = mTemplatePyramid->GetLevel(level)->CH(); 00068 00069 searchArea->mCW = 2*searchBorder.x + searchSize.x; 00070 searchArea->mCH = 2*searchBorder.y + searchSize.y; 00071 searchArea->mBW = 0; 00072 searchArea->mBH = 0; 00073 Array::Pattern::PatSet(searchArea, mInputPyramid->GetLevel(level), searchPos.x - searchBorder.x, searchPos.y - searchBorder.y, searchSize.x + 2*searchBorder.x, searchSize.y + 2*searchBorder.y, 0, 0); 00074 searchArea->mCW = searchSize.x; 00075 searchArea->mCH = searchSize.y; 00076 searchArea->mBW = searchBorder.x; 00077 searchArea->mBH = searchBorder.y; 00078 searchResult->mCW = searchSize.x; 00079 searchResult->mCH = searchSize.y; 00080 searchResult->mBW = searchBorder.x; 00081 searchResult->mBH = searchBorder.y; 00082 00083 Array::Pattern::FuncGenConv2dDispatch(searchResult, searchArea, mTemplatePyramid->GetLevel(level), dist, bpoAss); 00084 00085 minmax.Reset(); 00086 Array::Pattern::PatInOutOp(searchResult, minmax); 00087 00088 minmax.minPos.mX += searchPos.x; 00089 minmax.minPos.mY += searchPos.y; 00090 00091 if(level>0) 00092 { 00093 minmax.minPos *= 2; 00094 searchPos.x = minmax.minPos.mX - 1; 00095 searchPos.y = minmax.minPos.mY - 1; 00096 searchSize.x = 3; 00097 searchSize.y = 3; 00098 //clip 00099 Point max = mInputPyramid->GetSize(level-1); 00100 if(searchPos.x < 0) 00101 searchPos.x = 0; 00102 if(searchPos.y < 0) 00103 searchPos.y = 0; 00104 if(searchPos.x > max.x - 4) 00105 searchPos.x = max.x - 4; 00106 if(searchPos.y > max.y - 4) 00107 searchPos.y = max.y - 4; 00108 } 00109 level--; 00110 } 00111 mLastPos.translation.x = minmax.minPos.mX - mLastPos.size.x/2; 00112 mLastPos.translation.y = minmax.minPos.mY - mLastPos.size.y/2; 00113 00114 delete searchResult; 00115 delete searchArea; 00116 00117 }
Here is the call graph for this function:
|