diff --git a/modules/nonfree/src/sift.cpp b/modules/nonfree/src/sift.cpp index 0bb78489bd..3237ae6c0c 100644 --- a/modules/nonfree/src/sift.cpp +++ b/modules/nonfree/src/sift.cpp @@ -498,7 +498,9 @@ void SIFT::findScaleSpaceExtrema( const vector& gauss_pyr, const vector= n ? bin - n : bin; - kpt.angle = (float)((360.f/n) * bin); + kpt.angle = 360.f - (float)((360.f/n) * bin); + if(std::abs(kpt.angle - 360.f) < FLT_EPSILON) + kpt.angle = 0.f; keypoints.push_back(kpt); } } @@ -650,7 +652,10 @@ static void calcDescriptors(const vector& gpyr, const vector& key Point2f ptf(kpt.pt.x*scale, kpt.pt.y*scale); const Mat& img = gpyr[octv*(nOctaveLayers + 3) + layer]; - calcSIFTDescriptor(img, ptf, kpt.angle, size*0.5f, d, n, descriptors.ptr((int)i)); + float angle = 360.f - kpt.angle; + if(std::abs(angle - 360.f) < FLT_EPSILON) + angle = 0.f; + calcSIFTDescriptor(img, ptf, angle, size*0.5f, d, n, descriptors.ptr((int)i)); } }