齐次坐标系在机器视觉中的应用
目录
1. 齐次坐标的定义:
用 n + 1 n+1 n+1 维分量来表示 n n n 维坐标。在齐次坐标中,用 ( h x , h y , h z , h ) (hx,hy,hz,h) (hx,hy,hz,h) 来表示 ( x , y , z ) (x,y,z) (x,y,z) ,比如说空间中的一点A ( 3 , 6 , 5 ) (3,6,5) (3,6,5)在齐次坐标中表示为 ( 3 h , 6 h , 5 h , h ) (3h,6h,5h,h) (3h,6h,5h,h),比如 ( 6 , 12 , 10 , 2 ) 、 ( 9 , 18 , 15 , 3 ) 和 ( 1.5 , 3 , 2.5 , 0.5 ) (6,12,10,2) 、(9,18,15,3) 和 (1.5, 3, 2.5,0.5) (6,12,10,2)、(9,18,15,3)和(1.5,3,2.5,0.5) 都表示空间中的点A,一般有:
笛卡尔坐标 → \rightarrow → 齐次坐标: 齐次坐标 → \rightarrow → 笛卡尔坐标:
[ x y z ] ⇒ h [ x y z 1 ] [ h x h y h z h ] ⇒ [ h x / h h y / h h z / h h / h ] ⇒ [ h x h y h z 1 ] \left[\begin{matrix} x\\y\\z \end{matrix}\right] \Rightarrow h\left[\begin{matrix} x\\y\\z\\1 \end{matrix}\right] \qquad \qquad \qquad \qquad \left[\begin{matrix} hx\\hy\\hz\\h \end{matrix}\right]\Rightarrow \left[\begin{matrix}hx/h\\hy/h\\hz/h\\h/h\end{matrix}\right] \Rightarrow \left[\begin{matrix}hx\\hy\\hz\\1\end{matrix}\right] ⎣⎡xyz⎦⎤⇒h⎣⎢⎢⎡xyz1⎦⎥⎥⎤⎣⎢⎢⎡hxhyhzh⎦⎥⎥⎤⇒⎣⎢⎢⎡hx/hhy/hhz/hh/h⎦⎥⎥⎤⇒⎣⎢⎢⎡hxhyhz1⎦⎥⎥⎤
由上述变量 h h h 可知,齐次坐标具有缩放不变性,即笛卡尔坐标系中的某一点,在齐次坐标系中具有 n n n 种表示方法。
2. 齐次坐标表示点和向量
在二维坐标系 x o y xoy xoy中,向量(1,2)可以表示向量 O A → \overrightarrow{OA} OA,也可以表示向量 B C → \overrightarrow{BC} BC, 只有方向和大小,而没有固定的起始位置;当默认以坐标原点为起点时,(1,2)也可以表示为一点。区分为点还是向量,需要通过相关使用环境,仅仅通过坐标形式无法从字面区分它是坐标还是向量。为了能够克服上述问题,引入了齐次坐标。
在坐标系
x
o
y
xoy
xoy中,
x
x
x方向基向量
m
m
m为
(
1
,
0
)
T
(1,0)^T
(1,0)T,
y
y
y方向的基向量
n
n
n为
(
0
,
1
)
T
(0,1)^T
(0,1)T。向量
O
A
→
\overrightarrow{OA}
OA表示为
O
A
→
=
a
x
m
+
a
y
n
\overrightarrow{OA}=a_xm+a_yn
OA=axm+ayn,点
A
=
a
x
m
+
a
y
n
+
O
A=a_xm+a_yn+O
A=axm+ayn+O,因此,有如下形式:
O
A
→
=
[
a
x
a
y
]
[
m
n
]
A
=
[
a
x
a
y
1
]
[
m
n
O
]
\overrightarrow{OA}= \left[\begin{matrix} a_x\\a_y \end{matrix}\right] \left[\begin{matrix} m \ n \end{matrix}\right] \quad \quad \quad A= \left[\begin{matrix} a_x\\a_y \\1\end{matrix}\right] \left[\begin{matrix} m \ n \ O\end{matrix}\right]
OA=[axay][m n]A=⎣⎡axay1⎦⎤[m n O]
从上述公式可以看出,点
A
A
A可以看作是从原点沿
x
x
x和
y
y
y平移而形成的新点。而这个平移量为
[
a
x
a
y
]
T
\left[\begin{matrix} a_x \ a_y \end{matrix}\right]^T
[ax ay]T。为了写成统一的形式,有:
O
A
→
=
[
a
x
a
y
0
]
[
m
n
O
]
A
=
[
a
x
a
y
1
]
[
m
n
O
]
\overrightarrow{OA}= \left[\begin{matrix} a_x\\a_y \\0 \end{matrix}\right] \left[\begin{matrix} m \ n \ O \end{matrix}\right] \quad \quad \quad A= \left[\begin{matrix} a_x\\a_y \\1\end{matrix}\right] \left[\begin{matrix} m \ n \ O\end{matrix}\right]
OA=⎣⎡axay0⎦⎤[m n O]A=⎣⎡axay1⎦⎤[m n O]
因此,在齐次坐标中,向量表示为
[
a
x
a
y
0
]
T
\left[\begin{matrix} a_x \ a_y \ 0\end{matrix}\right]^T
[ax ay 0]T,点表示为
[
a
x
a
y
1
]
T
\left[\begin{matrix} a_x \ a_y \ 1\end{matrix}\right]^T
[ax ay 1]T。
3. 采用齐次坐标的意义
由于在图像处理时,经常会对图像进行缩放、旋转和平移。采用矩阵的形式计算这行操作,平移=矩阵相加,旋转=矩阵相乘,缩放=矩阵相乘,将这些矩阵用数学的形式表达: p ′ = R ′ p + T p'=R'p+T p′=R′p+T(式中, p p p 表示原矩阵, R ′ R' R′ 表示旋转缩放矩阵, T T T 表示平移矩阵)。 这些操作是在点的基础上进行变换,所有变换后的点组成的集合即变换后的图像。
p
′
=
R
′
p
+
T
⇒
[
x
′
y
′
z
′
]
=
[
r
11
r
12
r
13
r
21
r
22
r
23
r
31
r
32
r
33
]
×
[
x
y
z
]
+
[
t
x
t
y
t
z
]
p'=R'p+T\Rightarrow \left[\begin{matrix} x'\\y' \\z'\end{matrix}\right]= \left[\begin{matrix} r_{11} \ r_{12} \ r_{13} \\r_{21} \ r_{22}\ r_{23}\\ r_{31} \ r_{32}\ r_{33}\end{matrix}\right]\times \left[\begin{matrix} x\\y \\z\end{matrix}\right]+ \left[\begin{matrix} t_x\\t_y \\t_z\end{matrix}\right]
p′=R′p+T⇒⎣⎡x′y′z′⎦⎤=⎣⎡r11 r12 r13r21 r22 r23r31 r32 r33⎦⎤×⎣⎡xyz⎦⎤+⎣⎡txtytz⎦⎤
为了将矩阵
R
R
R和
T
T
T的运算合二为一,引入齐次矩阵(从笛卡尔坐标系转换到齐次坐标系中),有:
p
′
=
R
′
p
+
T
⇒
h
[
x
′
y
′
z
′
1
]
=
[
r
11
r
12
r
13
t
x
r
21
r
22
r
23
t
x
r
31
r
32
r
33
t
x
0
0
0
1
]
×
h
[
x
y
z
1
]
p'=R'p+T\Rightarrow h\left[\begin{matrix} x'\\y' \\z'\\1\end{matrix}\right]= \left[\begin{matrix} r_{11} \ r_{12} \ r_{13} \ t_x\\r_{21} \ r_{22}\ r_{23}\ t_x\\ r_{31} \ r_{32}\ r_{33}\ t_x\\ 0 \quad 0\quad 0 \quad 1\end{matrix}\right]\times h\left[\begin{matrix} x\\y \\z\\1\end{matrix}\right]
p′=R′p+T⇒h⎣⎢⎢⎡x′y′z′1⎦⎥⎥⎤=⎣⎢⎢⎡r11 r12 r13 txr21 r22 r23 txr31 r32 r33 tx0001⎦⎥⎥⎤×h⎣⎢⎢⎡xyz1⎦⎥⎥⎤
由于是齐次坐标系,所以存在系数 h h h, h h h的变化不会影响该点在笛卡尔坐标系中的值,因为在我们在计算坐标时,需要从齐次坐标系转换到笛卡尔坐标系,需要除以 h h h,当 n + 1 n+1 n+1维的值为1时,可以去掉 h h h,此时齐次坐标中 x , y , z x,y,z x,y,z与笛卡尔坐标中的 x , y , z x,y,z x,y,z值相同。
因此,我们有:
p
′
=
R
′
p
+
T
⇒
p
′
=
[
R
T
0
    
1
]
p
=
M
p
\color{red}{ p'=R'p+T\Rightarrow p'=\left[\begin{matrix} R\ T\\0 \;\; 1 \end{matrix}\right]p=Mp}
p′=R′p+T⇒p′=[R T01]p=Mp
从笛卡尔坐标系转换到齐次坐标系,大大的方便了矩阵的计算。
1.齐次坐标除了上述用法外,还能很好的解释在投影空间中两平行直线相交的问题。