欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

指纹识别基础之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.")

 结果

指纹识别基础之ORB特征提取