使用opencv从SIFT生成百分比的相似性得分

use*_*r93 20 opencv sift python-2.7

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

sat*_*vic 6

在Matlab中有一个opencv等效的vl_ubcmatch函数.

以下是opencv文档的摘录.

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

# Match descriptors.
matches = bf.match(des1,des2)
Run Code Online (Sandbox Code Playgroud)

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

我希望你会发现它有用.

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