2016-05-12 93 views
18

我一直在试图找到一种方法来比较使用Python(2.7.x)opencv(2.4.9)中的SIFT两个图像后的相似性得分(%)。我只能找到在比赛之间画线的例子。我该如何继续。使用opencv生成相似度得分百分比从SIFT

+0

准确地说,我正在寻找VL_UBCMATCH函数的python实现 – user93

+0

您是否找到它? – edyvedy13

+1

不,我找不到它。示例代码将非常有用 – user93

回答

6

在Matlab中有一个与vl_ubcmatch函数相当的opencv。

以下是摘自opencv documentation

# create BFMatcher object 
bf = cv2.BFMatcher(cv2.NORM_HAMMING, crossCheck=True) 

# Match descriptors. 
matches = bf.match(des1,des2) 

matches = bf. match (des1, des2)匹配两组描述符并返回一个DMatch对象列表。这个DMatch对象有四个属性:distance,trainIdx,queryIdx,imgIdx。这些返回值相当于vl_ubcmatch函数。

我希望你会发现它有帮助。

+0

我需要的是分数。 VL_UBCMATCH除了匹配返回得分 – user93

+1

根据[VLFEAT文档](http://www.vlfeat.org/matlab/vl_ubcmatch.html),VL_UBCMATCH将平方欧几里德距离返回给得分变量。事实上,当我尝试[SIFT教程](http://www.vlfeat.org/overview/sift.html)时,得分变量具有两个SIFT描述符之间的距离值。 score(:, 1)是21647,sum((int64(da(:, 9)) - int64(db(:, 618)))。^ 2)'是相同的值,其中da(:, 9)是ImageA中的第9个SIFT描述符,db(:, 618)是ImageB中的第618个SIFT描述符。这不是你想要的输出吗? – satojkovic