Opencv 如何更准确地比较两幅图像之间的特征?
我已经开发了两种使用SIFT和ORB的方法,但在我看来,这些点并不正确对应。我是否错误地使用了这些功能,或者我是否需要一些不同的功能Opencv 如何更准确地比较两幅图像之间的特征?,opencv,computer-vision,conv-neural-network,sift,orb,Opencv,Computer Vision,Conv Neural Network,Sift,Orb,我已经开发了两种使用SIFT和ORB的方法,但在我看来,这些点并不正确对应。我是否错误地使用了这些功能,或者我是否需要一些不同的功能 orb = cv2.ORB_create() keypoints_X, descriptor_X = orb.detectAndCompute(car1_gray, None) keypoints_y, descriptor_y = orb.detectAndCompute(car2_gray, None) bf = cv2.BFMatcher(cv2.NORM_
orb = cv2.ORB_create()
keypoints_X, descriptor_X = orb.detectAndCompute(car1_gray, None)
keypoints_y, descriptor_y = orb.detectAndCompute(car2_gray, None)
bf = cv2.BFMatcher(cv2.NORM_HAMMING, crossCheck = True)
matches = bf.match(descriptor_X, descriptor_y)
matches = sorted(matches, key = lambda x: x.distance)
result = cv2.drawMatches(car1_gray, keypoints_X, car2_gray, keypoints_y, matches[:10], car2_gray, flags = 2)
sift=cv2.sift\u create()
关键点,描述符=sift.detectAndCompute(car1\u灰色,无)
关键点,描述符=筛选、检测和计算(car2灰色,无)
bf=cv2.BFMatcher()
matches=bf.knnMatch(描述符X,描述符y,k=2)
bom=[]
对于匹配中的m,n:
如果m.距离<0.75*n.距离:
物料清单追加([m])
结果=cv2.drawMatchesKnn(car1灰色,关键点X,car2灰色,关键点y,bom,无,标志=cv2.DrawMatcheskFlags非单个点)
下面是筛选和ORB的结果:
看看SuperGlue,基于图形神经网络的特征匹配。虽然,他们不提供培训代码,但两个预培训模型适用于室内、室外。链接
看看SuperGlue,基于图形神经网络的特征匹配。虽然,他们不提供培训代码,但两个预培训模型适用于室内、室外。链接
大多数关键点描述符仅适用于纹理表面。此外,总会有错误的匹配。您将需要诸如RANSAC单应估计之类的方法来查找内点/离群点大多数关键点描述符仅适用于纹理曲面。此外,总会有错误的匹配。您将需要诸如RANSAC单应估计之类的方法来查找内点/异常值
sift = cv2.SIFT_create()
keypoints_X, descriptor_X = sift.detectAndCompute(car1_gray, None)
keypoints_y, descriptor_y = sift.detectAndCompute(car2_gray, None)
bf = cv2.BFMatcher()
matches = bf.knnMatch(descriptor_X, descriptor_y, k=2)
bom = []
for m,n in matches:
if m.distance < 0.75*n.distance:
bom.append([m])
result = cv2.drawMatchesKnn(car1_gray, keypoints_X, car2_gray, keypoints_y, bom, None, flags=cv2.DrawMatchesFlags_NOT_DRAW_SINGLE_POINTS)