【问题标题】:Rescaling Homographys / Image warping重新缩放单应性/图像变形
【发布时间】:2016-11-04 00:26:39
【问题描述】:

我正在构建一个基于 scikit-image 的全景代码。它非常标准,就像

1) 加载和灰度图像

2) ORB检测与匹配

3) RANSAC 单应性搜索(产生 3x3 矩阵)

4) 变形和拼接图像

这适用于我的图像。然而,为了让它在可接受的时间内工作,我必须为 ORB 缩小我的图像。 然后将派生的变换应用于缩小的图像会产生良好的结果,但将它们应用于未缩小的图像则不起作用。

供参考:缩放由 skimage.transform.rescale 以一个恒定比例完成,变换是 skimage.transform.ProjectiveTransform 类,变形由 skimage.transform.warp 完成

Q1) 在我的理解中,单应性只是按比例定义的。那么为什么我不能以不同的比例使用它们(如果在图像中心进行了缩放)

Q2) 有没有办法简单地缩放我的单应性?

【问题讨论】:

    标签: python scikit-image panoramas


    【解决方案1】:

    估计的单应性 H 是按比例定义的,即当应用于单应性向量 p = [x y z] 时,结果向量 Hp = [x' y' z'] 表示二维向量 [x'/z' y'/z']。因此,单应矩阵的任何缩放,比如kH,都会产生kHp = [kx' ky' kz'] 或二维等效[x'/z' y'/z'],与以前相同。

    在您描述的场景中,您想要的是重新缩放转换,以便它可以应用于您的原始图像坐标,即使单应性是在按比例缩小的坐标上估计的。

    所以,你可以这样做:

    from skimage import transform as tf
    import numpy as np
    
    # Set up a fake homography as illustration
    # This homography is estimated on the scaled down image,
    # but we'd 
    estimated_tf = tf.ProjectiveTransform(np.arange(9).reshape((3, 3))/10)
    print('Estimated:\n', estimated_tf.params)
    
    S_down = tf.SimilarityTransform(scale=0.5)
    S_up = tf.SimilarityTransform(scale=2)
    
    full_tf = S_down + estimated_tf + S_up
    
    print('On scaled down coordinates:', estimated_tf([1, 2]))
    print('On full coordinates:', full_tf([2, 4]))
    

    产量

    Estimated: [[ 0. 0.1 0.2] [ 0.3 0.4 0.5] [ 0.6 0.7 0.8]] On scaled down coordinates: [[ 0.14285714 0.57142857]] On full coordinates: [[ 0.28571429 1.14285714]]

    【讨论】:

    猜你喜欢
    • 2017-02-01
    • 1970-01-01
    • 2011-02-21
    • 2022-11-12
    • 2020-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多