我正在建立一个基于scikit-image的全景代码。它很标准,就像
1)加载和灰度图像
2)ORB检测和匹配
3)RANSAC单应性搜索(产生3×3矩阵)4)变形和拼接图像
这与我的图片配合得很好。但是,为了让它在可接受的时间内工作,我必须缩小我的ORB图像。 然后应用于缩小图像的变换得到了良好的结果,然而将它们应用于非缩放图像处理。
供参考:缩放由skimage.transform.rescale完成,只有一个常量缩放,transform是一个skimage.transform.ProjectiveTransform类,变形是用skimage.transform.warp完成的
Q1)在我的论述中,同形异义词只是按比例定义。那么为什么我不能以不同的比例使用它们(如果在图像中心进行了sclaing)
Q2)有没有办法简单地扩展我的单应性?
答案 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]]