基于DYNA4实现摄像头畸变应用
DYNA4为乘用车和商用车提供各种复杂的仿真模型,包括车辆动力学模型、发动机模型、动力系统模型、电机模型、交通环境模型和ADAS物理传感器模型等。由于摄像头需要同时满足视场更广、更近的成像距离、体积更小以及成本更低等多方面要求,镜头设计过程中往往会主动接受一定程度的畸变。较大的畸变有助于实现更大的视场角(FOV)、更紧凑的结构、更高的透光效率以及更低的制造成本。摄像头畸变模型用于描述真实镜头成像与理想针孔成像模型之间的偏差,其建模精度将直接决定像素坐标与空间方向之间映射关系的准确性。畸变模型不准确将引入系统性几何误差,并对相机标定、多目标融合以及下游感知与定位算法产生基础性影响,尤其在广角和鱼眼摄像头中尤为关键。
以下将基于DYNA4实现摄像头畸变应用进行系统介绍。
01摄像头畸变的种类
摄像头的畸变是镜头设计者主动接受的一种权衡选择,因为人们想让它“看得更广、更近、更小、更便宜”。畸变并非设计缺陷,而是光学系统在视野、体积和成本之间做出的工程取舍,其影响通过畸变模型在软件中进行描述和补偿。
图1:摄像头畸变示意
现实中快速评估畸变程度,可以通过查看图片边缘的弯曲程度、以及寻找图片中直线物体(如建筑边框、门框、地砖缝、路沿、车道线、护栏等)的弯曲来近似评估。表达摄像头畸变有很多成熟的方法,包括参数化畸变模型和查表式畸变模型。参数化畸变模型具有参数少、物理意义明确和易于标定的优点,适合大多数标准镜头;而查表式畸变模型通过直接存储像素映射关系,能够准确描述复杂和非对称畸变,但代价是存储开销大、外延性差以及工程复用性差等因素。下面是学术和工程界常用的一些畸变模型:
>
OpenCV normal
>
Kannala-Brandt(KB)
>
Scaramuzza
>
Polynomial 4th Degree Distortion
>
Modified Division Distortion
对于视场角小于约120°的标准摄像头系统,采用基于针孔模型的OpenCV normal畸变模型,可在保证物理可解释性的同时获得稳定且成熟的工程效果。对于视场角在120°~180°范围内、畸变以径向对称为主的车载鱼眼摄像头,OpenCV fisheye是不错的选择,Kannala-Brandt畸变模型在OpenCV中以fisheye模型的形式进行了工程化实现,并在算法表达和数值稳定性方面进行了优化,FOV视角延展到大于180°广角以外。对于存在明显非对称与高阶残余畸变的非标准广角镜头,Scaramuzza(OCamCalib)模型因其高度通用的几何描述能力更加适合。对于仅针对特定镜头进行的离线高精度拟合,而不太在乎其物理可解释性能力的,可以使用Polynomial高阶多项式畸变模型或Modified Division Distortion模型作为补充方案。
其中,OpenCV normal和KB(OpenCV fisheye)均属于OpenCV范畴,有官方网页且Github上有开源代码更新;Scaramuzza自带辨识代码的工箱箱,从使用角度来说是较为方便的。在量产项目和多系统集成场景中,通常会优先考虑生态成熟度、算法兼容性和长期可维护性,例如选择OpenCV normal或Kannala-Brandt等畸变模型。
02摄像头的参数以及参数获取手段
摄像头通常有内参和外参两组数据。摄像头内参用于描述镜头和成像系统的几何特性,定义空间光线到像素坐标的投影关系;外参用于描述摄像头相对于车辆或其他传感器的空间位置和姿态,两者共同决定了视觉信息在系统中的几何一致性,是多传感器融合和高精度感知的基础。
图2中红色方块代表摄像头的空间位置使用,棋盘格为拍摄对象(棋盘格黑白等间距)。图中棋盘上的绿色点在大地坐标原点,摄像头相对于棋盘格,可以通过平移向量t和旋转矩阵R来表达。当空间六坐标(位置姿态)固定后,摄像头在空间角度便固定了。
图3为摄像头的视角,即拍摄出来的照片。可以发现,虽然棋盘格黑白等间距且线性,但是投影到照片里并不是等距离变化,甚至直线变为曲线。从棋盘格里各个交点,映射到照片里各交点坐标的这一个过程,便是拟合摄像头的内参畸变的重要步骤。

图2(上):摄像头的空间位置第3视角
图3(下):摄像头拍摄视角内容
通常典型内参包括:
>
焦距:fx ,fy
>
主点:cx ,cy
>
畸变参数:
径向畸变(k1, k2, …)
切向畸变(p1, p2)
或鱼眼/多项式模型参数
图3中主点,接近图片的正中央位置,为光轴与成像平面的交点(投影中心落点),可以看出示例中的摄像头是偏右侧的,同时该主点通常近似为畸变的中心点。相对外参,内参是摄像头的固有属性,对于不具备变焦的摄像头,其内参基本是固定不变的。简而言之,内参定义了空间光线如何被投影到图像平面上的像素坐标。对比如下:
内参 |
外参 |
|
描述对象 |
摄像头自身 |
摄像头在空间中的位置 |
是否与安装相关 |
否 |
是 |
是否与分辨率相关 |
是 |
否 |
是否与镜头相关 |
强相关 |
否 |
是否需要标定 |
需要 |
需要 |
对于内外参的获取,通常可以使用棋盘格拍照然后通过辨识工具来辨识,例如:
OpenCV:
https://docs.opencv.org/4.x/db/d58/group__calib3d__fisheye.html
Scaramuzza:
https://sites.google.com/site/scarabotix/ocamcalib-omnidirectional-camera-calibration-toolbox-for-matlab提供的函数或工具箱。
其中棋盘格可以采用工具里推荐的黑白相间棋盘格,也可以是自定义的其它棋盘格布置形式,还可以从供应商处直接获取。由于外参是空间尺寸,所以也可以直接用机械测量距离和角度获取的。维克多汽车同时也提供相关项目服务。
03DYNA4摄像头传感器模型参数填写
DYNA4支持不同的传感器畸变模型。在DYNA4中,实现摄像头仿真的步骤如图4。首先打开车辆的动画配置文件.dapx并进行编辑,从左侧Animation Object Database里将Camera拉入Animation Project,按需将Camera固定在空间某一固定位置,也可以放置在车辆里面。然后如红色2处,选择对应的畸变模型(图4中是KB模型的参数)。不同的畸变模型有不同的参数,如红色3处为模型内参。
摄像头的安装位置,即摄像头外参,在红色4处填写,包含平移和旋转两大部分。这里注意摄像头坐标的定义,DYNA4里摄像头坐标满足右手定则,摄像头正前方是X正,正上方是Z正。根据不同畸变模型里坐标定义的差异进行坐标的角度转换即可。平移数值分别为相对于整车或路侧的相对的平移安装距离(取决于摄像头是固定在车上还是在路侧安装的RSU)。
除了摄像头内外参数,还有常规参数,例如水平垂直分辨率、ISO、光圈、快门时间等。填写完毕后,便实现了摄像头在DYNA4里的设置。

图4:DYNA4摄像头参数设置
04DYNA4摄像头传感器标定的复现以及棋盘格的制作
在摄像头参数配置完毕之后,可以对软件仿真的效果与实际标定的结果进行对比。首先需在DYNA4里制作实际过程中使用的棋盘格,如图5采用的黑白交错、等间距的棋盘,棋盘上也可以写字或者其它标记以便于后续校对,然后填入摄像头的外参来确定摄像头安装位置。图5是OpenCV建议的10*7等间距的棋盘格,这里加入了一些其他文字。图6是自定义的棋盘格。在DYNA4中实现上述功能较为方便。在DYNA4的动画模块中,可以通过棋盘格图片贴图的方式,将棋盘格PNG或JPG图片直接贴附在平面对象上,其整体尺寸可通过设置贴图平面的长和宽进行调整。


图5:常用的棋盘格
图6:自定义棋盘格举例
05不同畸变模型在DYNA4中的应用效果
由于篇幅有限,选取Scaramuzza、KB、OpenCV normal/pinhole模型在DYNA4里的应用为例。
5.1
Scaramuzza的应用效果
图7是Scaramuzza提供的工具箱中的示例棋盘格图像。Scaramuzza对大广角畸变的摄像头有较好的辨识效果。图片展示了DYNA4中基于Scaramuzza摄像头模型的棋盘格仿真结果与实际标定过程中棋盘格图像的对比。
图7a是在DYNA4里填入内外参,然后配置对应的棋盘格,仿真得出的对应棋盘格照片。图7b为实际标定过程摄像头在某一角度下拍出来的棋盘格照片。图7c是实际标定的照片与DYNA4仿真的图片叠加显示。具体方法是在DYNA4摄像头上加上滤镜,滤镜的图片为对应的实际图片,这样便可以方便进行比对。图7d-7f是在标定过程中,其他拍摄角度下的DYNA4仿真图片与实际照片的对比。


图7a
图7b


图7c
图7d


图7e
图7f
上下滑动阅读更多内容
5.2
Kannala-Brandt模型/OpenCV fisheye的应用效果
图8是某客户采用Kannala-Brandt模型的仿真对比效果。对于径向对称鱼眼,KB模型非常精准,工程落地成熟。KB模型基于OpenCV fisheye公式,经过相关处理后适合大于180°广角的应用,与OpenCV fisheye的参数相同。这里展示的是某一典型车辆前、后、左、右四个环视鱼眼摄像头的仿真结果与真实效果对比。图8a是在DYNA4里填入内外参,然后配置对应的棋盘格,仿真得出的对应棋盘格照片。图8b为前鱼眼摄像头的实拍照片。图8c是实际的照片与DYNA4仿真的图片叠加显示。图8d-8f分别是DYNA4仿真的左侧、后方、右侧鱼眼摄像头仿真图片与实车拍摄的对比。


图8a
图8b


图8c
图8d


图8e
图8f
上下滑动阅读更多内容
5.3
OpenCV Normal的应用效果
OpenCV normal对中小畸变非常稳定,尤其在小广角的前后视摄像头上应用较多,有时亦叫Pinhole模型。图9是Github OpenCV工具里提供的棋盘格照片,通过辨识后,在DYNA4里OpenCV摄像头棋盘格仿真与实际过程的棋盘格的对比的图片。图9a是在DYNA4里填入内外参,配置对应的棋盘格,仿真得出的对应棋盘格照片。图9b是在实际标定过程中,在某一角度下拍出来的棋盘格照片。图9c是实际标定的照片与DYNA4仿真的图片叠加显示。图9d-9f是在标定过程中,其他拍摄角度下的DYNA4仿真图片与实际摄像头的对比。


图9a
图9b


图9c
图9d


图9e
图9f
梦金指南网


