mirror of
https://github.com/opencv/opencv.git
synced 2025-01-18 14:13:15 +08:00
Fix subpixel problem of akaze.
This is found in the original akaze repo. Previous sub pixel localization method assumes the coordinate (0, 0) is the up-left corner of the up-left pixel. But as far as I know, opencv uses the center of the up-left corner, in this case it should be done in this way.35aeb83a71
db3dc22981
This commit is contained in:
parent
c3d1f94ee6
commit
e646f9d2f1
@ -342,14 +342,14 @@ void AKAZEFeatures::Find_Scale_Space_Extrema(std::vector<KeyPoint>& kpts)
|
||||
|
||||
if (is_out == false) {
|
||||
if (is_repeated == false) {
|
||||
point.pt.x *= ratio;
|
||||
point.pt.y *= ratio;
|
||||
point.pt.x = (float)(point.pt.x*ratio + .5*(ratio-1.0));
|
||||
point.pt.y = (float)(point.pt.y*ratio + .5*(ratio-1.0));
|
||||
kpts_aux.push_back(point);
|
||||
npoints++;
|
||||
}
|
||||
else {
|
||||
point.pt.x *= ratio;
|
||||
point.pt.y *= ratio;
|
||||
point.pt.x = (float)(point.pt.x*ratio + .5*(ratio-1.0));
|
||||
point.pt.y = (float)(point.pt.y*ratio + .5*(ratio-1.0));
|
||||
kpts_aux[id_repeated] = point;
|
||||
}
|
||||
} // if is_out
|
||||
@ -439,8 +439,8 @@ void AKAZEFeatures::Do_Subpixel_Refinement(std::vector<KeyPoint>& kpts)
|
||||
kpts[i].pt.x = x + dst(0);
|
||||
kpts[i].pt.y = y + dst(1);
|
||||
int power = fastpow(2, evolution_[kpts[i].class_id].octave);
|
||||
kpts[i].pt.x *= power;
|
||||
kpts[i].pt.y *= power;
|
||||
kpts[i].pt.x = (float)(kpts[i].pt.x*power + .5*(power-1));
|
||||
kpts[i].pt.y = (float)(kpts[i].pt.y*power + .5*(power-1));
|
||||
kpts[i].angle = 0.0;
|
||||
|
||||
// In OpenCV the size of a keypoint its the diameter
|
||||
|
Loading…
Reference in New Issue
Block a user