仿射变换和透视变换详解

article/2025/10/3 19:45:06

仿射变换和透视变换都是计算机视觉中重要的图像变换操作,然而也困扰了我很久,通过找寻很多资料总算大致弄明白了这两个变换。

仿射变换

旋转和平移都是仿射变换的特殊形式。
wiki详细解释: https://en.wikipedia.org/wiki/Affine_transformation
变换示例:
OpenCV中提供warpAffine函数用来实现仿射变换
该函数要求提供用来进行仿射变换的矩阵(2x3),如果不知道该变换矩阵,可以结合两幅图像上三对对应点利用 getAffineTransform 函数求得仿射变换矩阵。
OpenCV实现仿射变换官网介绍: https://docs.opencv.org/2.4/doc/tutorials/imgproc/imgtrans/warp_affine/warp_affine.html#warp-affine
http://opencv-python-tutroals.readthedocs.io/en/latest/py_tutorials/py_imgproc/py_geometric_transformations/py_geometric_transformations.html


透视变换

透视变换(也称为同态映射Homography或单应性) 的本质是将图像投影到一个新的视平面。仿射变换可以理解为透视变换的特殊形式。
数学表达式: https://www.cnblogs.com/liekkas0626/p/5262942.html
wiki详细解释: https://en.wikipedia.org/wiki/Homography
一幅图像就是一个像素坐标系下的各个带有像素值的坐标点,而透视变换可以理解为就是将一幅图像中的这些坐标点完成了一个坐标转换,将它们的坐标变换到了其他位置,从而实现了变换了图像视角的效果。因此,透视变换和相机标定等概念其实并没有什么内在关系。
在车道线检测中的“相机标定”过程,其实就是做了一个透视变换,即相机画面图像和一幅 假想的地面图像 这两幅图像之间的变换关系,所谓假想的地面图像,即将实际地面上各点距离(离车辆后轴中心点)按一个设定的尺度放到一张图像上(鸟瞰图),此时只要是在这个地平面上的点,通过透视变换都可以得到其在相机图像上的点的坐标。因为假想的是在地平面上的点做的透视变换,所以此时只有位于地平面上的物体,才具有真正的鸟瞰图像素值,投影到图像上才是正常的。
透视变换可以用透视变换矩阵完成,透视变换矩阵为3x3矩阵:

矩阵可以分块来看,T1表示图像线性变换(包括旋转和缩放)、T2表示图像平移,T3用于产生图像透视变换,a33一般为1。 透视变换矩阵一般有8个未知数,给定透视变换对应的四对像素点坐标,即可求得透视变换矩阵;反之,给定透视变换矩阵,即可对图像或像素点坐标完成透视变换,如下图所示:



无透视,不空间
http://www.fevte.com/tutorial-30341-1.html
仿射变换与透视变换的关系:
https://blog.csdn.net/u012590570/article/details/51355600
仿射变换需要 三组点 的对应关系,而透视变换需要 四组点 的对应关系,才可以分别求得仿射变换和透视变换的变换矩阵。

变换示例:
OpenCV中提供warpPerspective函数用来实现仿射变换
该函数要求提供用来进行透视变换的矩阵(3x3),如果不知道该变换矩阵,可以结合两幅图像上 四对对应点 利用 getPerspectiveTransform 函数求得透视变换矩阵。
https://stackoverflow.com/questions/10962228/whats-the-best-way-of-understanding-opencvs-warpperspective-and-warpaffine?rq=1

其他形象例子与代码: https://blog.csdn.net/Paulhappy/article/details/52143742
https://blog.csdn.net/u012590570/article/details/51355600
https://zhuanlan.zhihu.com/p/24591720
https://nikolasent.github.io/opencv/2017/05/07/Bird's-Eye-View-Transformation.html
透视变换在相机鸟瞰图中的应用:
https://marcosnietoblog.wordpress.com/2014/02/22/source-code-inverse-perspective-mapping-c-opencv/
https://dsp.stackexchange.com/questions/19907/is-it-possible-to-hack-camera-calibration-without-having-access-to-the-camera
https://stackoverflow.com/questions/15768651/generating-a-birds-eye-top-view-with-opencv

https://www.pyimagesearch.com/2014/08/25/4-point-opencv-getperspective-transform-example/


http://chatgpt.dhexx.cn/article/MLM3pqQT.shtml

相关文章

Opencv_10 图像的透视变换

文章目录 一. 透视变换的原理二. 透视变换实现① 函数原型② 透视变换实现 三. 透视变换的案例 一. 透视变换的原理 透视变换(Perspective Transformation)是将图片投影到一个新的视平面(Viewing Plance),也称为投影映射(Projective Mapping).通用的变换公式为: 透视变换矩阵 …

【OpenCV】透视变换 仿射变换

目录 一:透视变换基本概念 二:透视变换工作原理 三:findHomography函数 四:warpPerspective函数 五:getPerspectiveTransform函数 一:透视变换基本概念 仿射变换(affine transform)与透视变换(perspec…

逆透视变换详解 及 代码实现(二)

根据 逆透视变换详解 及 代码实现(一)的原理 下面我用车上拍摄的车道图像,采用逆透视变换得到的图像,给出代码前我们先看下处理结果。 首先是原始图像: 下图为逆透视变换图像: 下面说具体的实现吧!! 一、…

透视变换的实现以及透视变换矩阵的构造

透视变换(Perspective Transformation)是什么,无需多说,但是一个非常惨痛的现实是如果你想知道怎么样才能在编程做,你只能得到一些调用opencv函数的文章,简直有病,谁不会调用函数,我搜索实现肯定是要找代码参考看下是怎么实现算法的,你调用函数还敢叫自己“实现”?那我…

图像处理之_仿射变换与透视变换

1. 仿射变换 1) 用途 旋转 (线性变换),平移 (向量加).缩放(线性变换),错切,反转 2) 方法 仿射变换是一种二维坐标到二维坐标之间的线性变换,它保持了二维图形的“平直性”(直线经过变换之后依然是直…

Matlab 透视变换 原理及其代码实现

一、透视变换内涵 透视变换本质:将一个图像投影到新的视平面 透视变换思路: 将二维坐标系转换为三维坐标系。 将三维坐标系投影到新的二维坐标系。 该过程属于非线性变换过程,一个菱形在经过非线性变换后得到一个四边形,但是…

art上的透视变换

透视变换 透视变换在比赛中非常重要,我们在地图识别与微调时用到了透视变换。 1. 微调上的使用 在车抵达目标板附件时,摄像头检测到目标板后,可以通过透视变换确定图片距车的位置。这里需要强调下,我们使用的透视变换与四轮使用…

透视变换(Perspective Transform)

**透视变换(Perspective Transform)**是将图片投影到一个新的视角或平面,变换公式如下。 在之前的章节中我们学习过仿射变换(affine transform) 可以看到,而射变换的变换矩阵是3x2的变换矩阵。和仿射变换不同的是,透视变换的变换矩阵是一个3…

仿射变换与透视变换区别

仿射变换 1) 用途 旋转 (线性变换),平移 (向量加).缩放(线性变换),错切,反转 2) 方法 仿射变换是一种二维坐标到二维坐标之间的线性变换,它保持了二维图形的“平直性”(直线经过变换之后依然是直线&…

用OpenCV进行透视变换

1. 引言 欢迎回来!今天我们将焦点聚焦在我在图像处理中最喜欢的话题之一——透视变换。使用该技术,可以灵活方便的实现各种各样好玩的特效。 闲话少说,我们直接开始吧! 2. 单应矩阵 我们首先展开对单应矩阵的深入研究。作为图…

透视变换矩阵详解

原文: OpenGLProjection Matrix (songho.ca) 看这篇文章主要是因为对learnopengl深度测试这一章的些许疑惑, 为什么在片段着色器中,存储的每一个fragment的深度值并不是线性分布?体现在想要显示出场景里面所有物体的深度值&#x…

【图像处理】透视变换 Perspective Transformation

透视变换(Perspective Transformation)是将图片投影到一个新的视平面(Viewing Plane),也称作投影映射(Projective Mapping)。通用的变换公式为: u,v是原始图片左边,对应得到变换后的图片坐标x,y,其中。变换矩阵可以拆成4部分,表示…

Opencv中的透视变换

唐宇迪视频学习笔记 def four_point_transform(image, pts):# 获取输入坐标点rect order_points(pts)(tl, tr, br, bl) rect# 计算输入的w和h值widthA np.sqrt(((br[0] - bl[0]) ** 2) ((br[1] - bl[1]) ** 2))widthB np.sqrt(((tr[0] - tl[0]) ** 2) ((tr[1] - tl[1])…

OpenCV中的透视变换介绍

点击上方“小白学视觉”,选择加"星标"或“置顶” 重磅干货,第一时间送达本文转自:opencv学堂 透视变换原理 透视变换是将图像从一个视平面投影到另外一个视平面的过程,所以透视变换也被称为投影映射(Project…

仿射变换和透视变换

透视变换 1. 欧式变换2. 相似变换3. 仿射变换4. 射影变换/透视变换概念OpenCV 实现 3D 空间存在集中变换方式。 1. 欧式变换 欧式变换保持了向量的长度和夹角,相当于我们把一个刚体原封不动地进行了移动或旋转,不改变它自身的样子,其矩阵表…

基于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固定流水线的重要组…

图像透视变换原理及实现

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