透射变换
序
- 学习了透视变换,有些时候也称作透射变换,可能是类似于仿射变化这种叫法吧。
- 在网上查到的资料大多又臭又长,看了半天仍然是一知半解,所以自己整理了一篇精简的笔记出来。
- 以前不知道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⎦⎤=⎣⎡a1a2a3b1b2b3c1c2c3⎦⎤⎣⎡xy1⎦⎤
其中,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.
⎩⎪⎪⎨⎪⎪⎧x′y′==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.
{−a1x−a2x+a3xx′+a3xy′−b1y−b2y+b3yx′+b3yy′−c1−c2=−1=−1
将4个点带入通式组成线性方程组,则可用克拉默法则计算出相应参数
撰写时间
20210727