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

加载训练图像

在 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.")

 结果

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值