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

news2024/9/25 3:19:24

文章目录

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

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

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} [xy]=[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} [xy]=[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} [xy]=[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} [xy]=[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} [xy]=[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} [xy]

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} [xy]=[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} [xy]=[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} xy1=ad0be0cf1xy1=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} xyw=adgbehcfixyw

  • 右图展示了正交投影(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} xyw=ac0bd0001xyw

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

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)xl=ax+by+c=0其中 ( a , b , c ) (a, b, c) (a,b,c)是直线的系数,任意一点 ( x , y ) (x, y) (x,y)代入方程,结果为0,则该点位于该直线上。

b. 直线的法向量和原点距离表示

在这里插入图片描述

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时,对应的是无穷远点,两条直线在这个点处相交

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1517724.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

React——react 的基本使用

前提:安装全局的脚手架,通过create-creat-app 项目名,我们创建好一个新项目,cd进去,通过npm start去运行该项目 注意:简单看下demo的配置,在根目录我们可以看到,没有任何webpack的…

html5cssjs代码 018颜色表

html5&css&js代码 018颜色表 一、代码二、效果三、解释 这段代码展示了一个基本的颜色表&#xff0c;方便参考使用&#xff0c;同时也应用了各种样式应用方式。 一、代码 <!DOCTYPE html> <html lang"zh-cn"> <head><title>编程笔记…

15. jwt认证中间件

在上一篇登录功能的实现中&#xff0c;我们使用了jwt作为鉴权组件&#xff0c;其中登录后会颁发token。前端在访问后续请求时&#xff0c;可以带上这个token。对于一些需要权限校验的请求&#xff0c;我们就需要验证这个token&#xff0c;从token中获取到用户id&#xff08;有了…

8-图像放大

其实&#xff0c;就是开辟一个zoomwidth&#xff0c;zoomheight的内存&#xff0c;再分别赋值即可。 void CDib::Maginify(float xZoom, float yZoom) { //指向原图像指针 LPBYTE p_data GetData(); //指向原像素的指针 LPBYTE lpSrc; //指向缩放图像对应像素的指针 LPBYTE l…

实验二 基本搜索技术 五星图案节点填上数字+遍历所有黑点+门牌号

目的&#xff1a; 1. 掌握递归和排序 2. 掌握BFS与队列 3. 掌握DFS和递归 4. 熟悉并理解回溯问题 实验内容&#xff1a; 1.在五星图案节点填上数字&#xff1a;1~12&#xff0c;不包括7和11。 要求每条直线上数字和相等。 如图就是一个恰当的填法。 请搜索所有可能的填…

SpringMVC请求、响应和拦截器的使用

SpringMVC请求 RequestMapping注解 RequestMapping注解的作用是建立请求URL和处理方法之间的对应关系 RequestMapping注解可以作用在方法和类上 1. 作用在类上&#xff1a;第一级的访问目录 2. 作用在方法上&#xff1a;第二级的访问目录 3. 细节&#xff1a;路径可以不编写…

在Django中使用PyJWT实现登录及验证功能

目录 1、安装PyJWT 2、对信息加密及解密 3、配置登录视图和及url 4、登录装饰器 5、在验证有登录权限的的视图中登录 PyJWT的使用 1、安装PyJWT pip isntall pyjwt 2、对信息加密及解密 import jwt import datetime from jwt import exceptions# 加密盐 JWT_SALT &qu…

深入探索Java中的MarkWord与锁优化机制——无锁、偏向锁、自旋锁、重量级锁

引言 在Java并发编程领域&#xff0c;有效管理对共享资源的访问显得尤为关键。为了保障线程安全&#xff0c;Java虚拟机&#xff08;JVM&#xff09;引入了一系列精妙的锁机制&#xff0c;这其中的核心概念就是Java对象头中的MarkWord。本文将详尽解析MarkWord的作用&#xff…

CVPR2024 | 大核卷积新高度101x101,美团提出PeLK

https://arxiv.org/pdf/2403.07589.pdf 本文概述 最近&#xff0c;一些大核卷积网络以吸引人的性能和效率进行了反击。然而&#xff0c;考虑到卷积的平方复杂度&#xff0c;扩大内核会带来大量的参数&#xff0c;而大量的参数会引发严重的优化问题。由于这些问题&#xff0c;当…

code摘录日记[矩阵变元素,变列向量,3D表面图,table行列设置] Matlab

矩阵变元素&#xff0c;变列向量 W1(Z1 < Z2) nan; % Z1,Z2 all matrix,Only plot points where Z1 > Z2;Z1 < Z2位置值填为NaNx x(:); % Now x is a 30-by-1 vector; matrix变列vector技巧3D表面图 hand figure; % Handle to the figure, for more plotting later…

QComboBox相关的qss学习

QT有关QCobobox控件的样式设置&#xff08;圆角、下拉框&#xff0c;向上展开、可编辑、内部布局等&#xff09;_qcombobox样式-CSDN博客 原始图&#xff1a; 红色边框&#xff1a; QComboBox{ border:2px solid rgb(255, 85, 0); } 绿色背景&#xff1a; QComboBox{ border…

[云原生] Prometheus自动服务发现部署

一、部署服务发现 1.1 基于文件的服务发现 基于文件的服务发现是仅仅略优于静态配置的服务发现方式&#xff0c;它不依赖于任何平台或第三方服务&#xff0c;因而也是最为简单和通用的实现方式。 Prometheus Server 会定期从文件中加载 Target 信息&#xff0c;文件可使用 YAM…

App Inventor 2 Clipboard 拓展:实现剪贴板的复制粘贴功能

效果如下&#xff1a; 此 Clipboard 拓展由中文网开发及维护&#xff0c;最新版本 v1.0&#xff0c;基于 TaifunClipboard 开发。 使用方法 属性及方法很简单&#xff0c;默认操作成功后显示提示信息&#xff0c;SuppressToast设置为 假 后&#xff0c;则不显示提示信息。 经测…

中创ET4410台式电桥固件升级工具(修复了列表扫描的BUG)

中创ET4410台式LCR数字电桥固件升级工具和最新版固件&#xff08;修复了列表扫描的BUG&#xff09; 中创ET4410 台式LCR数字电桥 简单开箱测评&#xff1a;https://blog.zeruns.tech/archives/763.html 之前买的中创ET4410台式LCR数字电桥固件有BUG&#xff08;胜利的VC4090C…

OpenCV实战(33)——OpenCV与深度学习的碰撞

OpenCV实战&#xff08;33&#xff09;——OpenCV与深度学习的碰撞 0. 前言1. 深度学习和卷积神经网络2. 使用深度学习进行人脸检测2.1 SSD 简介2.2 使用 SSD 执行人脸检测 3. 完整代码小结系列链接 0. 前言 深度学习是机器学习的一个子领域&#xff0c;基于传统的神经网络和卷…

6-LINUX-- C 程序的编译与调试

一.环境搭建 1.gcc的安装 1>.切换到管理员模式 sudo su ----> 输入密码 2>.apt install gcc //C语言的编译环境 3>.apt install g //c编译环境的搭建 4>.install update //软件升级 2.gcc分步编译链接 &#xff08;1&#xff09;预编译 gcc -E…

如何配置Apache的反向代理

目录 前言 一、反向代理的工作原理 二、Apache反向代理的配置 1. 安装Apache和相关模块 2. 配置反向代理规则 3. 重启Apache服务器 三、常见的使用案例 1. 负载均衡 2. 缓存 3. SSL加密 总结 前言 随着Web应用程序的不断发展和扩展&#xff0c;需要处理大量的请求和…

DDos攻击如何被高防服务器有效防范?

德迅云安全-领先云安全服务与解决方案提供商 什么是DDos攻击&#xff1f; DDos攻击是一种网络攻击手段&#xff0c;旨在通过使目标系统的服务不可用或中断&#xff0c;导致无法正常使用网络服务。DDos攻击可以采取多种方式实施&#xff0c;包括洪水攻击、压力测试、UDP Flood…

Python基于大数据的豆瓣电影分析,豆瓣电影可视化系统,附源码

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝12W、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;…

Xcode 15.3 Archive失败

Xcode 15.3 Archive失败 背景 升级 Xcode 到 15.3&#xff0c;真机运行正常。打包的时候发现 Archive 失败。 提示&#xff1a; Call parameter type does not match function signature! 仔细看报错里是和HandyJSON相关的提示。 解决 起初以为和 Pod 库有关系&#xff0c;…