基于360°全景摄像头图像识别的行车辅助系统

2021-08-09 03:23黄思晓
电子技术与软件工程 2021年11期
关键词:鱼眼树莓全景

黄思晓

(南方科技大学深港微电子学院 广东省深圳市 518055)

1 系统方案

1.1 硬件方案的比较与选择

这个系统,需要同时使用四路的鱼眼摄像头的输入图片,结果矫正,转化,拼接等操作,计算量较大,需要选用性能较强的处理器,所以我们主要挑选了树莓派和STM32;

由于需要实现目标识别,神经网络算法必不可少。当下神经网络的框架主要是使用python 语言编写,所以我们使用可以用python 编写的程序的树莓派;

需要用4 路的鱼眼摄像头获取广角照片,我们选择了USB 接口鱼眼摄像头。

由于树莓派的算力有限,为了防止最后形成的2D 地图刷新率过低,我们最终采用不在树莓派上处理图片和进行地图的映射,相关计算量过大的任务交给笔记本电脑进行,这样不仅可以减小树莓派的压力,还可以提高2D 地图和全景照片实时反映车周边情况的能力。

1.2 软件算法的比较与选择

对于鱼眼摄像头拍摄的照片进行矫正前,需要获得相机的畸变参数,而测量相机的畸变参数的方法主要有两种,一种是用opencv的矫正方法,一种是调用Matlab 中的Camera Calibrator 模块的矫正方法,我们分别对是用两种测量方法,并用获得的参数对照片进行矫正,最终发现opencv 的方法矫正的过程较为复杂,而且最终的效果的误差超出了预期结果,最终采用了Matlab 中的Camera Calibrator 模块获得的相机参数。

对鱼眼摄像头拍摄的超广角照片进行矫正的方法主要有两种:棋盘矫正法,经纬度矫正法。我们分别对两种对鱼眼照片矫正畸变的效果,发现两种方法在视野中心矫正效果相似,但在照片周边棋盘矫正法更为优秀,所以选择了棋盘矫正法。

在目标识别方面,存在三种网络的形式:tiny,GPU 和CPU 版本。Tiny 版本网络较小,可识别的物体有限,准确率较低,但是运行速度快;CPU 版本主要是使用CPU 运行,GPU 版本是使用GPU 运行。本系统选择可以使用GPU 加速的GPU 版本。

在测距方面,现在主要有单目测距和双目测距两种方式。单目测距需要事先建立数据集,提前录入目标的大致尺寸;双目测距需要同时调用两个摄像头对目标进行测距,需要进行标定等操作。由于需要保证小车360 度范围内每处都有两个摄像头同时观测,对于每个视角160 度的鱼眼摄像头比较困难,最后选择了较为简单的单目测距的方案。

图1:可行驶区域的识别

2 功能与指标

2.1 基于360全景摄像头的图像识别

通过四路鱼眼摄像头,可以分别获得车身四个方向的图像,通过图像拼接技术最终得到小车的360°全景图像。同时可以获得车身周围的鸟瞰图,俯视汽车可以更清晰的观察车身周围的情况。

2.2 泊车辅助

四路鱼眼摄像头拥有更大的视角,因此可以容易获得倒车时车身周围的信息,通过鱼眼摄像头获得的图像进行软件上的处理可以识别出停车的具体方位,同时可以实时检测到车后方的障碍物信息,例如:车辆、行人、动物、基础设施、交通工具等。在检测到障碍物时可以返回到输出的2D 地图上,给驾驶员及时的提醒。在进行倒车的时候,受限于旁边车辆的干扰,鱼眼摄像头可以及时捕捉该信息并且反映到2D 地图上,可以在地图上标明车辆的可行使区域,并给予驾驶员一定的辅助。因此会在2D 地图上展示指引标识,指引驾驶员进行最优的操作。

2.3 停车记录

4 路鱼眼摄像头得到的视频可以被储存到系统之中,类似于行车记录仪,可以在发生意外的时候读取倒车时的视频进行发生意外的责任判定。

2.4 完成的指标

由于树莓派算力的原因以及摄像头像素的限制,最终可以获得1280×720 分辨率的图片,经过鱼眼摄像头去畸变的过程,应用图像拼接技术可以最终获得1280×720 分辨率的全景图片,图片包含车身周围360°的全部景象,并实时根据车辆位置进行更新。

鸟瞰图覆盖的范围,2D 地图可以毫秒级进行数据更新,在硬件限制的情况下可以做到最低延迟。同时,在单目测距算法的加持下,显示障碍物的位置坐标误差在5%以内。

基于四路鱼眼摄像头的拍摄,可以保存的视频以供驾驶员需要时获取。

3 实现原理

3.1 单目测距及2D地图映射

单目测距主要是通过建立一对相似三角形来进行测距,目标的像素高度为x,目标实际高度为X,所以由相似三角形可得,由此进而计算物体距离车的距离。测距程序会读取目标识别程序输出的结果,在已设置的数据集中查找识别的物体的实际尺寸,进而利用上面的公式进行计算,之后用相关的图片映射到二维地图的相关坐标。

3.2 鱼眼图像矫正

鱼眼镜头通过光学的设计,可以做到接近180°视场角。本设计购买的相机支持160°。但由于视场角的增大,在图像远离中心的地方会出现不同程度的畸变,离中心点越远畸变越明显。

常见的鱼眼图像矫正方法有两种,一是基于经纬度矫正法,另一种是棋盘矫正法。本设计尝试两种矫正方式后,发现棋盘法矫正效果较佳,故选择棋盘法进行鱼眼矫正。

3.3 全景图像拼接

本设计的图像拼接基于特征点提取和匹配。本设计采用SURF特征点提取算法。SURF,加速稳健特征,是一种稳健的局部特征点检测和描述算法。与Sift 算法一样,Surf 算法的基本路程可以分为三大部分:局部特征点的提取、特征点的描述、特征点的匹配。

Surf 改进了特征的提取和描述方式,用一种更为高效的方式完成特征的提取和描述,具体实现流程如下:

(1)构建Hessian(黑塞矩阵),生成所有的兴趣点,用于特征的提取;

(2)构建尺度空间;

(3)特征点定位;

(4)特征点主方向分配;

(5)生成特征点描述子;

(6)特征点匹配。

黑塞矩阵(Hessian Matrix)是一个多元函数的二阶偏导数构成的方阵,描述了函数的局部曲率。由德国数学家Ludwin Otto Hessian 于19 世纪提出。

对一个图像f(x,y),其Hessian 矩阵如下:

在构造Hessian 矩阵前需要对图像进行高斯滤波,经过滤波后的Hessian 矩阵表述为:

当Hessian 矩阵的判别式取得局部极大值时,判定当前点是比周围邻域内其他点更亮或更暗的点,由此来定位关键点的位置。

Hessian 矩阵判别式中的f(x,y)是原始图像的高斯卷积,由于高斯核实服从正态分布的,从中心点往外,系数越来越低,为了提高运算速度,Surf 使用了盒式滤波器来近似替代高斯滤波器,所以在Dxy 上乘了一个加权系数0.9,目的是为了平衡因使用盒式滤波器近似所带来的误差。盒式滤波器对图像的滤波转化成计算图像上不同区域间像素和的加减运算问题,这正是积分图的强项,只需要简单几次查找积分图就可以完成。

首先我们使用opencv 中的SURF 算法,获取图像中的特征点,然后使用KNN 算法获取匹配的特征点,最后经过透视矩阵变换得到拼接后的全景图像。由于拍摄时使用的摄像头以及光线存在差异,最后合成的图片会出现明暗差异,所以最后会对全景图片做色彩均衡化减小全局色差。

3.4 图像识别网络

本设计选用YOLOV4 识别网络,相比R-CNN 算法,其是一个统一的框架,其速度更快,而且Yolo 的训练过程也是端到端的。

4 硬件

4.1 数据采集

本项目使用4 路USB160°鱼眼摄像头采集视频信号。使用摄像头最高支持1280×720 分辨率,但实际项目测试中需要降低分辨率以提高程序执行的速度。

本项目采用树莓派4B 作为四路视频采集设备。树莓派4B 配置了两个USB2.0 和两个USB3.0 接口。

4.2 供电选择

由于树莓派要带动四路USB 鱼眼摄像头,为了满足摄像头的供电充足我们选择了可以提供5V3A 功率的充电宝作为供电端。同时对小车的供电我们采用两节5 号电池进行供电。

4.3 小车选择

图2:2D 地图

本项目采用自主设计的智能小车,通过Arduino 控制电极工作来实现小车的前进后退以及左右转弯,基本满足模拟现实汽车的行驶的基本要求。同时,在小车的合理位置放置了树莓派、4 个鱼眼摄像头以及供电模块。

5 软件流程

首先在树莓派中通过Opencv 调取摄像头进行拍照。其次通过树莓派的Wi-Fi 传输将获取的图片上传到计算机进行下一步的计算。用Opencv 对获得的图像进行畸变的矫正,然后通过调用YOLO v4库进行图像的识别,分别获取障碍物的位置信息和标志物的位置信息。最后将图像拼接到一起得到全景图像。

6 外观设计

在有限的空间下,在小车上放置树莓派、四路摄像头、驱动电机、Arduino、树莓派供电装置(充电宝)、以及给小车和Arduino 供电的两节5 号电池。大量走线都隐藏在小车内部,以及外壳内部。整体上看小车结构紧凑,重量分布均匀,同时也能满足摄像头拍摄小车四周的要求,可以得到规定范围内的图像。

7 系统测试方案

7.1 静态测试

将小车放置在设定的场景中,在小车周围摆放人、动物、自行车、汽车等障碍物。小车保持不动,在静态下开启系统,最后可以得到对应的2D 地图信息以及全景地图。

7.2 动态测试

通过遥控器控制小车在可行驶区域进行行驶,将各障碍物摆放在小车运动的轨迹上。在小车行驶过程中可以实时检测障碍物位置并反馈到2D 地图上,同时也可以实时得到全景地图,最后也可以调用小车运行时的录像,起到倒车记录仪的作用。

7.3 软件测试

首先进行鱼眼镜头畸变的标定,运用Matlab 自带程序库识别鱼眼摄像头捕捉的固定棋盘图像,最后完成畸变的标定,为畸变的矫正提供数据的支持。其次进行鸟瞰图识别的测试,在小车四周摆放棋盘图像。用自写代码分别识别四个方向的区域范围,完成鸟瞰图的拼接。最后进行单目测距的测试,用鱼眼摄像头获取一把尺子的完整图像,通过对应像素点和绝对长度的关系,来算出单目测距所需要的系数。

8 测试设备

8.1 场地布置

在地面规划出小车的可行驶区域,并且在边界位置贴上黑线作为警示。在可行使区域内摆放障碍物图片供小车识别。

8.2 智能小车

通过遥控器控制小车,测试红外线遥控器控制小车能否正常运转。之后测试小车上安装的鱼眼摄像头可以正常工作,并且返回图片和视频可以被接收。

9 测试数据

9.1 镜头畸变的测试

通过matlab 可以得到镜头的内参矩阵、切向畸变以及横向畸变。我们所使用的鱼眼摄像头有很少的切向畸变,但是有显著的横向畸变。

9.2 道路可行驶区域的识别

很明显的看出,图1 中可以完美的识别可行驶区域的范围,并且重合率接近100%,对简单的直线型停车线识别的准确率几乎可以达到100%。

9.3 鸟瞰图和全景图的获得以及障碍物坐标的返回的测试

通过图2 可以看出具体障碍物的坐标并将其标识在2D 地图上,并且在2D 地图上右侧可以返回四路的鸟瞰图,在2D 地图的右上角可以进行选择全景地图、倒车记录和鸟瞰图的查看。

10 结果分析

通过上述测试数据最终可以得到一个较为完整的辅助停车系统,整体可以实时返回障碍物的坐标,并且也可以比较清晰的返回鸟瞰图和全景地图,同时也能保存倒车时的影像,可以在必要时调用查看。

11 实现功能

(1)实现鱼眼图像矫正,使超广角照片畸变更小,更接近于人眼直接观看的效果;

(2)使用矫正后的照片进行360 度全景图像拼接,并实时形成汽车四周的鸟瞰图,使泊车辅助效果更好;

(3)对交通目标(人,汽车,狗,自行车,车道等)进行识别,对识别的目标进行测距,实时反馈到2D 地图上,使对障碍物的观察更加直观;

(4)保存停车视频历史记录,方便事后回放复盘。

猜你喜欢
鱼眼树莓全景
面向鱼眼图像的人群密度估计
戴上耳机,享受全景声 JVC EXOFIELD XP-EXT1
基于树莓派的骑行智能头盔设计
全景敞视主义与侦探小说中的“看”
微信扫一扫马上看视频鱼眼视频 小程序每天带你看最有意思的摄影视频
基于树莓派的远程家居控制系统的设计
从5.1到全景声就这么简单 FOCAL SIB EVO DOLBY ATMOS
响应面法优化红树莓酒发酵工艺
欧盟:速冻树莓比鲜食树莓市场更好
鱼眼里的爱情