论文四连读(3)利用消失点进行相机标定 Fully Automatic Roadside Camera Calibration for Traffic Surveillance

时间:2024-03-22 19:30:46

这是四篇系列论文中的第三篇,是一篇关于相机内参标定的论文,用的是之前两篇论文的方法和知识基础。如果没有阅读的盆友可以去读一下博主写的paper reading(第一篇第二篇),或者直接读原文(第一篇第二篇)。
之前讲过了利用级联霍夫变换检测图片中的直线以及消失点的方法。这篇论文讲的是道路监控视频的摄像头内参标定方法。文章花了很大的篇幅去回顾前文的知识,所以如果实在懒得看前作,看看这篇文章的前段部分,也许能略知一二。
首先明确一下任务,论文的目的是,对一段没有任何参数的道路监控视频,检出监控摄像头的内参。相机内参K=[fx0ux0fyuy001]K=\begin{bmatrix} f_{x} & 0 & u_{x}\\ 0 & f_{y} & u_{y}\\ 0 & 0 & 1 \end{bmatrix},其中fxf_{x}fyf_{y}分别为相机x和y轴方向的焦距,uxu_{x}uyu_{y}是相机光心在照片中的像素坐标。相机的标定主要是求解这几个参数,外加相机的畸变参数。理论上来说,相机光心的位置,应该是照片的中心,不过实际都会偏十个像素左右。文章表示,光心位置直接默认为照片中心,这样的做法在实际应用(测速等)中不会对结果造成太大影响。同理,默认fx=fyf_{x}=f_{y},但是一般来说这两个焦距是有微小的差距的。所以问题就变成了如何求焦距focal,以及畸变参数(畸变参数作为一个额外的参数,并不是所有相机都有,文章虽然给了方法,但是也表示不是那么重要)。

一、如何测定相机的焦距

首先,文章使用了前作的方法,求得了前两个消失点(下图红线所指以及绿线所指)。由于第三个消失点在这种场景下一般没有足够的直线可以投票出来,所以第三个消失点不是通过霍夫变换的方式求出来的。
假设第一个消失点的像素坐标为vp1=(x1,y1)vp_1=(x1,y1),第二个消失点的像素坐标为vp2=(x2,y2)vp_2=(x2,y2)
论文四连读(3)利用消失点进行相机标定 Fully Automatic Roadside Camera Calibration for Traffic Surveillance
那么如何求焦距呢,我们重建一个三维坐标系,这个坐标系以照片左上角为坐标原点,单位是像素,那么重新构建一下两个消失点的坐标:vp1=(x1,y1,0),vp2=(x2,y2,0)vp_1=(x1,y1,0),vp_2=(x2,y2,0),相机的光心坐标为pp=(ux,uy,focal)pp=(ux,uy,focal)。根据性质,这两个消失点,在这个三维坐标系下,与光心的连线是互相垂直的,也就是两个向量点乘等于0。所以有公式(vp1pp)(vp2pp)=0(vp_1-pp)\cdot (vp_2-pp)=0,代入坐标(x1ux)×(x2ux)+(y1uy)×(y2uy)+focal2=0(x1-u_x)\times (x2-u_x)+(y1-u_y)\times(y2-u_y)+focal^{2}=0
,得到最终的焦距计算公式focal=((x1ux)×(x2ux)+(y1uy)×(y2uy))focal=\sqrt{-((x1-u_x)\times (x2-u_x)+(y1-u_y)\times(y2-u_y))}
有了前两个消失点,和焦距(可获得光心的坐标),第三个消失点就可以直接用前两个消失点与光心连线的向量叉乘获得(因为是正交的,三个消失点两两垂直)。前两个消失点是位于地平面上,第三个消失点垂直于地平面,其实如果场景中竖直的线足够多,是可以根据霍夫变换直接求出第三个消失点的,但是一方面因为线不够多,另一方面容易跟第二个消失点混淆。

畸变参数的计算

有了焦距,就已经完成了相机的标定。另外,文章也给出了畸变参数的计算方式,算是锦上添花吧。我没有详细读这一部分,文章给出的畸变参数求解方法,需要用到车的track轨迹跟踪,跟踪出来车辆的一个轨迹(在畸变的相机中都是曲线),然后找到对应的真实直线,根据发生畸变投影变换的多项式方程来求解得到畸变参数。需要的盆友可以详细去看看。