美文网首页
计算机视觉基础-几何变换

计算机视觉基础-几何变换

作者: 田田ww | 来源:发表于2019-03-23 17:30 被阅读0次

    齐次坐标

    齐次坐标就是用N+1维来代表N维坐标

    许多图形应用涉及到几何变换,主要包括平移、旋转、缩放。以矩阵表达式来计算这些变换时,平移是矩阵相加,旋转和缩放则是矩阵相乘,综合起来可以表示为p' = m1*p+ m2(注:因为习惯的原因,实际使用时一般使用变化矩阵左乘向量)(m1旋转缩放矩阵, m2为平移矩阵, p为原向量 ,p'为变换后的向量)。引入齐次坐标的目的主要是合并矩阵运算中的乘法和加法,表示为p' = p*M的形式。即它提供了用矩阵运算把二维、三维甚至高维空间中的一个点集从一个坐标系变换到另一个坐标系的有效方法。

    其次,它可以表示无穷远的点。

    在欧式空间,平行线不相交,而在透视空间,平行线可在视觉上相交于无穷远,如铁轨。但在欧式空间无穷远(\infty,\infty),是无意义的,为了解决这个问题,选择在2D笛卡尔坐标末尾加上一个额外的变量w来形成2D齐次坐标,因此,一个点(A,B)在齐次坐标里面变成了(a,b,w),并且有齐次坐标与笛卡尔坐标变换的规律如下

    (a,b,w)\Leftrightarrow (\frac{a}{w} ,\frac{b}{w})

    则无穷远可表示为(x,y,0),原点表示为(0,0,1)

    一、2D变换

    1.平移(2个自由度)

    在二维欧式空间,平移可写为\left[ \begin{matrix}   x` \\   y` \\  \end{matrix}  \right] = \left[ \begin{matrix}   x \\   y \\  \end{matrix}  \right]+t

    转化为齐次坐标

    \left[ \begin{matrix}  x`\\   y`\\  1\end{matrix}  \right] = \left[ \begin{matrix}   I& t \\  \end{matrix}  \right]\left[ \begin{matrix}   x \\   y \\  1 \end{matrix}  \right],其中I2\times 2的单位阵,即I=\left[ \begin{matrix}  1&0\\  0&1 \end{matrix}  \right]

    为了使利用矩阵乘法满足链式法则成为可能,继续变形为

    \left[ \begin{matrix}   x` \\   y` \\  1 \end{matrix}  \right] = \left[ \begin{matrix}   I& t \\ 0&1 \end{matrix}  \right]\left[ \begin{matrix}   x \\   y \\  1 \end{matrix}  \right],成为一个3\times3的满秩矩阵。

    2.刚体变换(3个自由度)

    旋转+平移也称为2D刚体运动(2D欧式变换,因其保持欧式距离)。有

    \left[ \begin{matrix}   x` \\   y` \\  \end{matrix}  \right] = R\left[ \begin{matrix}   x \\   y \\  \end{matrix}  \right]+t,其中R=\left[ \begin{matrix}   \cos \theta& -\sin\theta  \\   \sin\theta & \cos\theta \\  \end{matrix}  \right]是一个正交旋转矩阵,

    RR^T=1\vert R\vert=1

    将其转化为齐次坐标可以得到

    \left[ \begin{matrix}   x` \\   y` \\  1 \end{matrix}  \right] = \left[ \begin{matrix}   R& t \\   \end{matrix}  \right]\left[ \begin{matrix}   x \\   y \\  1 \end{matrix}  \right],可以看到旋转变换是由变换矩阵的左上2\times2矩阵决定的。

    R求解方法(绕原点旋转)

    设点V绕原点旋转

    原V:x=rcosφ   y=rsinφ

    现V':x'=rcos(θ+φ)   y'=rsin(θ+φ)

    三角展开可得

    \left[ \begin{matrix}   x` \\   y`  \end{matrix}  \right] = \left[ \begin{matrix}   \cos\theta& -\sin \theta \\ \sin \theta &\cos \theta \end{matrix}  \right]\left[ \begin{matrix}   x \\   y \end{matrix}  \right]

    ****************二维绕任意点旋转矩阵求法****************

    思路:将旋转点移到原点,执行旋转操作,将旋转点移到原来位置

    V`=T(x,y)*R*T(-x,-y)V,满足左乘规律

    M=\left[ \begin{matrix}   1&0&t_x\\  0&1&t_y\\0&0&1 \end{matrix}  \right]\left[ \begin{matrix}   \cos\theta& -\sin \theta & 0\\ \sin \theta &\cos \theta & 0\\0&0&1\end{matrix}  \right]\left[ \begin{matrix}   1&0&-t_x\\  0&1&-t_y\\0&0&1 \end{matrix}  \right]=\left[ \begin{matrix}   \cos\theta& -\sin \theta & (1-\cos \theta)t_x+ t_y\sin \theta\\ \sin \theta &\cos \theta & (1-\cos \theta)t_y- t_x\sin \theta\\0&0&1\end{matrix}  \right]

    3.放缩旋转(也叫相似变换)(4个自由度)

    可以表示为\left[ \begin{matrix}  x` \\   y` \\  \end{matrix}  \right] = sR\left[ \begin{matrix}   x \\   y \\  \end{matrix}  \right]+t,其中s是一个任意的尺度因子

    齐次坐标形式可写为\left[ \begin{matrix}   x` \\   y` \\  1 \end{matrix}  \right] = \left[ \begin{matrix}   sR& t \\   \end{matrix}  \right]\left[ \begin{matrix}   x \\   y \\  1 \end{matrix}  \right]= \left[ \begin{matrix}   a& -b &t_x \\ b& a & t_y \end{matrix}  \right]\left[ \begin{matrix}   x \\   y \\  1 \end{matrix}  \right]

    此时不要求a^2+b^2=1相似变换保持直线间的夹角。

    4.仿射变换(6个自由度)

    \left[ \begin{matrix} x`\\ y`\\  \end{matrix} \right] = A \left[ \begin{matrix} x\\ y \\ \end{matrix} \right]A=\left[ \begin{matrix}   a_{00}& a_{01}&a_{02}\\ a_{10}&a_{11}&a_{12}\\  \end{matrix}  \right]在仿射变换下平行线仍然保持平行。

    5.投影变换(也叫透视变换和同态映射)(8个自由度)

    \left[ \begin{matrix}x` \\y` \\ 1  \end{matrix}  \right] = H \left[ \begin{matrix}x \\y \\1 \end{matrix} \right],H是任意的3\times3矩阵,作用于齐次坐标。

    非齐次结果需要经过规范化,

    x`=\frac{h_{00}x+h_{01}y+h_{02}}{h_{20}x+h_{21}y+h_{22}} ,y`=\frac{h_{10}x+h_{11}y+h_{12}}{h_{20}x+h_{21}y+h_{22}}

    透视变换保持直线性(直线在变换后仍然是直线)

    《计算机视觉——算法与应用》2D坐标变换的层次

    二、3D变换

    1.平移(3个自由度)

    \left[ \begin{matrix}   x`\\  y`\\z` \\  1 \end{matrix}  \right] = \left[ \begin{matrix}   I& t \\   \end{matrix}  \right]\left[ \begin{matrix}   x \\   y \\ z\\ 1 \end{matrix}  \right],其中I=\left[ \begin{matrix}   1&0&0 \\  0&1&0\\0&0&1 \end{matrix}  \right]

    2.刚性变化(6个自由度)

    旋转+平移(3D刚性运动或3D欧式变换),齐次坐标表示为:

    \left[ \begin{matrix}   x` \\   y` \\ z`\\ 1 \end{matrix}  \right] = \left[ \begin{matrix}   R& t \\   \end{matrix}  \right]\left[ \begin{matrix}   x \\   y \\ z\\ 1 \end{matrix}  \right],R为3\times 3正交旋转矩阵(同二维)。

    三维空间的旋转有多种互相等价的表示方式,常见的有旋转矩阵、单位四元数、欧拉角、旋转向量等。

    1)旋转矩阵(旋转矩阵是正交矩阵)

    旋转矩阵用3x3的矩阵表示,旋转矩阵是正交矩阵,且行列式是单位1

    最简单的三维旋转,可以定义为物体绕世界坐标系的x,y,z依次旋转:

    由2D旋转计算过程同理,转换成齐次坐标表示,可得如下结果:

    绕x轴旋转矩阵为R_x=\left[ \begin{matrix}   1&0&0&0 \\  0&\cos\theta& -\sin\theta&0\\0&\sin\theta& \cos\theta&0 \\0&0&0&1 \end{matrix}  \right]

    绕y轴旋转矩阵为R_y=\left[ \begin{matrix}   \cos\theta&0&-\sin\theta&0 \\  0&1&0&0\\  \sin\theta& 0& \cos\theta&0 \\0&0&0&1 \end{matrix}  \right]

    绕z轴旋转矩阵为R_z=\left[ \begin{matrix}   \cos\theta&-\sin\theta&0&0 \\  \sin\theta& \cos\theta& 0 &0\\0&0&1&0 \\0&0&0&1 \end{matrix}  \right]

    则绕任意轴旋转时(认为旋转轴是单位向量),需要进行如下操作:

    a)将旋转轴转至与z轴重合

    b)按标准轴旋转

    c)将旋转轴转回原位置

    p为旋转轴,将p绕x轴旋转\varphi ,再绕y轴旋转\phi

    旋转矩阵为:R_x(-\varphi)R_y(-\phi)R_z(\theta)R_y(\phi)R_x(\varphi)满足左乘规律

    2)欧拉角(RPY角)

    如下图,在空间中绕三个坐标轴的旋转可以表示为roll(翻滚角)、pitch(俯仰角)、yaw(偏航角),由图可知,在欧拉角描述下,第一次旋转是以固定坐标系,第二次之后的旋转是按照物体自身坐标系,最后结果取决于所施加变化的顺序,且容易产生万向节死锁。一般不采用这种方式定量描述三维旋转。

    欧拉角旋转方式

    3)单位四元数

    绕坐标轴的多次旋转可以等效为绕某一转轴旋转一定的角度。假设等效旋转轴方向向量为

    \vec{K}=[k_x,k_y,k_z]^T ,等效旋转角为\theta,则四元数q=(x,y,z,w),可表示为

    x=k_x\sin\frac{\theta}{2} y=k_y\sin\frac{\theta}{2} z=k_z\sin\frac{\theta}{2} w=\cos\frac{\theta}{2}

    \|q\|=1,即x^2+y^2+z^2+w^2=1

    4)旋转向量

    旋转可以用旋转轴\vec{K}和角度\theta表示,或等同地用一个3D矢量\omega=\theta\vec{K}表示。

    R(\vec{K},\theta)=I+\sin\theta[\vec{K}]_\times+(1-\cos\theta)[\vec{K}]_\times^2,(Rodriguez罗德里格斯公式)

    [\vec{K}]_\times是叉积算子的矩阵形式,[\vec{K}]_\times=\left[ \begin{matrix}  0& -k_x&k_y \\ k_z&0&-k_x\\ -k_y &k_x&0\end{matrix}  \right]

    3.相似变换(7个自由度)

    \left[ \begin{matrix}   x` \\   y`\\z` \\  1 \end{matrix}  \right] = \left[ \begin{matrix}   sR& t \\   \end{matrix}  \right]\left[ \begin{matrix}   x \\   y \\ z\\ 1 \end{matrix}  \right],与刚性变换相比多一个缩放的尺度因子。

    4.仿射变换(12个自由度)

    \left[ \begin{matrix}   x` \\   y` \\ z`\end{matrix}  \right] = A \left[ \begin{matrix}   x \\   y \\ z \end{matrix}  \right]A=\left[ \begin{matrix}   a_{00}& a_{01}&a_{02}&a_{03} \\ a_{10}&a_{11}&a_{12}&a_{13}\\ a_{20} &a_{21}&a_{22}&a_{23} \end{matrix}  \right]

    5.投影变换(3D透视变换,15个自由度)

    \left[ \begin{matrix}   x` \\ y` \\z` \\ 1  \end{matrix}  \right] = H \left[ \begin{matrix}   x \\   y \\ z\\1  \end{matrix}  \right]H为一个4\times 4齐次矩阵。

    《计算机视觉——算法与应用》3D坐标变换的层次

    相关文章

      网友评论

          本文标题:计算机视觉基础-几何变换

          本文链接:https://www.haomeiwen.com/subject/winqvqtx.html