import cv2
from skimage import transform as transform
from skimage.feature import (match_descriptors, ORB, plot_matches)
img1=cv2.imread('C:/Users/xpp/Desktop/Lena.png',0)#原始图像
img2=cv2.imread('C:/Users/xpp/Desktop/face.png',0)#原始图像
sift=cv2.xfeatures2d.SIFT_create()#实例化
kp1,des1=sift.detectAndCompute(img1,None)#找出图像中的关键点
kp2,des2=sift.detectAndCompute(img2,None)#找出图像中的关键点
bf=cv2.BFMatcher()#创建BF暴力匹配对象
matches=bf.knnMatch(des1,des2,k=2)#获得两幅图像的k个最佳匹配
good_matches=[]
for m1, m2 in matches:
if m1.distance<0.75*m2.distance:
good_matches.append([m1])#比值小于0.75,即最佳匹配点
img3=cv2.drawMatchesKnn(img1,kp1,img2,kp2,good_matches,None,flags=2)#在最佳匹配点之间绘制直线
pylab.imshow(img3)
pylab.show()
算法:SIFT暴力匹配是通过识别两个图像之间的SIFT关键点最近的邻居来进行匹配。但在某些情况下,由于噪声等因素,第二个最接近的匹配似乎更接近第一个匹配。在这种情况下,计算最近距离与第二最近距离的比率,并检验它是否大于0.8。如果比率大于0.8,则表示拒绝。这有效地消除了约90%的错误匹配,且只有约5%的正确匹配。
网址:https://www.cs.ubc.ca/~lowe/pubs.html
本文分享自 图像处理与模式识别研究所 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有