重新调整Homographys /图像变形

时间:2016-11-03 11:55:07

标签: python scikit-image panoramas

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

1)加载和灰度图像

2)ORB检测和匹配

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

4)变形和拼接图像

这与我的图片配合得很好。但是,为了让它在可接受的时间内工作,我必须缩小我的ORB图像。 然后应用于缩小图像的变换得到了良好的结果,然而将它们应用于非缩放图像处理。

供参考:缩放由skimage.transform.rescale完成,只有一个常量缩放,transform是一个skimage.transform.ProjectiveTransform类,变形是用skimage.transform.warp完成的

Q1)在我的论述中,同形异义词只是按比例定义。那么为什么我不能以不同的比例使用它们(如果在图像中心进行了sclaing)

Q2)有没有办法简单地扩展我的单应性?

1 个答案:

答案 0 :(得分:1)

估计的单应性H在某种意义上是按比例定义的,当应用于单应性向量p = [x y z]时,得到的向量Hp = [x' y' z']代表2-D向量[x'/z' y'/z'] 。因此,单应矩阵的任何缩放(例如kH)都会产生kHp = [kx' ky' kz']或2D等效[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]]