微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么 cv2.DescriptorMatcher 效果不佳?

如何解决为什么 cv2.DescriptorMatcher 效果不佳?

我想执行一些图像对齐。还有下一个功能 - 我有一些面部地标,并希望通过它们与这些地标的距离来过滤某个检测器建立的关键点。所以这里是主要代码

akaze = cv2.AKAZE_create(threshold = 0)
keypoints1,descriptors1 = akaze.detectAndCompute(initialFace_gray,mask=None)
keypoints2,descriptors2 = akaze.detectAndCompute(resultFace_gray,mask=None)

save_descriptors1 = descriptors1.copy()
eps = 10
def condition(point):
    for borderPoint in initialLandmarks:
        if np.linalg.norm(np.array(point.pt) - borderPoint) < eps:
            return True
    return False
keypoints_descriptors1 = list(filter(lambda x : condition(x[0]),zip(keypoints1,descriptors1)))
keypoints1,descriptors1 = [],[]
for keypoint,descriptor in keypoints_descriptors1:
    keypoints1.append(keypoint)
    descriptors1.append(descriptor)
descriptors1 = np.array(descriptors1)

keypoints_descriptors2 = list(filter(lambda x : condition(x[0]),zip(keypoints2,descriptors2)))
keypoints2,descriptors2 = [],descriptor in keypoints_descriptors2:
    keypoints2.append(keypoint)
    descriptors2.append(descriptor)
descriptors2 = np.array(descriptors2)

它为我提供了接近给定地标的关键点。但是当我运行 matcher 时:

matcher = cv2.DescriptorMatcher_create(cv2.DESCRIPTOR_MATCHER_BRUTEFORCE_SL2)
matches = matcher.match(descriptors1,descriptors2,None)

# Sort matches by score
matches.sort(key=lambda x: x.distance,reverse=False)

GOOD_MATCH_PERCENT = 1
# Remove not so good matches
numGoodMatches = int(len(matches) * GOOD_MATCH_PERCENT)

matches = matches[:numGoodMatches]

它给了我以下糟糕的匹配

poor matching

我尝试改变参数 epsthresholdGOOD_MATCH_PERCENT,但结果仍然相同。即使剩下几个点,它们仍然很不匹配(下巴到鼻子,鼻子到眉毛等)。

我该如何解决?过滤有问题吗?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。