void AddNewVlistD( CandidateList& vect_list , const MVector& mv , const int xr , const int yr ) { //As above, but using a diamond pattern vector<MVector> tmp_list; vect_list.push_back( tmp_list ); int list_num=vect_list.size()-1; int xlim; MVector tmp_mv( mv ); AddVect( vect_list , tmp_mv , list_num ); for ( int i=1 ; i<=xr ; ++i) { tmp_mv.x = mv.x + i; AddVect( vect_list , tmp_mv , list_num ); tmp_mv.x = mv.x - i; AddVect( vect_list , tmp_mv , list_num ); } for ( int j=1 ; j<=yr ; ++j) { xlim = xr * (yr-std::abs(j)) / yr; for ( int i=-xlim ; i<=xlim ; ++i) { tmp_mv.x = mv.x + i; tmp_mv.y = mv.y + j; AddVect( vect_list , tmp_mv , list_num ); tmp_mv.y = mv.y - j; AddVect( vect_list , tmp_mv , list_num ); } } // If we've not managed to add any element to the list // remove the list so we don't ever have to check its size if ( vect_list[list_num].size() == 0 ) vect_list.erase( vect_list.begin() + list_num ); }
void AddNewVlist( CandidateList& vect_list, const MVector& mv, const int xr , const int yr , const int step ) { //Creates a new motion vector list in a square region around mv vector<MVector> tmp_list; vect_list.push_back(tmp_list); int list_num=vect_list.size()-1; MVector tmp_mv( mv ); AddVect(vect_list , tmp_mv , list_num ); for ( int i=1 ; i<=xr ; ++i ) { tmp_mv.x = mv.x + i*step; AddVect( vect_list , tmp_mv , list_num ); tmp_mv.x = mv.x - i*step; AddVect( vect_list , tmp_mv , list_num ); } for ( int j=1 ; j<=yr ; ++j) { for ( int i=-xr ; i<=xr ; ++i) { tmp_mv.x = mv.x + i*step; tmp_mv.y = mv.y + j*step; AddVect(vect_list,tmp_mv,list_num); tmp_mv.y = mv.y -j*step; AddVect(vect_list,tmp_mv,list_num); }// i }// j // If we've not managed to add any element to the list // remove the list so we don't ever have to check its size if ( vect_list[list_num].size() == 0 ) vect_list.erase( vect_list.begin() + list_num ); }