【计算机视觉】二、图像形成:1、向量和矩阵的基本运算:线性变换与齐次坐标

2024-07-30 12:43:44 浏览数 (2)

一、向量和矩阵的基本运算

1、简单变换

boldsymbol{x} =begin{bmatrix}x\yend{bmatrix}
1. 平移变换
begin{bmatrix}x'\y'end{bmatrix} = begin{bmatrix}x\yend{bmatrix} begin{bmatrix}a\bend{bmatrix}

  将向量

begin{bmatrix}a\bend{bmatrix}

加到

begin{bmatrix}x\yend{bmatrix}

上,得到平移后的新向量

begin{bmatrix}x'\y'end{bmatrix} = begin{bmatrix}x a\y bend{bmatrix}

。其中

a

b

分别为x方向和y方向的平移量

2. 缩放变换
begin{bmatrix}x'\y'end{bmatrix} = begin{bmatrix}s_x & 0\0 & s_yend{bmatrix}begin{bmatrix}x\yend{bmatrix} = begin{bmatrix}s_xx\s_yyend{bmatrix}

  通过缩放矩阵

begin{bmatrix}s_x & 0\0 & s_yend{bmatrix}

乘以

begin{bmatrix}x\yend{bmatrix}

,可以得到缩放后的向量

begin{bmatrix}x'\y'end{bmatrix} = begin{bmatrix}s_xx\s_yyend{bmatrix}

。其中

s_x

s_y

分别为x方向和y方向的缩放比例

3. 旋转变换
begin{bmatrix}x'\y'end{bmatrix} = begin{bmatrix}costheta & -sintheta\sintheta & costhetaend{bmatrix}begin{bmatrix}x\yend{bmatrix}

  通过旋转矩阵

begin{bmatrix}costheta & -sintheta\sintheta & costhetaend{bmatrix}

乘以

begin{bmatrix}x\yend{bmatrix}

,可以得到绕原点逆时针旋转

theta

角度后的向量

begin{bmatrix}x'\y'end{bmatrix}

4. 一般线性变换
begin{bmatrix}x'\y'end{bmatrix} = begin{bmatrix}a & b\c & dend{bmatrix}begin{bmatrix}x\yend{bmatrix} = begin{bmatrix}ax by\cx dyend{bmatrix}

  通过一个2x2变换矩阵

begin{bmatrix}a & b\c & dend{bmatrix}

乘以

begin{bmatrix}x\yend{bmatrix}

,可以得到一个新的变换后向量

begin{bmatrix}x'\y'end{bmatrix} = begin{bmatrix}ax by\cx dyend{bmatrix}

,这个变换矩阵可以表示缩放、旋转、错切等线性变换的组合

2、齐次坐标

0. 齐次坐标表示

  在使用齐次坐标表示时,我们将n维欧几里得空间中的点

(x_1, x_2, dots, x_n)

表示为

(n 1)

维的齐次坐标形式

(x_1, x_2, dots, x_n, 1)

,在原始坐标的基础上添加一个1作为最后一个分量。

  • 将2D点用齐次坐标
begin{bmatrix}x\y\1end{bmatrix}

表示,即在笛卡尔坐标

begin{bmatrix}x\yend{bmatrix}

的基础上添加一个1作为最后一个分量;

  • 将3D点用齐次坐标
begin{bmatrix}x\y\z\1end{bmatrix}

表示,即在笛卡尔坐标

begin{bmatrix}x\y\zend{bmatrix}

的基础上添加一个1作为最后一个分量。

1. 2D点的齐次坐标变换
  • 变换矩阵:
begin{bmatrix}a & b & c\d & e & f\0 & 0 & 1end{bmatrix}
  • 变换结果
begin{bmatrix}x'\y'\1end{bmatrix} = begin{bmatrix}a & b & c\d & e & f\0 & 0 & 1end{bmatrix}begin{bmatrix}x\y\1end{bmatrix}=begin{bmatrix}ax by c\dx ey f\1end{bmatrix}

该变换矩阵包含了三个部分:

  • 平移分量
begin{bmatrix}c\fend{bmatrix}
  • 旋转分量(
begin{bmatrix}a & b\d & eend{bmatrix}

构成的2x2子矩阵)

  • 缩放分量(a, b, d, e的大小)
    • 当这些元素的值大于1时,会放大相应方向的坐标;小于1时,会缩小。
2. 投影空间
(x, y, w)

  引入一个三维投影空间,由

x

y

w

三个坐标构成,用

begin{bmatrix}x\y\wend{bmatrix}

表示。 其中

w=0

表示无穷远的点,即所有投影线的汇聚点所在位置。

  • 左图展示了透视投影(Perspective projection)的情况,所有投影线从场景中的点汇聚于一个无穷远点,这种投影方式可以提供深度信息和真实的景深感。
    • 透视投影可以提供更真实的视觉效果,表达式为:
begin{bmatrix}x'\y'\w'end{bmatrix} = begin{bmatrix}a&b&c\d&e&f\g&h&iend{bmatrix}begin{bmatrix}x\y\wend{bmatrix}
  • 右图展示了正交投影(Orthographic projection)的情况,投影线都是平行的,没有汇聚点,无法获得真实的景深感,但可以保持投影后物体的形状不变形。
    • 正交投影常用于工程制图等需要保持形状的场合,表达式为:
    begin{bmatrix}x'\y'\w'end{bmatrix} = begin{bmatrix}a&b&0\c&d&0\0&0&1end{bmatrix}begin{bmatrix}x\y\wend{bmatrix}

  这种投影空间和投影变换在计算机图形学中被广泛使用,用于将三维物体投影到二维平面上进行显示。

3. 2D直线的齐次坐标表示
a. 直线的参数方程表示
l = (a, b, c)\xcdot l = ax by c = 0

其中

(a, b, c)

是直线的系数,任意一点

(x, y)

代入方程,结果为0,则该点位于该直线上。

b. 直线的法向量和原点距离表示
l = (n_x, n_y, d) = (vec{n}, d) quad text{with} |vec{n}| = 1

其中

vec{n} = (n_x, n_y) = (costheta, sintheta)

表示直线的法向量,即垂直于直线方向的单位向量,

d

表示直线到原点的有符号距离。

这种表示直观地描述了直线的性质:

vec{n}

给出了直线的方向

d

给出了直线到原点的距离,取正负号表示直线在原点的两侧

法向量和原点距离表示对于直线的各种几何运算都很有用,例如求直线交点、判断点和直线的位置关系等。通过矩阵变换,可以很自然地对直线进行旋转、平移等操作。

4. 叉积算子
  1. 两条直线的表示: 给定两条直线
tilde{l}_1

tilde{l}_2

的齐次坐标表示。

  1. 交点的计算: 两条直线
tilde{l}_1

tilde{l}_2

的交点

tilde{x}

可以通过它们的外积(叉积)求得:

tilde{x} = tilde{l}_1 times tilde{l}_2

其中,外积的计算方式为:

tilde{l}_1 = (tilde{x}_1, tilde{y}_1, tilde{a}_1)
tilde{l}_2 = (tilde{x}_2, tilde{y}_2, tilde{a}_2)
tilde{x} = tilde{l}_1 times tilde{l}_2 =

这种利用直线的齐次坐标表示求交点的方法,可以自然地推广到三维空间,求两条三维直线或平面的交点。同理,在三维情况下,交点坐标为两个直线或平面的齐次坐标外积。

5. 平行线可以相交
  • 两条直线在非齐次坐标系下的方程组表示:
begin{cases} Ax By C = 0\ Ax By D = 0 end{cases}
  • 将这两条直线方程转换为齐次坐标表示:
begin{cases} A dfrac{x}{w} B dfrac{y}{w} C = 0\ A dfrac{x}{w} B dfrac{y}{w} D = 0 end{cases} quadiffquad begin{cases} Ax By Cw = 0\ Ax By Dw = 0 end{cases}

在这种表示下,两条直线的齐次坐标分别为

(A, B, C)

(A, B, D)

  • 通过分析可以发现,当
w=0

时,对应的是无穷远点,两条直线在这个点处相交

0 人点赞