为什么 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 (将#修改为@)