[move sift.cpp] Merge pull request opencv/opencv_contrib#2301 from ab-dragon:conditionally_compute_dog_pyramid

Build DoG Pyramid if useProvideKeypoints is false

The buildDoGPyramid operation need not be performed unconditionally. In cases where it is not needed, both memory and speed performance can be improved

original commit: e45887e1c0
pull/17119/head
ab-dragon 5 years ago committed by Alexander Alekhin
parent fadb90c579
commit 2947877871
  1. 5
      modules/features2d/src/sift.cpp

@ -1110,19 +1110,20 @@ void SIFT_Impl::detectAndCompute(InputArray _image, InputArray _mask,
}
Mat base = createInitialImage(image, firstOctave < 0, (float)sigma);
std::vector<Mat> gpyr, dogpyr;
std::vector<Mat> gpyr;
int nOctaves = actualNOctaves > 0 ? actualNOctaves : cvRound(std::log( (double)std::min( base.cols, base.rows ) ) / std::log(2.) - 2) - firstOctave;
//double t, tf = getTickFrequency();
//t = (double)getTickCount();
buildGaussianPyramid(base, gpyr, nOctaves);
buildDoGPyramid(gpyr, dogpyr);
//t = (double)getTickCount() - t;
//printf("pyramid construction time: %g\n", t*1000./tf);
if( !useProvidedKeypoints )
{
std::vector<Mat> dogpyr;
buildDoGPyramid(gpyr, dogpyr);
//t = (double)getTickCount();
findScaleSpaceExtrema(gpyr, dogpyr, keypoints);
KeyPointsFilter::removeDuplicatedSorted( keypoints );

Loading…
Cancel
Save