指纹识别基础之ORB特征提取
程序员文章站
2022-06-11 18:09:08
...
加载训练图像
在 ORB 中,将要被寻找的目标图像被称为训练图像(training image)。
定位关键点
我们将使用 OpenCV 的 ORB 实现定位关键点并创建相应的 ORB 描述符。ORB 算法的参数是使用orb_create()
函数设置的。orb_create()
函数的参数及其默认值如下:
cv2.ORB_create(nfeatures = 500,
scaleFactor = 1.2,
nlevels = 8,
edgeThreshold = 31,
firstLevel = 0,
WTA_K = 2,
scoreType = HARRIS_SCORE,
patchSize = 31,
fastThreshold = 20)
cv2. ORB_create()
函数支持的参数很多。前两个参数(nfeatures
和 scaleFactor
)可能是最常用的参数。其他参数一般保持默认值既能获得比较良好的结果。
在下面的代码中,将使用 ORB_create()
函数,并将要检测的最大关键点数量nfeatures
设置为 200,将缩放比率scaleFactor
设置为 2.1。然后使用.detectandcompute(image)
方法来定位给定训练图片 training_gray
中的关键点并计算它们对应的 ORB 描述符。最后使用 cv2.drawKeypoints()
函数来可视化 ORB 算法找到的关键点。
原文链接:https://www.cnblogs.com/alexme/p/11345951.html
指纹识别部分代码
#img1 = cv2.imread("database/" + image_name, cv2.IMREAD_GRAYSCALE)
img1 = cv2.imread("E:\data\\bsdata\\fingerDb\\420102198408075632\\103_1.tif" , cv2.IMREAD_GRAYSCALE)
kp1, des1 = get_descriptors(img1)
#image_name = sys.argv[2]
img2 = cv2.imread("E:\data\\bsdata\\fingerDb\\420102198408075632\\103_4.tif", cv2.IMREAD_GRAYSCALE)
#img2 = cv2.imread("database/" + image_name, cv2.IMREAD_GRAYSCALE)
kp2, des2 = get_descriptors(img2)
# 提取并计算特征点
bf = cv2.BFMatcher(cv2.NORM_HAMMING, crossCheck=True)
matches = sorted(bf.match(des1, des2), key=lambda match: match.distance)
# Plot keypoints
img4 = cv2.drawKeypoints(img1, kp1, outImage=None)
img5 = cv2.drawKeypoints(img2, kp2, outImage=None)
f, axarr = plt.subplots(1, 2)
axarr[0].imshow(img4)
axarr[1].imshow(img5)
plt.show()
# Plot matches
img3 = cv2.drawMatches(img1, kp1, img2, kp2, matches, flags=2, outImg=None)
plt.imshow(img3)
plt.show()
# Calculate score
score = 0
for match in matches:
score += match.distance
score_threshold = 33
if score / len(matches) < score_threshold:
print("Fingerprint matches.")
else:
print("Fingerprint does not match.")
结果
上一篇: (18)特征提取 之 ORB特征
下一篇: WCF通信简单学习实例