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

文章目录

  • 一、向量和矩阵的基本运算
    • 1、简单变换
        1. 平移变换
        1. 缩放变换
        1. 旋转变换
        1. 一般线性变换
    • 2、齐次坐标
        1. 齐次坐标表示
        1. 2D点的齐次坐标变换
        1. 投影空间 ( x , y , w ) (x, y, w) (x,y,w)
        1. 2D直线的齐次坐标表示
        • a. 直线的参数方程表示
        • b. 直线的法向量和原点距离表示
        1. 叉积算子
        1. 平行线可以相交

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

1、简单变换

x = [ x y ] \boldsymbol{x} =\begin{bmatrix}x\\y\end{bmatrix} x=[xy]

1. 平移变换

x ′ y ′ \] = \[ x y \] + \[ a b \] \\begin{bmatrix}x'\\\\y'\\end{bmatrix} = \\begin{bmatrix}x\\\\y\\end{bmatrix} + \\begin{bmatrix}a\\\\b\\end{bmatrix} \[x′y′\]=\[xy\]+\[ab

将向量 [ a b ] \begin{bmatrix}a\\b\end{bmatrix} [ab]加到 [ x y ] \begin{bmatrix}x\\y\end{bmatrix} [xy]上,得到平移后的新向量 [ x ′ y ′ ] = [ x + a y + b ] \begin{bmatrix}x'\\y'\end{bmatrix} = \begin{bmatrix}x+a\\y+b\end{bmatrix} [x′y′]=[x+ay+b]。其中 a a a和 b b b分别为x方向和y方向的平移量

2. 缩放变换

x ′ y ′ \] = \[ s x 0 0 s y \] \[ x y \] = \[ s x x s y y \] \\begin{bmatrix}x'\\\\y'\\end{bmatrix} = \\begin{bmatrix}s_x \& 0\\\\0 \& s_y\\end{bmatrix}\\begin{bmatrix}x\\\\y\\end{bmatrix} = \\begin{bmatrix}s_xx\\\\s_yy\\end{bmatrix} \[x′y′\]=\[sx00sy\]\[xy\]=\[sxxsyy

通过缩放矩阵 [ s x 0 0 s y ] \begin{bmatrix}s_x & 0\\0 & s_y\end{bmatrix} [sx00sy]乘以 [ x y ] \begin{bmatrix}x\\y\end{bmatrix} [xy],可以得到缩放后的向量 [ x ′ y ′ ] = [ s x x s y y ] \begin{bmatrix}x'\\y'\end{bmatrix} = \begin{bmatrix}s_xx\\s_yy\end{bmatrix} [x′y′]=[sxxsyy]。其中 s x s_x sx和 s y s_y sy分别为x方向和y方向的缩放比例

3. 旋转变换

x ′ y ′ \] = \[ cos ⁡ θ − sin ⁡ θ sin ⁡ θ cos ⁡ θ \] \[ x y \] \\begin{bmatrix}x'\\\\y'\\end{bmatrix} = \\begin{bmatrix}\\cos\\theta \& -\\sin\\theta\\\\\\sin\\theta \& \\cos\\theta\\end{bmatrix}\\begin{bmatrix}x\\\\y\\end{bmatrix} \[x′y′\]=\[cosθsinθ−sinθcosθ\]\[xy

通过旋转矩阵 [ cos ⁡ θ − sin ⁡ θ sin ⁡ θ cos ⁡ θ ] \begin{bmatrix}\cos\theta & -\sin\theta\\\sin\theta & \cos\theta\end{bmatrix} [cosθsinθ−sinθcosθ]乘以 [ x y ] \begin{bmatrix}x\\y\end{bmatrix} [xy],可以得到绕原点逆时针旋转 θ \theta θ角度 后的向量 [ x ′ y ′ ] \begin{bmatrix}x'\\y'\end{bmatrix} [x′y′]。

4. 一般线性变换

x ′ y ′ \] = \[ a b c d \] \[ x y \] = \[ a x + b y c x + d y \] \\begin{bmatrix}x'\\\\y'\\end{bmatrix} = \\begin{bmatrix}a \& b\\\\c \& d\\end{bmatrix}\\begin{bmatrix}x\\\\y\\end{bmatrix} = \\begin{bmatrix}ax+by\\\\cx+dy\\end{bmatrix} \[x′y′\]=\[acbd\]\[xy\]=\[ax+bycx+dy

通过一个2x2变换矩阵 [ a b c d ] \begin{bmatrix}a & b\\c & d\end{bmatrix} [acbd]乘以 [ x y ] \begin{bmatrix}x\\y\end{bmatrix} [xy],可以得到一个新的变换后向量 [ x ′ y ′ ] = [ a x + b y c x + d y ] \begin{bmatrix}x'\\y'\end{bmatrix} = \begin{bmatrix}ax+by\\cx+dy\end{bmatrix} [x′y′]=[ax+bycx+dy],这个变换矩阵可以表示缩放、旋转、错切等线性变换的组合

2、齐次坐标

0. 齐次坐标表示

在使用齐次坐标表示时,我们将n维欧几里得空间中的点 ( x 1 , x 2 , ... , x n ) (x_1, x_2, \dots, x_n) (x1,x2,...,xn)表示为 ( n + 1 ) (n+1) (n+1)维的齐次坐标形式 ( x 1 , x 2 , ... , x n , 1 ) (x_1, x_2, \dots, x_n, 1) (x1,x2,...,xn,1),在原始坐标的基础上添加一个1作为最后一个分量。

  • 将2D点用齐次坐标 [ x y 1 ] \begin{bmatrix}x\\y\\1\end{bmatrix} ⎣⎡xy1⎦⎤表示,即在笛卡尔坐标 [ x y ] \begin{bmatrix}x\\y\end{bmatrix} [xy]的基础上添加一个1作为最后一个分量;
  • 将3D点用齐次坐标 [ x y z 1 ] \begin{bmatrix}x\\y\\z\\1\end{bmatrix} ⎣⎢⎢⎡xyz1⎦⎥⎥⎤表示,即在笛卡尔坐标 [ x y z ] \begin{bmatrix}x\\y\\z\end{bmatrix} ⎣⎡xyz⎦⎤的基础上添加一个1作为最后一个分量。

1. 2D点的齐次坐标变换

  • 变换矩阵:

    a b c d e f 0 0 1 \] \\begin{bmatrix}a \& b \& c\\\\d \& e \& f\\\\0 \& 0 \& 1\\end{bmatrix} ⎣⎡ad0be0cf1⎦⎤

    x ′ y ′ 1 \] = \[ a b c d e f 0 0 1 \] \[ x y 1 \] = \[ a x + b y + c d x + e y + f 1 \] \\begin{bmatrix}x'\\\\y'\\\\1\\end{bmatrix} = \\begin{bmatrix}a \& b \& c\\\\d \& e \& f\\\\0 \& 0 \& 1\\end{bmatrix}\\begin{bmatrix}x\\\\y\\\\1\\end{bmatrix}=\\begin{bmatrix}ax+by+c\\\\dx+ey+f\\\\1\\end{bmatrix} ⎣⎡x′y′1⎦⎤=⎣⎡ad0be0cf1⎦⎤⎣⎡xy1⎦⎤=⎣⎡ax+by+cdx+ey+f1⎦⎤

  • 平移分量 [ c f ] \begin{bmatrix}c\\f\end{bmatrix} [cf]

  • 旋转分量( [ a b d e ] \begin{bmatrix}a & b\\d & e\end{bmatrix} [adbe]构成的2x2子矩阵)

  • 缩放分量(a, b, d, e的大小)

    • 当这些元素的值大于1时,会放大相应方向的坐标;小于1时,会缩小。

2. 投影空间 ( x , y , w ) (x, y, w) (x,y,w)

引入一个三维投影空间,由 x x x、 y y y和 w w w三个坐标构成,用 [ x y w ] \begin{bmatrix}x\\y\\w\end{bmatrix} ⎣⎡xyw⎦⎤表示。

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

  • 左图展示了透视投影 (Perspective projection)的情况,所有投影线从场景中的点汇聚于一个无穷远点,这种投影方式可以提供深度信息和真实的景深感。
    • 透视投影可以提供更真实的视觉效果,表达式为:

x ′ y ′ w ′ \] = \[ a b c d e f g h i \] \[ x y w \] \\begin{bmatrix}x'\\\\y'\\\\w'\\end{bmatrix} = \\begin{bmatrix}a\&b\&c\\\\d\&e\&f\\\\g\&h\&i\\end{bmatrix}\\begin{bmatrix}x\\\\y\\\\w\\end{bmatrix} ⎣⎡x′y′w′⎦⎤=⎣⎡adgbehcfi⎦⎤⎣⎡xyw⎦⎤ * 右图展示了**正交投影** (Orthographic projection)的情况,投影线都是平行的,没有汇聚点,无法获得真实的景深感,但可以保持投影后物体的形状不变形。 * 正交投影常用于工程制图等需要保持形状的场合,表达式为: \[ x ′ y ′ w ′ \] = \[ a b 0 c d 0 0 0 1 \] \[ x y w \] \\begin{bmatrix}x'\\\\y'\\\\w'\\end{bmatrix} = \\begin{bmatrix}a\&b\&0\\\\c\&d\&0\\\\0\&0\&1\\end{bmatrix}\\begin{bmatrix}x\\\\y\\\\w\\end{bmatrix} ⎣⎡x′y′w′⎦⎤=⎣⎡ac0bd0001⎦⎤⎣⎡xyw⎦⎤   这种投影空间和投影变换在计算机图形学中被广泛使用,用于将三维物体投影到二维平面上进行显示。 #### 3. 2D直线的齐次坐标表示 ##### a. 直线的参数方程表示 l = ( a , b , c ) x ⋅ l = a x + b y + c = 0 l = (a, b, c)\\\\x\\cdot l = ax + by + c = 0 l=(a,b,c)x⋅l=ax+by+c=0其中 ( a , b , c ) (a, b, c) (a,b,c)是直线的系数,任意一点 ( x , y ) (x, y) (x,y)代入方程,结果为0,则该点位于该直线上。 ##### b. 直线的法向量和原点距离表示 ![在这里插入图片描述](https://file.jishuzhan.net/article/1769551040857772034/a3fcb004e07aab2f02f04190fc147410.webp) l = ( n x , n y , d ) = ( n ⃗ , d ) with ∥ n ⃗ ∥ = 1 l = (n_x, n_y, d) = (\\vec{n}, d) \\quad \\text{with} \\ \\\|\\vec{n}\\\| = 1 l=(nx,ny,d)=(n ,d)with ∥n ∥=1其中 n ⃗ = ( n x , n y ) = ( cos ⁡ θ , sin ⁡ θ ) \\vec{n} = (n_x, n_y) = (\\cos\\theta, \\sin\\theta) n =(nx,ny)=(cosθ,sinθ)表示直线的法向量,即垂直于直线方向的单位向量, d d d表示直线到原点的有符号距离。 这种表示直观地描述了直线的性质: * n ⃗ \\vec{n} n 给出了直线的方向 * d d d给出了直线到原点的距离,取正负号表示直线在原点的两侧 法向量和原点距离表示对于直线的各种几何运算都很有用,例如求直线交点、判断点和直线的位置关系等。通过矩阵变换,可以很自然地对直线进行旋转、平移等操作。 #### 4. 叉积算子 1. 两条直线的表示: 给定两条直线 l \~ 1 \\tilde{l}_1 l\~1和 l \~ 2 \\tilde{l}_2 l\~2的齐次坐标表示。 2. 交点的计算: 两条直线 l \~ 1 \\tilde{l}_1 l\~1和 l \~ 2 \\tilde{l}_2 l\~2的交点 x \~ \\tilde{x} x\~可以通过它们的外积(叉积)求得: x \~ = l \~ 1 × l \~ 2 \\tilde{x} = \\tilde{l}_1 \\times \\tilde{l}_2 x\~=l\~1×l\~2 其中,外积的计算方式为: l \~ 1 = ( x \~ 1 , y \~ 1 , a \~ 1 ) \\tilde{l}_1 = (\\tilde{x}_1, \\tilde{y}_1, \\tilde{a}_1) l\~1=(x\~1,y\~1,a\~1) l \~ 2 = ( x \~ 2 , y \~ 2 , a \~ 2 ) \\tilde{l}_2 = (\\tilde{x}_2, \\tilde{y}_2, \\tilde{a}_2) l\~2=(x\~2,y\~2,a\~2) x \~ = l \~ 1 × l \~ 2 = \\tilde{x} = \\tilde{l}_1 \\times \\tilde{l}_2 = x\~=l\~1×l\~2= 这种利用直线的齐次坐标表示求交点的方法,可以自然地推广到三维空间,求两条三维直线或平面的交点。同理,在三维情况下,交点坐标为两个直线或平面的齐次坐标外积。 #### 5. 平行线可以相交 * 两条直线在非齐次坐标系下的方程组表示: { A x + B y + C = 0 A x + B y + D = 0 \\begin{cases} Ax + By + C = 0\\\\ Ax + By + D = 0 \\end{cases} {Ax+By+C=0Ax+By+D=0 * 将这两条直线方程转换为齐次坐标表示: { A x w + B y w + C = 0 A x w + B y w + D = 0    ⟺    { A x + B y + C w = 0 A x + B y + D w = 0 \\begin{cases} A \\dfrac{x}{w} + B \\dfrac{y}{w} + C = 0\\\\ A \\dfrac{x}{w} + B \\dfrac{y}{w} + D = 0 \\end{cases} \\quad\\iff\\quad \\begin{cases} Ax + By + Cw = 0\\\\ Ax + By + Dw = 0 \\end{cases} ⎩⎨⎧Awx+Bwy+C=0Awx+Bwy+D=0⟺{Ax+By+Cw=0Ax+By+Dw=0 在这种表示下,两条直线的齐次坐标分别为 ( A , B , C ) (A, B, C) (A,B,C)和 ( A , B , D ) (A, B, D) (A,B,D)。 * 通过分析可以发现,当 w = 0 w=0 w=0时,对应的是无穷远点,**两条直线在这个点处相交**

相关推荐
阿坡RPA2 小时前
手搓MCP客户端&服务端:从零到实战极速了解MCP是什么?
人工智能·aigc
用户27784491049932 小时前
借助DeepSeek智能生成测试用例:从提示词到Excel表格的全流程实践
人工智能·python
机器之心2 小时前
刚刚,DeepSeek公布推理时Scaling新论文,R2要来了?
人工智能
算AI4 小时前
人工智能+牙科:临床应用中的几个问题
人工智能·算法
JavaEdge在掘金4 小时前
ssl.SSLCertVerificationError报错解决方案
python
我不会编程5555 小时前
Python Cookbook-5.1 对字典排序
开发语言·数据结构·python
凯子坚持 c5 小时前
基于飞桨框架3.0本地DeepSeek-R1蒸馏版部署实战
人工智能·paddlepaddle
老歌老听老掉牙5 小时前
平面旋转与交线投影夹角计算
python·线性代数·平面·sympy
满怀10155 小时前
Python入门(7):模块
python
无名之逆5 小时前
Rust 开发提效神器:lombok-macros 宏库
服务器·开发语言·前端·数据库·后端·python·rust