算法笔记 : 透视变换(透射变换)

透射变换

  • 学习了透视变换,有些时候也称作透射变换,可能是类似于仿射变化这种叫法吧。
  • 在网上查到的资料大多又臭又长,看了半天仍然是一知半解,所以自己整理了一篇精简的笔记出来。
  • 以前不知道Z到底是怎么出来的,计算的时候Z完全当成1来看待。研究了好久才知道最终变换结果并非下文的X和Y,而是利用Z计算出的下文中的x’、y’。 希望看到这篇笔记的朋友能够规避这个坑。(别像我一样掉进去)
  • 爷爷们,给个点赞给个三联吧,谢谢!

变换矩阵和变换公式

透视变换(Perspective Transformation)是将二维的图片投影到一个三维视平面上,然后再转换到二维坐标下,所以也称为投影映射(Projective Mapping)。简单来说就是二维→三维→二维的一个过程。
透视变换矩阵表示:
[ X Y Z ] = [ a 1 b 1 c 1 a 2 b 2 c 2 a 3 b 3 c 3 ] [ x y 1 ] \begin{bmatrix}X\\Y\\Z\end{bmatrix}=\begin{bmatrix}a_1&b_1&c_1\\a_2&b_2&c_2\\a_3&b_3&c_3\end{bmatrix}\begin{bmatrix}x\\y\\1\end{bmatrix} XYZ=a1a2a3b1b2b3c1c2c3xy1
其中,X,Y,Z代表透射变换后的三个坐标,x、y代表透射变换前的2维坐标
可以得到公式形式:
{ X = a 1 x + b 1 y + c 1 Y = a 2 x + b 2 y + c 2 Z = a 3 x + b 3 y + c 3 \left\{\begin{aligned} X&=&a_1x+b_1y+c_1\\ Y&=&a_2x+b_2y+c_2\\ Z&=&a_3x+b_3y+c_3 \end{aligned}\right. XYZ===a1x+b1y+c1a2x+b2y+c2a3x+b3y+c3
因为计算出后是一个3维坐标,所以我们要利用Z将值转换到2维坐标中
{ x ′ = X Z = a 1 x + b 1 y + c 1 a 3 x + b 3 y + c 3 y ′ = Y Z = a 2 x + b 2 y + c 2 a 3 x + b 3 y + c 3 \left\{\begin{aligned} x'&=&\frac{X}{Z}&=&\frac{a_1x+b_1y+c_1}{a_3x+b_3y+c_3}\\ y'&=&\frac{Y}{Z}&=&\frac{a_2x+b_2y+c_2}{a_3x+b_3y+c_3} \end{aligned}\right. xy==ZXZY==a3x+b3y+c3a1x+b1y+c1a3x+b3y+c3a2x+b2y+c2
于是x‘和y’是二位透透射变换的最终计算结果
其中c3=1

计算矩阵参数:
可以得到通式:
{ − a 1 x + a 3 x x ′ − b 1 y + b 3 y x ′ − c 1 = − 1 − a 2 x + a 3 x y ′ − b 2 y + b 3 y y ′ − c 2 = − 1 \left\{\begin{aligned} -a_1x&&+a_3xx'&-b_1y&&+b_3yx'&-c_1&&=-1\\ &-a_2x&+a_3xy'&&-b_2y&+b_3yy'&&-c_2&=-1\\ \end{aligned}\right. {a1xa2x+a3xx+a3xyb1yb2y+b3yx+b3yyc1c2=1=1
将4个点带入通式组成线性方程组,则可用克拉默法则计算出相应参数

撰写时间

20210727

  • 29
    点赞
  • 51
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值