单应性

单应性是几何中的一个概念。单应性是一个从实射影平面到射影平面的可逆变换，直线在该变换下仍映射为直线。具有相同意义的词还包括直射变换、射影变换和射影性等， 不过“直射变换”也在更广义的范围内使用。 形式化地说，射影变换是一种在射影几何中使用的变换：它是一对透视投影的组合。它描述了当观察者视角改变时，被观察物体的感知位置会发生何种变化。射影变换并不保持大小和角度，但会保持重合关系和交比——两个在射影几何中很重要的性质。射影变换形成了一个群。 对于更广义的射影空间——具有不同维度或不同的域——来说，“单应性”代表射影线性变换（由其相关的向量空间的线性变换导出的可逆变换），而“直射变换”（意为“把直线映射为直线”）更为广义，它既包含了单应性，也包含了自同构直射变换（由域自同构导出的直射变换），或者是这两者的组合。 在计算机视觉领域中，空间中同一平面的任意两幅图像通过单应性关联在一起（假定是针孔相机）。比如,一个物体可以通过旋转相机镜头获取两张不同的照片(这两张照片的内容不一定要完全对应,部分对应即可),我们可以把单应性设为一个二维矩阵M,那么照片1乘以M就是照片2。 这有着很多实际应用，比如图像校正、图像对齐或两幅图像之间的相机运动计算（旋转和平移）等。一旦旋转和平移从所估计的单应性矩阵中提取出来，那么该信息将可被用来导航或是把3D物体模型插入到图像或视频中，使其可根据正确的透视来渲染，并且成为原始场景的一部分（请见增强现实）。 如果两幅图像之间的相机运动只有旋转而没有平移，那么这两幅图像通过单应性关联在一起（假定是针孔相机）。 我们有两个相机a和b，这两个相机都向某平面中的点 P i {\displaystyle P_{i}} 看去。 把 P i {\displaystyle P_{i}} 的投影从b中的 b p i {\displaystyle {}^{b}p_{i}} 转换到a中的点 a p i {\displaystyle {}^{a}p_{i}} ： a p i = K a ⋅ H b a ⋅ K b − 1 ⋅ b p i {\displaystyle {}^{a}p_{i}=K_{a}\cdot H_{ba}\cdot K_{b}^{-1}\cdot {}^{b}p_{i}} 其中 H b a {\displaystyle H_{ba}} 是 H b a = R − t n T d {\displaystyle H_{ba}=R-{\frac {tn^{T}}{d}}} R {\displaystyle R} 是旋转矩阵，通过该矩阵b关于a旋转；t是从a到b的平移向量；n和d分别是平面的法向量和相機到平面的距离。 Ka和Kb是相机的内参数矩阵。 此图显示相机b在距离d处看向平面。 提示：从上图中可知， n T P i {\displaystyle n^{T}P_{i}} 是向量 P i {\displaystyle P_{i}} 到 n T {\displaystyle n^{T}} 的投影，且等于d。因此 t n T d P i = t {\displaystyle {\frac {tn^{T}}{d}}P_{i}=t} 。而且我们有 H b a P i = R P i − t {\displaystyle H_{ba}P_{i}=RP_{i}-t} 。 齐次坐标以矩阵乘的方式来表示射影变换，因为使用笛卡儿坐标的话，矩阵乘无法执行透视射影所必需的除法运算。换句话说，透视射影在笛卡儿坐标下不是线性变换。 给定： p a = [ x a y a 1 ] , p b ′ = [ w ′ x b w ′ y b w ′ ] , H a b = [ h 11 h 12 h 13 h 21 h 22 h 23 h 31 h 32 h 33 ] {\displaystyle p_{a}={\begin{bmatrix}x_{a}\\y_{a}\\1\end{bmatrix}},p_{b}^{\prime }={\begin{bmatrix}w^{\prime }x_{b}\\w^{\prime }y_{b}\\w^{\prime }\end{bmatrix}},\mathbf {H} _{ab}={\begin{bmatrix}h_{11}&h_{12}&h_{13}\\h_{21}&h_{22}&h_{23}\\h_{31}&h_{32}&h_{33}\end{bmatrix}}} 则： p b ′ = H a b p a {\displaystyle p_{b}^{\prime }=\mathbf {H} _{ab}p_{a}\,} 其中： H b a = H a b − 1 . {\displaystyle \mathbf {H} _{ba}=\mathbf {H} _{ab}^{-1}.} 也即： p b = p b ′ / w ′ = [ x b y b 1 ] {\displaystyle p_{b}=p_{b}^{\prime }/w^{\prime }={\begin{bmatrix}x_{b}\\y_{b}\\1\end{bmatrix}}} 当要计算单应性的图像区域比较小，或者图像要求焦距较长时，仿射单应性是更合适的模型。仿射单应性是广义单应性中的一种，它的最后一行固定为 h 31 = h 32 = 0 , h 33 = 1. {\displaystyle h_{31}=h_{32}=0,\;h_{33}=1.} 外极几何 W曲线 Richard Hartley and Andrew Zisserman. Multiple View Geometry in computer vision. Cambridge University Press. 2003: 32–33. ISBN 0-521-54051-8.  O. Chum and T. Pajdla and P. Sturm. The Geometric Error for Homographies. Computer Vision and Image Understanding. 2005, 97 (1): 86–102. doi:10.1016/j.cviu.2004.03.004.  Bill Goldman (2005) Transformations in Circle Geometry, course notes from University of Maryland. M. Lourakis' homest （页面存档备份，存于互联网档案馆） is a GPL C/C++ library for robust, non-linear (based on the Levenberg-Marquardt algorithm) homography estimation from matched point pairs. homest can estimate fully projective and affine homographies with a variety of objective functions. OpenCV is a complete (open and free) computer vision software library that has many routines related to homography estimation (cvFindHomography) and re-projection (cvPerspectiveTransform). Download and documentation information is on the OpenCV Wiki. Computing the plane to plane homography （页面存档备份，存于互联网档案馆） How to compute a homography （页面存档备份，存于互联网档案馆） MATLAB Functions for Multiple View Geometry （页面存档备份，存于互联网档案馆） Matlab functions for calculating a homography and the fundamental matrix