我正在基于dlib库提取人脸界标
从图像中我可以看到元组列表
P1 = [(277, 288), (248, 290), (182, 291), (210, 291), (230, 347)]
P10 = [(349, 291), (307, 278), (220, 247), (255, 260), (248, 346)]
P1
The left eyes on (277, 288), (248, 290)
The right eyes on (182, 291), (210, 291)
Nose tip on (230, 347)
P10
The left eyes on (349, 291), (307, 278)
The right eyes on (220, 247), (255, 260)
Nose tip on (248, 346)
我试图使用欧几里得距离,但我认为从这些界标确定相似性的方法不是正确的。
我想知道如何从我提取的地标中获得相似性值?
答案 0 :(得分:1)
我可以通过以下方式理解您的问题:您需要测量5边形(或5元组的2D点)的相似度。如果是这样,您可能可以使用Procrustes分析执行该任务。 scipy.spatial.procrustes
应该可以解决问题:
https://docs.scipy.org/doc/scipy-0.16.1/reference/generated/scipy.spatial.procrustes.html
您应该寻找disparity
:
import scipy.spatial
d = scipy.spatial.procrustes(P10,P1)[-1]
print(d) #prints 0.001937599061578668
如果我没记错的话,将那个值减小到更多类似的记录。请注意,这是对比例不敏感的,即5边形,并且说相同形状的5边形的2倍大将给出0.0
(请参见链接中的示例)。