Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Opencv 如何更准确地比较两幅图像之间的特征?_Opencv_Computer Vision_Conv Neural Network_Sift_Orb - Fatal编程技术网

Opencv 如何更准确地比较两幅图像之间的特征?

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_

我已经开发了两种使用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_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)