提交 e646f9d2 编写于 作者: H Han Hu

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.

https://github.com/pablofdezalc/akaze/commit/35aeb83a7142e9ec42419603a094ffc2a1401c05
https://github.com/pablofdezalc/akaze/commit/db3dc22981e856ca8111f2f7fe57d9c2e0286efc
上级 c3d1f94e
......@@ -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
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册