gpt4 book ai didi

python - opencv SIFT特征匹配不准确

转载 作者:太空宇宙 更新时间:2023-11-03 23:12:43 25 4
gpt4 key购买 nike

我正在使用 SIFT 特征(使用以下)代码进行交通标志识别。但结果很奇怪:

#here I read 7 traffic sign images and compute the corresponding SIFTs (speed limit)
sift = cv2.xfeatures2d.SIFT_create()
import glob
imglist = [[], [], [], []]
for filename in glob.glob('data/*.jpg'): #assuming gif
base=os.path.basename(filename)
file=os.path.splitext(base)[0]
print (file)
imglist[0].append(file)
img=cv2.imread(filename)
imglist[1].append(img)

img = cv2.resize(img, (128, 128))

gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
gray=cv2.equalizeHist(gray)
keypoints, des = sift.detectAndCompute(gray, None)
imglist[2].append(keypoints)
imglist[3].append(des)

我的一些数字如下所示:

20km 50km

30km然后,我上传一张图,计算 SIFT 并使用以下代码将其与我的数据库(上面的图)进行比较:

img=cv2.imread("50_test.jpg")
#img=crop_img
img = cv2.resize(img, (128, 128))
IMAGES=imglist
bf = cv2.BFMatcher()
sift = cv2.xfeatures2d.SIFT_create()
# Find the keypoint descriptors with SIFT
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
gray=cv2.equalizeHist(gray)
_, des = sift.detectAndCompute(gray, None)
if des is None:
print ("Unknown")
#return "Unknown", 0
if len(des) < 5:
print ("Unknown")
#return "Unknown", 0

biggest_amnt = 0
biggest_speed = 0
cur_img = 0
for _ in IMAGES[0]:
des2 = IMAGES[3][cur_img]
matches = bf.knnMatch(des,des2, k=2)
matchamnt = 0
# Apply ratio test
matchamnt = 0
for m,n in matches:
if m.distance < 0.6*n.distance:
matchamnt += 1

print (matchamnt)
print (IMAGES[0][cur_img])
print ("************************")


if matchamnt > biggest_amnt:
biggest_amnt = matchamnt
biggest_speed = IMAGES[0][cur_img]

cur_img += 1

我上传测试的图如下图:

50test

对于上图,我的代码输出如下:

    similarity: 1
10 km
************************
similarity:3
100 km
************************
similarity: 1
120 km
************************
similarity: 7
20 km
************************
similarity: 6
30 km
************************
similarity: 2
50 km
************************
similarity: 4
90 km
************************
Output 20 km

如您所见,我的测试图像是 50 公里,但令人惊讶的是,它与我数据库中 20 公里的交通标志更相似!!!我想知道为什么会这样?有什么改进代码的建议吗?发送

最佳答案

20 和 30 符号以及您的查询图像都在红色圆圈周围共享相同的黑色边框,并且使用比数据库中的 50 符号粗得多的字体,这就是为什么它们具有更多相似的 SIFT 特征。

通过使用 OCR(光学字符识别)包并检测图像中的文本,您可以轻松解决此问题。

关于python - opencv SIFT特征匹配不准确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46472754/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com