如何仅通过平移和旋转进行2D匹配和变换估计,不包括缩放

时间:2019-05-12 11:12:25

标签: python opencv alignment orb

我正在使用opencv-python对齐两个图像(由同一设备扫描,因此它们应该仅通过平移和旋转就可以彼此对齐,而无需缩放)。考虑到图像实际上是在同一台机器上扫描的,因此特征匹配和变换估计中应该没有缩放或只有一点点缩放。

我在几年前发布的opencv论坛上找到了答案。

https://answers.opencv.org/question/90428/scale-variant-feature-matching/

建议在使用orb时将nlevels设置为1。

所以我将代码修改为这样。

if __name__ == "__main__":
    full_affine = False
    try_cuda = True
    match_conf = 0.3
    finder = cv2.ORB_create(scaleFactor=1.2, nlevels=1, edgeThreshold=31,
                            firstLevel=0, WTA_K=2, scoreType=cv2.ORB_HARRIS_SCORE,
                            nfeatures=100, patchSize=31)
    matcher = cv2.detail_AffineBestOf2NearestMatcher(full_affine, try_cuda, match_conf)

    source_img = cv2.imread("000010.jpg")
    target_img = cv2.imread("000000.jpg")

    source_feature = cv2.detail.computeImageFeatures2(featuresFinder=finder, image=source_img)
    target_feature = cv2.detail.computeImageFeatures2(featuresFinder=finder, image=target_img)

    matching_result = matcher.apply(source_feature, target_feature)

    print(type(matching_result))

    print("matching_result.confidence")
    print(matching_result.confidence)
    print("matching_result.H")
    print(matching_result.H)
    print("matching_result.dst_img_idx")
    print(matching_result.dst_img_idx)
    print("matching_result.src_img_idx")
    print(matching_result.src_img_idx)

    t = matching_result.H

    print(type(t))

根据opencv的python api,matching_result.H是估计的2D变换

我希望输出结果是一个无需缩放的仿射变换矩阵。

但是,它显然可以缩放图像。

我的猜测是先前建议的设置nlevels = 1的解决方案确实限制了特征计算,但是变换估计仍然可以进行缩放。

有什么想法吗?

0 个答案:

没有答案