仿射变换和透视变换

article/2025/10/3 21:13:44

透视变换

  • 1. 欧式变换
  • 2. 相似变换
  • 3. 仿射变换
  • 4. 射影变换/透视变换
  • 概念
  • OpenCV 实现

在这里插入图片描述
3D 空间存在集中变换方式。

1. 欧式变换

欧式变换保持了向量的长度和夹角,相当于我们把一个刚体原封不动地进行了移动或旋转,不改变它自身的样子,其矩阵表示为:
T E = [ R t 0 T 1 ] \boldsymbol{T}_E=\left[\begin{array}{ll} \boldsymbol{R} & \boldsymbol{t} \\ \boldsymbol{0}^{\mathrm{T}} & 1 \end{array}\right] TE=[R0Tt1]

2. 相似变换

相似变换比欧式变换多了一个自由度,它允许物体进行均匀缩放,其矩阵表示为:
T S = [ s R t 0 T 1 ] \boldsymbol{T}_S=\left[\begin{array}{ll} s \boldsymbol{R} & \boldsymbol{t} \\ \boldsymbol{0}^{\mathrm{T}} & 1 \end{array}\right] TS=[sR0Tt1]

注意,旋转部分多了一个缩放因子 s s s,表示我们在对向量旋转之后,可以在 x , y , z x, y, z x,y,z 三个坐标上进行均匀缩放。由于含有缩放,相似变换不再保持图形的面积不变。你可以想象一个边长为 1 1 1 的立方体通过相似变换后,变成边长为 10 10 10 的样子 (但仍然是立方体)。三维相似变换的集合也叫作相似变换群,记作 Sim ⁡ ( 3 ) \operatorname{Sim}(3) Sim(3)

3. 仿射变换

仿射变换的矩阵形式如下:
T A = [ A t 0 T 1 ] . \boldsymbol{T}_A=\left[\begin{array}{cc} \boldsymbol{A} & \boldsymbol{t} \\ \boldsymbol{0}^{\mathrm{T}} & 1 \end{array}\right] . TA=[A0Tt1].

与欧式变换不同的是,仿射变换只要求 A \boldsymbol{A} A 是一个可逆矩阵,而不必是正交矩阵( R R T = I RR^T=I RRT=I)。仿射变换也叫正交投影。经过仿射变换之后,立方体就不再是方的了,但是各个面仍然是平行四边形(自由度:9+3=12)。

4. 射影变换/透视变换

射影变换是最一般的变换,它的矩阵形式为:
T P = [ A t a T v ] . \boldsymbol{T}_P=\left[\begin{array}{ll} \boldsymbol{A} & \boldsymbol{t} \\ \boldsymbol{a}^{\mathrm{T}} & v \end{array}\right] . TP=[AaTtv].

它的左上角为可逆矩阵 A \boldsymbol{A} A,右上角为平移 t \boldsymbol{t} t,左下角为缩放 a T \boldsymbol{a}^{\mathrm{T}} aT由于采用了齐次坐标,当 v ≠ 0 v \neq 0 v=0 时,我们可以对整个矩阵除以 v v v 得到一个右下角为 1 1 1 的矩阵;否则得到右下角为 0 0 0 的矩阵。因此, 2 D 2 \mathrm{D} 2D 的射影变换一共有 8 8 8 个自由度,3D 则共有 15 15 15 个自由度。射影变换是现在讲过的变换中,形式最为一般的。从真实世界到相机照片的变换可以看成一个射影变换。读者可以想象一个原本方形的地板砖,在照片中是什么样子:首先,它不再是方形的。由于近大远小的关系,它甚至不是平行四边形,而是一个不规则的四边形。

从真实世界倒相机照片的变换是一个射影变换。如果相机的焦距为无穷远,那么这个变换为仿射变换。

概念

透视变换 是指利用透视中心像点目标点 三点共线的条件,按透视旋转定律使承影面(透视面)绕迹线(透视轴)旋转某一角度,破坏原有的投影光线束,仍能保持承影面上投影几何图形不变的变换。简而言之,就是将一个平面通过一个投影矩阵投影到指定平面上

在这里插入图片描述

透视是图像中的一种现象,物体距离观察点(例如镜头)越远,看起来就越小,平行的直线在最远处似乎汇聚到同一个点上(vanishing point)。

在这里插入图片描述
从数学的角度,我们可以这样描绘透视,在现实世界的 x , y , z x,y,z x,y,z 坐标系中,物体 z z z 坐标值越大,或其与相机的距离越大,它在二维图像中就显得越小。

本质上而言,透视变换改变了对象点的表观 z z z 坐标,从而改变了该对象的二维图像表示,透视变换扭曲了图像,并有效地将物体推近或推离镜头,以改变表观视角。

例如,我们可以使用透视变换来放大距离较远的物体,这种变换非常有用,因为某些任务,例如计算车道线的曲率,通过图像的鸟瞰图视角要更容易进行。

在这里插入图片描述
进行透视变换,需要选择四个点:这些点定义了一个长方形,位于这幅图像的同一平面,四个点就足以确定从一种视角到另一种视角的线性变换了+四个点在变换后出现的位置,变换后的图像被称为扭转图像(wraped image)
在这里插入图片描述

OpenCV 实现

  1. 首先在源图像和扭转的目标图像中分别手动创建四个点,这些点可定义透视变换。

  2. 透视变换通过一个映射矩阵表示,由 getPerspectiveTransform 函数返回,这个函数接收四个源图像点坐标以及对应的目标图像点坐标,并返回透视变换的映射矩阵。还可以用反向透视变换回复这个图像----只需在这个函数中对调源图像点和目标图像点即可。

M = cv2.getPerspectiveTransform(src, dst)
Minv = cv2.getPerspectiveTransform(dst, src)
  1. 接下来,只需对原始图像使用变换矩阵 M M M 就能得到变换后的扭转图像。这一步调用 wrapPerspective 函数来进行。 这个函数的输入包括源图像、透视矩阵 M M M 以及想得到的扭转图像的尺寸,此外,扭曲视角还需考虑,如何内插和填充在扭转图像过程中丢失的点
warped = cv2.warpPerspective(img, M, img_size, flags=cv2.INTER_LINEAR)

http://chatgpt.dhexx.cn/article/4q5WLLUZ.shtml

相关文章

基于OpenCV的图像透视变换详解(从理论到实现再到实践)

一、仿射变换与透视变换 一直无法理解两种仿射变换与透视变换的区别,因此详细学习了两种变换的具体细节,重新书写了公式,并给出自己的一些看法。 1.仿射变换 可以认为,仿射变换是透视变换的一种特例。 仿射变换是一种二维坐标到二…

透视变换(perspective transformation)

透视变换(Perspective Transformation)是将图片投影到一个新的视平面(Viewing Plane),也称作投影映射(Projective Mapping)。如下图所示 透视变换 透视变换的原理和公式推导见如下博客 【图像处理】透视变换 Perspective Transformation 【OpenCV】透视变换 Perspe…

OpenCV 透视变换

OpenCV 透视变换 1. 简介2. 仿射变换2.1. 平移2.2. 旋转2.3. 放缩2.4. 错切2.5. 仿射变换 3. 透视变换 1. 简介 汽车的360度全景影像,从拍照视角变成鸟瞰图 这种变换常常用到透视变换 在了解透视变换前,需要了解一下其他的变换,包括 平移&am…

深入探索透视投影变换

深入探索透视投影变换 最近更新:2013年11月22日 -Twinsen编写 -本人水平有限,疏忽错误在所难免,还请各位数学高手、编程高手不吝赐教 -email: popyynetease.com -B站专栏: https://b23.tv/oWsl6PD 透视投影是3D固定流水线的重要组…

图像透视变换原理及实现

上篇博客讲解了图像的仿射变换原理及实现,这篇博客讲讲透视变换的原理和实现,透视变换也叫投影变换,仿射变换是透视变换的特例。主要是透视变换能保持“直线性”,即原图像里面的直线,经透视变换后仍为直线。下面给出数…

(十四)透视变换

透视变换(Perspective Transformation) 一 图像变换与平面坐标系的关系 1、旋转: 2、平移: 3、刚体变换 4、仿射变换 5、投影变换(单应性变换) 6 总结一下: 1、刚体变换:平移旋转,只改变物体…

图像畸变矫正——透视变换

图像畸变矫正——透视变换 由于相机制造精度以及组装工艺的偏差引入的畸变,或者由于照片拍摄时的角度、旋转、缩放等问题, 可能会导致原始图像的失真,如果要修复这些失真,我们可以通过透视变换,对图像进行畸变矫正。 …

透视变换原理实例代码详解

导读 在上篇文章中,我们介绍了仿射变换,我们只需要通过一个两行三列的变换矩阵M就能够对图像实现平移、缩放、翻转、旋转操作。我们发现这些变换其实都属于平面变换,如果我们想要进行空间变换呢? 将上图的扑克牌单独提取出来&am…

[解疑]图像、矩阵的二维空间变换

本文经过参考多个文章整理而成,感谢各位博主的无私分享。 综述 图像(2维平面)到图像(2维平面)的四种变换包括:等距变换,相似变换,仿射变换,投影变换。对图像的几何变换…

数字图像处理(入门篇)十四 透视变换

目录 一 透视变换 二 实践 (1)代码 (2)结果图 一 透视变换 现实生活中的空间是三维的,图像中的物体存在近大远小的特征,这种畸变仿射变换不能矫正。因此,我们需要使用到三维空间的变化&…

【图像理论】透视变换

透视变换: 定义:本质是将图像投影到一个新的视平面。仿射变换可以理解为透视变换的特殊形式。利用透视中心、像点、目标点三点共线的条件,按透视旋转定律使承影面(透视面)绕迹线(透视轴)旋转某…

Python图像处理之透视变换

1 引言 如果你想对图像进行校准,那么透视变换是非常有效的变换手段。透视变换的定义为将图像投影到一个新的视平面,通常也被称之为投影映射。 2 公式 一般来说,通用的图像变换公式如下所示: 上述公式中,u,v代表原…

维特比算法 python_维特比算法理解与实现(Python)

前言 写这篇文章就是想以通俗易懂的方式解析维特比算法,最后给出Python代码的实现。下面的公式和原理均出自《统计学习方法》。 算法的原理 算法的原理1.PNG 算法的原理2.PNG 上面写了一大堆,意思就是:每个时刻选择出概率最大的路径&#xf…

viterbi-algorithm 维特比算法的例子解析

维特比算法的目的: 寻找最可能的隐藏状态序列(Finding most probable sequence of hidden states) 关于原理的讲解可以参考下面两篇文章,讲的比较清楚 小白给小白详解维特比算法1. 小白给小白详解维特比算法2. 本文通过分析维特比算法的例子&#xff0c…

维特比算法代码

维特比算法实现python语言版 本文主要写一个关于维特比算法的代码,具体理论请参考一文搞懂HMM(隐马尔可夫模型): HMM(隐马尔可夫模型)是用来描述隐含未知参数的统计模型,举一个经典的例子&…

维特比算法学习

参考文章1: 简直不要太通俗易懂,这篇文章,很值得看 参考文章2: 解释一些概念性的问题,我把他的一些内容写下来 维特比(Viterbi)算法的核心是动态规划。 对于 HMM 而言,其中一个重要的任务就是要找出最有…

5分钟理解维特比算法

安德鲁维特比老人家发明了维特比算法,用非常巧妙的方法简化了隐马尔可夫第二个问题运算过程。维特比先生后来发明了CDMA技术并与人一起创办了高通公司,高通现在是通信巨头,不生产产品却每年收取大量的专利费。 下面我们用简单的例子&#xff…

Viterbi-Algorithm(维特比算法)

Viterbi-Algorithm 维特比算法是一个特殊但应用最广的动态规划算法。利用动态规划,可以解决任何一个图中的最短路径问题。而维特比算法是针对一个特殊的图-篱笆网了(Lattice)的有向图最短路径问题而提出来的。它之所以重要,是因为…

NLP学习笔记06-维特比算法

一序 本文属于NLP学习笔记系列。 上一篇整理了前向最大匹配算法与所有组合算法缺点(时间复杂度太高了)。 二 维特比算法 log(x*y*z) log(x)log(y)log(z) 概率上为了避免小数练乘出现的超范围溢出,改用log,改用-log,使得原来求概…

HMM-维特比算法

HMM-维特比算法(viterbi) HMM回顾隐马科夫链解法:维特比算法(Viterbi) HMM回顾 最终的公式可以解释主要分为两个部分: P(xi|yi),发射概率,字面意思是从一个词性中发射/生成出某一个…