gpt4 book ai didi

python - 使用 Opencv 比较签名

转载 作者:行者123 更新时间:2023-12-02 17:21:27 26 4
gpt4 key购买 nike

我想比较两个签名之间的相似之处。

Python version : 3.7.7
OpenCv version : 4.2.0

这是我到目前为止所做的:
from cv2 import *
import numpy as np


#uploading images
template = cv2.imread("C://Users//subhr//Ams_1.jpg")
original = cv2.imread("C://Users//subhr//Ams_2.jpg")

#resizing images
template = cv2.resize(template,(528,152))
cv2.imshow("template image", template)
cv2.waitKey(0)
cv2.destroyAllWindows()
template.shape #row.columns
original = cv2.resize(original,(528,152))
cv2.imshow("original image", original)
cv2.waitKey(0)
cv2.destroyAllWindows()

#ORB Detector
orb = cv2.ORB_create()

original = cv2.Canny(original, 50, 200)
template = cv2.Canny(template, 50, 200)

# key points and descriptor calculation
kp1, desc_1 = orb.detectAndCompute(template, None)
kp2, desc_2 = orb.detectAndCompute(original, None)

#creating matches
matcher = cv2.DescriptorMatcher_create(cv2.DescriptorMatcher_BRUTEFORCE_HAMMING)
matches_1 = matcher.knnMatch(desc_1, desc_2, 2)
len(matches_1)

result = cv2.drawMatchesKnn(original, kp1 , template, kp2, matches_1, None)
cv2.imshow("result", result)
cv2.waitKey(0)
cv2.destroyAllWindows()

#distance similarity
good_points = []
for m,n in matches_1:
if m.distance < 0.8* n.distance:
good_points.append(m)
len(good_points)

result = cv2.drawMatches(original, kp1 , template, kp2, good_points, None)
cv2.imshow("result", result)
cv2.waitKey(0)
cv2.destroyAllWindows()

print(len(kp1))
print(len(kp2))

#calculating ratio
print("How good is the match : ",len(kp1)/len(good_points))

此时,我已经尝试了 orb akaze , 我想用 SIFT 但它不可用。我试过 Opencv 版本 3.4 但没有运气。

有没有更好的方法来比较签名的相似性并标准化整个过程?

图片链接: https://ibb.co/yhvTrng , https://ibb.co/xfBzCgW

谢谢你。

最佳答案

您没有给出任何示例图像,但即便如此,我也不确定使用诸如 orb 或 Kaze/Akaze 之类的特征点是否是一个好主意。在以某种程度的准确性比较签名时,那些或多或少仍然检测到类似角点的点似乎需要更多的知识(曲率等)。这看起来像是一个简单的卷积网络擅长的事情。在我的脑海中,我认为您可以使用例如这样的架构:

signature --> Convnet --> head-1 --> signature embedding  ------>---
| |---> (Hinge) loss
| |
--> head-2 --> signtature embedding ---->----

其中损失迫使相似签名的嵌入更接近,而不同签名的嵌入彼此远离。

你可以将你的架构建立在这个有点旧的 paper 上。 .关于训练网络的数据,有很多数据集(查看 this kaggle link
例如)。

编辑 :既然您在评论中说您更愿意避免基于深度学习的方法,我认为看看您当前的方法在功能方面缺乏什么会很有用。

您提取的低级特征(尽管不要提取 ORB,它的设计目的是快速、不准确,如果可以的话,坚持使用 KAZE 或 AKAZE)捕获本地信息,但对于签名识别而言,重要的是它们在空间上的分布方式(在相似的签名中分布应该大致相同)。这可以通过以下两种方式之一或两种方式来解决:1)改变评估相似性的方式以结合空间分布,而不是仅仅依赖于共同特征点的数量 2)手动设计一个捕获全局方面的高级互补特征签名的数量(可以像高度/宽度比一样简单,也可以更复杂并考虑曲率等)。

关于python - 使用 Opencv 比较签名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62017072/

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