art上的透视变换

article/2025/10/3 20:30:51

透视变换

透视变换在比赛中非常重要,我们在地图识别与微调时用到了透视变换。

1. 微调上的使用

在车抵达目标板附件时,摄像头检测到目标板后,可以通过透视变换确定图片距车的位置。这里需要强调下,我们使用的透视变换与四轮使用的有所不同,确切的说是图像坐标到世界坐标的一种变换。
四轮的透视变换是为了使图像更易于判断元素,而在这里是为了得到确切的位置。所以,我们根本不需要对全图进行变换,只要对一个点进行变换。这样的计算量是非常小的。
下面是透视变换的核心代码。

#返回透视矩阵
#XY为世界坐标,UV为相机坐标
def cal_mtx(UV:np.array,XY:np.array)->np.array:A = []B =[]for i in range(4):a = [[UV[i][0],UV[i][1],1,0,0,0,-XY[i][0]*UV[i][0],-XY[i][0]*UV[i][1]],[0,0,0,UV[i][0],UV[i][1],1,-XY[i][1]*UV[i][0],-XY[i][1]*UV[i][1]]]B+= [[XY[i][0]],[XY[i][1]]]A+=aA = np.array(A)B = np.array(B)x= np.solve(A,B)H = [[x[0][0], x[1][0], x[2][0]],[x[3][0], x[4][0], x[5][0]],[x[6][0], x[7][0], 1]]return np.array(H)

其实只有短短几行,本质上是求解一个 3 × 3 3\times3 3×3的矩阵 H H H
( H 11 H 12 H 13 H 21 H 22 H 23 H 31 H 32 1 ) \begin{pmatrix} H_{11} & H_{12} & H_{13}\\ H_{21} & H_{22} & H_{23}\\ H_{31} & H_{32} & 1\\ \end{pmatrix} H11H21H31H12H22H32H13H231
共有8个未知数,所以求解这个矩阵需要有4个点。
具体的推导这里就不一一赘述了,毕竟打公式比较累。有兴趣的可以搜下。

得到这个矩阵后,将图像上的点化为其次坐标
( X ′ Y ′ S ) = ( H 11 H 12 H 13 H 21 H 22 H 23 H 31 H 32 1 ) ( U V 1 ) \begin{pmatrix} X^{'}\\ Y^{'}\\ S\\ \end{pmatrix} = \begin{pmatrix} H_{11} & H_{12} & H_{13}\\ H_{21} & H_{22} & H_{23}\\ H_{31} & H_{32} & 1\\ \end{pmatrix} \begin{pmatrix} U\\ V\\ 1\\ \end{pmatrix} XYS = H11H21H31H12H22H32H13H231 UV1
因为是齐次坐标,所以要除与S后才能得到真实位置。

这里提供一个快速确定 H H H的脚本(img2world.py),虽然不太严谨,但是按我们的经验,应付比赛是足够的。
将一张A4纸按如下方式摆放
在这里插入图片描述

红线画的是A4纸在摄像头的画面。注意A4纸的底部要与摄像头视野的底部对齐。中线与摄像头视野中线对其。这时候会得到一个矩阵 H H H
我们暂且将车的左右方向定义为x轴,车头方向为y轴。这个时候你会发现,x轴方向的数据是较为准确的(可以用卷尺测试)。但y轴方向的误差应该是很大的。这是因为我们不知道摄像头视野底部离车的中心距离是多少。所以这里需要在y方向上添加一个平移常数。这里用手测一下就好了。

2. 识别地图

在识别地图中,透视变换特别的关键。这关乎到你的发车速度和识别准确率。
如果没有进行透视变换,通常需要调整好后才能识别地图,而且识别准确率不太准确。但经过透视变换并取整后,其输出基本就是上位机生成的点位,不会有误差。

不同于微调,识别地图的透视矩阵不是固定的,每一帧都需要计算一次,通过地图框的四个顶点确定。


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

相关文章

透视变换(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固定流水线的重要组…

图像透视变换原理及实现

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

(十四)透视变换

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

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

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

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

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

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

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

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

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

【图像理论】透视变换

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

Python图像处理之透视变换

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