单目相机测距-相机矫正

1.相机矫正

使用单目相机对车辆进行测距流程主要流程如下图所示

实现基于单目相机的距离检测系统,通过拍摄视频或照片,对场景中的车辆进行检测,并计算其与相机的距离。系统流程包括相机标定、车辆检测、数据预处理、模型训练、图像处理和距离检测等环节。

相机标定:首先,拍摄标定板图像,检测特征点,并计算相机的内参和外参。通过相机矫正,确保图像的准确性。在相机标定时,需要对相机内外参进行计算,其中,相机内参为相机畸变、焦距等参数,相机外参主要包含相机的旋转以及平移参数。

1.1 相机成像原理

在实现相机内参参数计算时,需要先了解相机成像的原理。如下图所示:

 

其中相机拍摄图像时,是需要经过世界坐标系(3D)--相机坐标系(2D)--像素坐标系(2D)的转换,其中相机坐标系中由于相机本身的成像原理,会产生畸变。典型的针孔相机模型,把相机看作一个针孔(O点),现实世界中的点P经过相机的光心O,投影到物理成像平面上,变为点P'。这个里面有三个坐标系,一个是相机坐标系,设 𝑂−𝑥−𝑦−𝑧 为相机坐标系,习惯上我们把z轴指向相机前方,x向右,y向下。O为摄像机的光心,也是针孔模型中的针孔。一个是真实世界的坐标系,设真实世界点中的P的坐标为 [𝑋,𝑌,𝑍]𝑇 ,成像的点P'的坐标为 (𝑋′,𝑌,′𝑍′) , 物理成像平面和光心的距离为 𝑓 (即为焦距)。一个是像素坐标系𝑂′−𝑢−𝑣,原点O'位于图像的左上角,u轴向右与x轴平行,v轴向下与y轴平行。从世界点到图像点坐标的转换实际上是运用了相似三角形的计算。最后再将得到的点坐标x,y平移到黑色的像素坐标系,如此就完成了世界坐标点向像素坐标系点的转换,也就是我们所说的三维点向二维平面的投影。

通过数学公式和框图来表达转换关系:

 

 

所以,最终转换公式为:

 

我们将公式中的R称为旋转矩阵,t称为平移矩阵或平移向量。R|t合起来称作外参矩阵。将以上称为相机的内参矩阵。

1.2 标定

相机的畸变,通常分为三大类。径向畸变、离心畸变以及薄棱镜畸变。其中,最常见的是径向畸变,如下图所示,相机标定就是为了消除这个畸变。

使用张氏标定法来进行标定。张正友标定法利用如下图所示的棋盘格标定板,在得到一张标定板的图像之后,可以利用相应的图像检测算法得到每一个角点的像素坐标 (𝑢,𝑣) 。张正友标定法将世界坐标系固定于棋盘格上,则棋盘格上任一点的物理坐标 𝑊=0,由于标定板的世界坐标系是人为事先定义好的,标定板上每一个格子的大小是已知的,我们可以计算得到每一个角点在世界坐标系下的物理坐标(𝑈,𝑉,𝑊=0)。我们将利用这些信息:每一个角点的像素坐标 (𝑢,𝑣) 、每一个角点在世界坐标系下的物理坐标(𝑈,𝑉,𝑊=0),来进行相机的标定,获得相机的内外参矩阵、畸变参数。

张正友标定法标定相机的内外参数的思路如下:

1)、求解内参矩阵与外参矩阵的积;

2)、求解内参矩阵;

3)、求解外参矩阵。

其具体流程为相机标定的步骤

1)、准备一个张正友标定法的棋盘格,棋盘格大小已知,用相机对其进行不同角度的拍摄,得到一组图像;

2)、对图像中的特征点如标定板角点进行检测,得到标定板角点的像素坐标值,根据已知的棋盘格大小和世界坐标系原点,计算得到标定板角点的物理坐标值;

3)、求解内参矩阵与外参矩阵。

根据物理坐标值和像素坐标值的关系,求出 𝐻 矩阵,进而构造𝑣矩阵,求解𝐵矩阵,利用𝐵矩阵求解相机内参矩阵 𝐴 ,最后求解每张图片对应的相机外参矩阵 (𝑅𝑇01) ;

4)、求解畸变参数。

利用𝑢^,𝑢,𝑣^,𝑣构造𝐷矩阵,计算径向畸变参数;

参考链接:

相机标定之张正友标定法数学原理详解(含python源码) - 知乎 (zhihu.com)

相机内参标定究竟标了什么?相机内参外参保姆级教程 - 知乎 (zhihu.com)

相机标定之张正友标定法数学原理详解(含python源码) - 知乎 (zhihu.com)

张正友棋盘代码-python - heyrro - 博客园 (cnblogs.com)

 

 

 

 

 

posted @ 2024-05-10 10:30  heyrro  阅读(13)  评论(0编辑  收藏  举报