2013-04-11 69 views
9

我正在开发一个应用程序,使用SIFT + RANSAC和Homography来查找对象(OpenCV C++,Java)。我面临的问题是RANSAC表现不佳的情况。SIFT匹配和识别?

由于这个原因,我想尝试一下SIFT的作者说的非常好:投票。

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

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

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

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

我很难理解我如何计算位置。

我发现了一个interesting slide其中只有one match我们可以得出一个边界框:

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

回答

5

您正在寻找最大的一套适合从图片1至2图像几何变换在这种情况下匹配的特征,它是相似变换,它有4个参数:翻译(dx, dy),规模变化ds和旋转d_theta

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

两个功能之间的翻译是(dx,dy) = (x2-x1, y2-y1)

两个特征之间的比例变化是ds = s2/s1

两个功能之间的旋转是d_theta = theta2 - theta1

所以,dxdyds,并且d_theta是你的霍夫空间的尺寸。每个bin对应于一个相似性转换。

一旦你执行了Hough投票,并找到最大bin,那么bin会给你一个从图像1到图像2的转换。你可以做的一件事就是取出图像1的边界框并使用该转换对其进行转换:将相应的平移,旋转和缩放应用到图像的角落。通常,将参数打包到变换矩阵中,并使用齐次坐标。这将为您提供图像2中与您检测到的对象相对应的边界框。

+0

我已经编辑了答案。 – Dima 2013-04-11 14:34:10

+1

只需一次匹配,就不需要霍夫变换。您将x和y(平移)的差异,方向(旋转)的差异以及比例(比例)的差异考虑在内。然后你把它们放到矩阵中。 – Dima 2013-04-11 20:26:27

2

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

然后,对于通过特征的暂定匹配获得的每个可能的相似性,将1添加到4D空间中的相应框(或单元)中。输出相似性由具有更多选票的单元给出。

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

最后,变换可以应用功能cv::warpPerspective(),其中透视矩阵的第三行设置为[0,0,1]

+0

这并未解释如何绘制边界框仅具有一个单一匹配 – dynamic 2013-04-11 13:38:58

+0

边界框是通过将模型图像上的最终相似性(从1个匹配或从霍夫投票获得)的蓝色和黄色的盒,然后绘制它绘制在新形象中。 – sansuiso 2013-04-11 14:13:53

+0

你可以发表一个关于如何钙化最终相似度矩阵的例子(只考虑一个匹配)? – dynamic 2013-04-11 14:54:51

2

使用Hough变换时,可创建一个存储模板质心((w/2,h/2)或借助中心矩)的每个要素的位移矢量的签名。

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

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

如果某些在同一点成功施放这些功能(集群是必要的),你已经找到一个对象实例。

enter image description here

签名和投票是相反的过程。我们假设V=(-20,-10)。因此,在搜索新颖的图像时,当找到两个匹配的时候,我们检测它们的方向和大小并分别投票。例如。对于正确的箱形质心将离开SIFT特征V'=(+20*0.5*cos(-10),+10*0.5*sin(-10)),因为它的尺寸是一半并旋转-10度。

+0

你是什么意思“一场比赛”?匹配功能的性质是什么?点(x,y)或区域(x,y,a,b,theta)就像例子中的黄色框? – William 2013-04-11 13:55:02

+0

然后,你就必须包括SIFT ** **描述的特征,并从DescriptorMatcher提取匹配的补丁旋转和缩放。 – William 2013-04-12 07:11:58