转载自:
https://blog.csdn.net/feiyang_luo/article/details/103555036
在自动/辅助驾驶中,车道线的检测非常重要。在前视摄像头拍摄的图像中,由于透视效应的存在,本来平行的事物,在图像中确实相交的。而IPM变换就是消除这种透视效应,所以也叫逆透视。
IPM变换方法
1.对应点对单应变换方法
输入:至少四个对应点对,不能有三点及以上共线,不需要知道摄相机参数或者平面位置的任何信息。
数学原理:利用点对,求解透视变换矩阵,其中map_matrix是一个3×3矩阵,所以可以构建一个线性方程组进行求解。如果大于4个点,可采用ransac的方法进行求解,一边具有更好的稳定性。
选点方法:一般采取手动选取,或者利用消影点(图像上平行线的交点,也叫消失点,vanish point)选取。
代码实现:代码实现比较简单,可以很容易实现IPM变换
计算变换矩阵: H = getPerspectiveTransform()
获取IPM图像: warpPerspective();
2. 简化相机模型的逆透视变换
利用相机成像过程当中各种坐标系之间的转换关系,对其基本原理进行抽象和简化,从而得到世界坐标系和图像坐标系之间坐标的对应关系,并对逆透视变换的坐标关系进行公式化描述。这种逆透视变换形式简单,计算速度快,并且适用于复杂道路场景。
2.1 paper:Stereo inverse perspective mapping: theory and applications
这种方法需要的已知量:
α \alpha α : 相机一半视场角
d x , d y , d z d_x,d_y,d_z dx,dy,dz :相机在世界坐标系下的位置
γ 0 , θ 0 \gamma _{0},\theta _{0} γ0,θ0 :分别表示你航向角和俯仰角
m , n m,n m,n: 分别标示图像高、宽
在这里插入图片描述
这个方法同时考虑到了上下俯仰角和水平偏航角度的矫正,但是存在水平线弯曲误差,导致图像的水平横线如行道线等,恢复到世界坐标系的道路平面后,会有一定的弯曲。
在这里插入图片描述
2.2 Paper:Robust Inverse Perspective Mapping Based on Vanishing Point
基于消失点的俯仰角和偏航角计算
根据射影几何学原理,现实空间中的平行直线组在存在透视形变的情况下将会相交于无穷远点处,而该交点在成像平面上的投影即被称为消失点。当现实世界的平行直线组与成像平面平行时,消失点将位于成像平面的无穷远处;但是当平行直线组与成像平面部存在不平行关系时,消失点将位于成像平面的有限远处,甚至可能出现在图像区域以内。
消失点具有一些重要的性质:
真实道路场景中相互平行的行道线以及与其他和行道线平行的直线都指向相同的消失点;
某条直线对应的消失点一定位于这条直线在图像平面的投影射线方向上;
消失点的位置和滚转角无关,仅仅和俯仰角、偏航角有关;
当偏转角为90度时,行道线所对应的消失点位于道路图像水平方向外部;
当俯仰角为90度时,行道线所对应的消失点位于道路图像垂直方向外部;
当相机坐标系和世界坐标系原点完全重合时,消失点位于道路图像中心;
在这里插入图片描述
其中 ( x , y ) (x,y) (x,y) 是消失点坐标, ( M , N ) (M,N) (M,N)是图像宽高,KaTeX parse error: Undefined control sequence: \apha at position 12: (\alpha_v, \̲a̲p̲h̲a̲_u)是垂直、水平视场角的一半,由次公式可计算偏转和俯仰角
示意图如下:
从对比结果看,此方法不会让水平线弯曲,同事使用偏航角进行修正,具有较好效果。
2.3 Paper:Adaptive Inverse Perspective Mapping for Lane Map Generation with SLAM
这种方法利用相机位姿,在相邻帧中加入了俯仰角的修正,因此可以得到比较好的逆变换效果,下面就是相关原理示意图:
以下两点是我根据实际工作上所使用过的一些方法,相比较于以上几种方法来说,更多的是应用了多视图几何的知识来得到IPM变换。
3.1 在相机坐标系下已求得路平面方程求IPM
在slam应用中,如果已知相机pose,同时在用地面点已求得路平面方程的情况下,可利用多视图几何关系求得IPM变换
&emsp输入:
相机坐标系下路平面方程 a x + b y + c z + d = 0 ax+by+cz+d=0 ax+by+cz+d=0
相机内参
步骤:
利用相机成像原理,由图像坐标求得一个射线 λ ( X , Y . Z ) T = K − 1 ( u , v , 1 ) T \lambda (X,Y.Z)^T=K^{-1}(u,v,1)^T λ(X,Y.Z)T=K−1(u,v,1)T;
射线与平面相交即可求得此图像像素点的3维坐标;
利用插值算法,均可在路面的任意点得到像素值,那么就可得到IPM图像;
3.2 已知相机位姿,利用求单应矩阵得到IPM
同样,在已知相机pose情况下,可将相机向路面方向旋转90度-俯仰角,那么得到一个新的相机pose,此时的相机是垂直与路面向下,那么得到的图像自然也就是IPM图像。
对于多视图几何中,单应矩阵的计算公式:
H = K ( R + T d − 1 N T ) K − 1 H=K(R+Td{-1}NT)K^{-1} H=K(R+Td−1NT)K−1
N , d N, d N,d表示路平面参数
如果是纯旋转矩阵,那么单应可以表示为:
H = K R K − 1 H=KRK^{-1} H=KRK−1
当单应矩阵求出来了,那么很容易就可以得到IPM变换图像。
总结
IPM变换具有很多应用,求取IPM图像的方法亦是有很多,可根据实际情况灵活使用。