阮航,尚斐亚,张雯木,沈世斌

(南京师范大学 电气与自动化工程学院,江苏南京,210046)

0 引言

机器视觉是用机器代替人眼,通过CMOS/CCD 将被摄取目标转换成图像信号,传送给专用的图像处理系统进行测量和判断。它涵盖了光学、信号检测与处理、模式识别、软件设计等学科,有着诸多方面的应用[1]。图像识别的基本过程是通过传感器将图像信号转化为电信息,再进行图像的二值化、畸变矫正、透视变换、滤波等预处理后,进行特征的抽取和选择,作为决策依据[2]。由于机器视觉系统可以快速获取直观、全面的信息,而且易于自动处理,也易于同设计信息以及加工控制信息集成,因此,人们将机器视觉系统广泛地用于工业生产、农业、军事等领域[3]。

本课题以英飞凌公司的32 位三核单片机TC377 为主控制器,总钻风摄像头为核心传感器,如何处理摄像头采集的灰度图像信号,通过在处理器中经过算法决策可以得出转向的依据并使车模稳定循迹。

1 图像处理系统的实现方式

图像处理系统是本课题的主要内容,图像处理始于图像采集,原始图像要进行桶形畸变矫正处理、OSTU 二值化处理、四邻域BFS(广度优先搜索),以上针对整幅图像的预处理结束后,开始进行针对左右边线的搜线处理以及边线的特征分析、补线、中线计算。

1.1 原始图像采集

摄像头在准备传输图像之前将提前产生一个场中断信号且设置为高电平有效,同时,图像准备开始输出。接着摄像头会输出第一行的行中断信号,并在其为高电平且相机时钟信号为上升沿时采集像素点灰度信息。重复此步骤,直至一帧图像采集完成。

1.2 桶形畸变矫正

智能车赛题通常会对摄像头进行限高,因此,为了在直道、急弯中镜头都能稳定看到赛道的左、右边线,本课题选用140°广角摄像头。广角摄像头在提供宽阔视角的同时,也带来了桶形畸变(Barrel distortion)。它表现为图像中的直线在图像四角处弯曲向外,形成了一个像圆桶正视图般的形状,因此得名桶形畸变。140°广角镜头存在5%的桶形畸变,主要体现在图像的四角处,这也使得车模近点的赛道在图像的左下、右下角变形严重,畸变带来的弯折会混淆元素中的角点,故需要进行桶形畸变矫正。

本课题使用张氏标定法配合MATLAB,打印一张棋盘格,再用主板、摄像头采集不同角度、不同位置棋盘格的无损图像通过串口发送给电脑的上位机,导入MATLAB 的单目相机标定应用进行桶形畸变矫正,并查看效果。本课题在标定中获得并需要用到的参数有X 轴方向的焦距(FX)、Y 轴方向的焦距(FY)、X 轴方向的主点坐标(CX)、Y 轴方向的主点坐标(CY)、第一径向畸变系数(D1)、第二径向畸变系数(D2)[4]。

表1 相机内参

由于桶形畸变只涉及径向畸变,因此不需要切向畸变参数。得到相机内参后,声明一个与原始图像(RAW)二维数组大小相同的矫正后图像数组(UNDISTORTED)。从无畸变图像的第一个点开始,先利用FX、FY、CX、CY 将无畸变的像素坐标归一化到[-1,1]的范围内。

利用归一化后的无畸变像素点坐标计算径向畸变的平方和系数,并利用径向畸变系数计算该点对应的归一化后的原始图像像素点坐标,再将得到的归一化原始图像坐标去归一化。最后将得到的原始图像点对应的灰度值赋给无畸变图像,无畸变图像上188×120 个像素点,每一个都能计算出与之坐标对应的原始图像像素点,将原始图像上的灰度值填入无畸变图像即可完成矫正。

矫正效果如图5 所示,图像四个角处的畸变得到了明显的改善,原本边缘弯曲的边框变成了该有的竖线。

1.3 大津法二值化

常见的软件二值化算法有:固定阈值法、自适应阈值法、基于直方图的阈值法等。本课题选用的方法是一种常用的基于直方图的阈值法,名为大津法(Ostu)。它通过计算[0,255]范围内每一个灰度值在本幅图片中的类间方差,并找到最大类间方差对应的灰度值,作为二值化阈值,因此大津法也称最大类间方差法。其优势在于,大津法可以根据不同的输入图像自适应的选择阈值,在光线不均匀的场地具有较好的适应性。此外大津法的实现相对简单,只需要计算图像的直方图和类间方差,计算复杂度不高,本课题的算力资源可以满足要求。此外,在有阳光等双峰直方图的图像中,大津法的表现较好,可以自动找出最佳的阈值,有效勾勒图像的信息[5]。

大津法的详细步骤如下:

(1)假设初始有个阈值T0,将图像分为前景F 和背景B 两个部分。

(2)假设像素的总个数为N,前景像素个数为Nf,背景像素个数为Nb。

(3)假设图像的总灰度级为L-1,每个灰度级的像素个数为Ni。

计算出各灰度值类间方差后,选出最大类间方差对应的灰度值作为二值化的阈值,完成二值化。

大津法二值化效果如图6 所示,赛道和背景被清晰的区分开来。

1.4 四领域广度优先搜索(BFS)

得到二值化图像后,需要将赛道部分和图像中诸如反光、浅色杂物、相邻赛道之类的噪点排除,并将赛道部分的边界甄别出来。因此,需要对赛道主体部分进行连通域分析。

常用的连通域分析法有twopass 连通域分析法和四联通BFS 法。twopass 连通域分析算法的基本思路是,通过两次扫描二值化后的图像,来完成连通域的识别和分析。该方法避免了多次迭代和重复操作,运行时间稳定,且适用性广,但实现起来稍复杂,需要额外的存储空间。四联通BFS法简单易实现,时间和空间复杂度低,运行时间与图像的像素点数量成正比,当白点数量多时运行时间长,白点少时耗时少。考虑到单片机的算力资源,以及四联通算法在图像减小或压缩后的运行时间也会相应地减少,本课题采用四联通BFS 法来完成连通域分析[6]。

图像从高到低行数(ROW)递增,从左到右列数(COL)递增。当车在赛道上时,图像最下方中间的点必然是反应赛道的白点,从这个点开始,分析他的四领域,四领域中的白点按图示顺序入队,本点标记为赛道专用的灰度值,再按队列顺序分析下一个点。若某点周围出现黑点,则说明到达赛道边界,将其标记为赛道边界专用的灰度值。当图像中赛道的部分被分析完毕后,我们就可以得到一个只含赛道部分且边界清晰的图像。

四联通BFS 法的效果如图9 所示,赛道的边界被勾勒出来,排除了其他噪点。

2 搜线处理系统

图像预处理结束后,接下来对图像中赛道的轮廓进行操作,需要操作的数据量从整幅图像的像素点减少为了两边边线的像素点。首先,从图像的底端,向左右两边寻找边线的第一个点,称为种子。找到种子后,左右边线分别按照图10 中顺序,一一判断该点八邻域内的八个点是否是边线上的点。找到边线上的并存入边线结构体中的线段数组中,并记录此点对应的八邻域方向,即生长方向,记录完毕后将该点的灰度值修改,防止此点在下一个点的八邻域内,影响接下来的生长。如此循环往复,左右边线从种子生长为完整的边线[7]。再将边线中向图像上方生长的部分制作成一维边线数组,结合左右边线制作中线数组。制作的理想中线效果如图11 所示。

图1 图像预处理流程

图2 摄像头采集流程

图3 桶形畸变

图4 畸变程序部分代码

图5 桶形畸变效果图

图6 赛道二值化效果图

图7 图像坐标系与四邻域顺序

图8 BFS 队列图解

图9 四邻域BFS 效果图

图10 种子生长八邻域顺序

图11 理想中线效果图

3 结论

视觉循迹智能车是智能车中上限最高、算法最复杂的赛道,相比电磁、GPS 传感器,视觉传感器带来的信息更为丰富,可以在有限的车身规模中检测到远方赛道的信息。想要利用这种信息必须有适合在单片机上运行的处理大量图像数据的算法,既要考虑时间、空间复杂度,又要考虑面对不同道型、不同光照条件、不同车姿时软件系统的鲁棒性。未来需要继续对算法进行优化,提高时效性。

本文主要完成了图像的预处理算法,设计并优化了畸变矫正、二值化、四邻域算法。在搜线系统中,完成了对普通赛道的左右边线的分析,制作出理想的行驶中线,让车模可以平稳地通过特殊道型。