dyn*_*mic 9 opencv object-detection computer-vision sift
我正在开发一个应用程序,我使用SIFT + RANSAC和Homography来查找对象(OpenCV C++,Java).我面临的问题是,在有很多异常值的情况下,RANSAC表现不佳.
出于这个原因,我想尝试一下SIFT的作者所说的非常好:投票.
我已经读过我们应该在4维特征空间中投票,其中4个维度是:
虽然使用opencv很容易获得匹配scale并且orientation:
cv::Keypoints.octave
cv::Keypoints.angle
Run Code Online (Sandbox Code Playgroud)
我很难理解如何计算位置.
我找到了一个有趣的幻灯片,只有one match我们能够绘制一个边界框:

但我不知道如何只用一场比赛就可以画出那个边界框.有帮助吗?
您正在寻找适合从图像1到图像2的几何变换的最大匹配特征集.在这种情况下,它是相似变换,其具有4个参数:平移(dx, dy),比例变化ds和旋转d_theta.
假设你已经匹配了特征:图像1中的f1和图像2中的f2.(x1,y1)设为图像1中f1的位置,s1设为它的比例,让它theta1成为方向.同样,你有(x2,y2),s2和theta2f2.
两个功能之间的转换是(dx,dy) = (x2-x1, y2-y1).
两个特征之间的比例变化是ds = s2 / s1.
两个特征之间的旋转是d_theta = theta2 - theta1.
所以dx,dy,ds,和d_theta是你的霍夫空间的尺寸.每个bin对应于相似性变换.
一旦你执行了Hough投票,并找到了最大的bin,那个bin就会给你一个从图像1到图像2的转换.你可以做的一件事是使用图像1的边界框并使用该转换对其进行转换:应用相应的翻译,旋转和缩放到图像的角落.通常,将参数打包到变换矩阵中,并使用齐次坐标.这将为您提供与您检测到的对象相对应的图像2中的边界框.