SIFT匹配和识别?(SIFT matches and recognition?)

2019-08-21 14:46发布

我发展,我现在用的SIFT + RANSAC和单应找到一个对象(OpenCV的C ++,JAVA)的应用程序。 我现在面临的问题是,那里有许多异常RANSAC表现不佳。

对于这个原因,我想尝试什么SIFT的作者说是相当不错的:投票。

我已阅读,我们应该在4维特征空间,其中4个维度的投票:

  • 位置[X,Y](有人说翻译中)
  • 规模
  • 取向

虽然与OpenCV中很容易拿到赛scaleorientation有:

cv::Keypoints.octave
cv::Keypoints.angle

我有很难理解我怎么能计算出位置。

我发现了一个有趣的幻灯片 ,其中只有one match ,我们能够得出一个边界框:

但我不明白我怎么能绘制边框只有一个匹配。 任何帮助吗?

Answer 1:

你正在寻找的最大集合的适合从图像1到图像2.几何变换。在这种情况下匹配的特征,它是相似变换,其具有4个参数:翻译(dx, dy)比例改变ds ,和旋转d_theta

比方说,你已经匹配功能:从图像1和F2 F1从图像2.设(x1,y1)是F1的图像1的位置,让s1是其规模,并让theta1是它的方向。 同样,你有(x2,y2) s2 ,以及theta2为F2。

两个特征之间的转换是(dx,dy) = (x2-x1, y2-y1)

两个特征之间的比例改变为ds = s2 / s1

两个特征之间的旋转是d_theta = theta2 - theta1

因此, dxdyds ,和d_theta是你的霍夫空间的尺寸。 每个区间对应于相似变换。

一旦你执行霍夫投票,发现最大窗口,该箱子让你从图像1到图像的变换2.有一件事你可以做的是将影像1的边框,并使用该改造改造它:适用相应的翻译,旋转和缩放的图像的角上。 通常情况下,你包的参数为变换矩阵,并使用齐次坐标。 这会给你的图像2与您已经检测到物体的边界框。



Answer 2:

当使用Hough变换,您创建签名存储每个功能的位移矢量从模板心(无论是(w/2,h/2)或中心矩的帮助)。

例如,用于在模板上发现10个SIFT特征,根据模板的质心的相对位置是一个vector<{a,b}> 现在,让我们来搜索该对象在查询图像:查询图像中找到的每个SIFT特征,与模板的10的一个匹配,投下一票到其相应的质心。

votemap(feature.x - a*, feature.y - b*)+=1其中a,b对应于该特定的特征向量。

如果其中的一些功能在同一地点(集群是必要的)成功投,你已经找到一个对象实例。

签名和投票是相反的过程。 假设V=(-20,-10) 因此,新的图像中搜索过程中,当发现的两场比赛中,我们发现他们的方向和大小,并铸有相应的投票。 例如,用于右框形心将是V'=(+20*0.5*cos(-10),+10*0.5*sin(-10))从SIFT特征远,因为它是在半尺寸和-10旋转度。



Answer 3:

为了完成迪马的,需要补充的是,图4D霍夫空间被量化为一个(可能是小的)数目的4D盒,其中每个盒对应于由它的中心给出的simiéarity。

然后,用于经由特征的暂定匹配获得的每个可能的相似性,加入1到四维空间中的对应的框(或小区 )。 输出相似度是通过与更票单元中给出。

为了computethe从1场变换,只是用迪马的公式在他的回答。 对于几双的比赛,你可能需要使用一些最小二乘法拟合。

最后,该变换可以用函数被应用于cv::warpPerspective()其中,所述立体矩阵的第三行设置为[0,0,1]



文章来源: SIFT matches and recognition?