使用OpenCV进行功能匹配时,是否可以考虑功能的物理位置?

时间:2020-05-20 00:34:06

标签: python opencv

我首先将表单拆分为多个框,所有框都具有文本标签和空白以供响应。我知道这是我的黄金标准,格式正确。我想将其与相同形式的填充副本进行比较,因此所有分隔线和标题均相同。填充的副本可能会略有倾斜,我想对它们进行去歪斜以匹配黄金标准的参考图像,以便我可以从表单中的每个框中提取响应文本。

下面是我到目前为止的代码,其中“ reference_file”是上述空表格,而test_image是需要校正的填充表格。

orb = cv2.ORB_create()
test_kp, test_desc = orb.detectAndCompute(test_image, None)
reference_kp, reference_desc = orb.detectAndCompute(reference_image, None)

FLANN_INDEX_LSH = 6
index_params = dict(algorithm=FLANN_INDEX_LSH,
                    table_number=12,
                    key_size=10,
                    multi_probe_level=1)

search_params = dict(checks=50)

flann = cv2.FlannBasedMatcher(index_params, search_params)
knn_matches = flann.knnMatch(test_desc, reference_desc, 2)
ratio_thresh = 0.75
matches = []
for m, n in knn_matches:
    if m.distance < ratio_thresh * n.distance:
        matches.append(m)

matches_img = cv2.drawMatches(test_image, test_kp, reference_image, reference_kp, matches, None, flags=cv2.DrawMatchesFlags_NOT_DRAW_SINGLE_POINTS)

从技术上讲这是可行的-当我查看matchs_img时,我可以看到它正在将文档的相似块相互映射。但是,我的文档中有些部分是相似的-例如,大约有10个“是”复选框的实例,如下所示:

empty checkbox with label 'YES' to the right of it

上面的代码将正确地将此复选框中的一项功能从参考图像映射到测试图像中的一项,但是它将在完全不同的位置选择一个复选框。我知道这些文档不会出现难以置信的偏斜,因此我想向匹配器添加一些因素,以考虑物理空间中的位置并优先考虑那些更近的文档。有可能吗?

0 个答案:

没有答案
相关问题