首页 理论教育 智能汽车设计与实践基础:图像处理与信标灯识别

智能汽车设计与实践基础:图像处理与信标灯识别

时间:2023-09-21 理论教育 版权反馈
【摘要】:图9.22原始采集图像图9.23目标提取图像对于灰度信标图像,只需要根据环境光线给定合适的阈值即可,算法简单、成熟,故不再详细介绍。所以,可以以这条9.5 m远处测得的曲线为界,划定曲线之下的图像为需要的ROI。图9.26主摄像头加滤光片实拍及实际处理二值化图像图9.26展示了一个稳定的信标灯信号,可以看出稳定的信号中每一行亮的像素点连起来是一条连续的线段。

智能汽车设计与实践基础:图像处理与信标灯识别

前两个小节分别介绍了如何利用一个单片机采集来自一个摄像头的图像和采集来自两个摄像机的图像。掌握了这些知识并应用之后就能够获取到想要的原始数据,那么如何从这些原始数据矩阵中分析、提炼出真正关心的数据?下面就简单介绍一下图像处理算法

首先介绍彩色信标图像的处理方法。

本系统采用的RGB色彩模式是工业界的一种颜色标准,通过对红(R)、绿(G)、蓝(B)三个颜色通道的变化以及它们相互之间的叠加来得到各式各样的颜色,RGB即是代表红、绿、蓝三个通道的颜色,这个标准几乎包括了人类视力所能感知的所有颜色,是目前运用最广的颜色系统之一。

在进行摄像头初始化时,选择RGB565编码格式,即每个像素用16位表示,RGB分量分别使用5位、6位、5位,通过位与及位移操作,即可分别提取R、G、B三个通道的色彩值。在本方案中,使用RT1052处理RGB图像,算力本身非常强大,不需要进行预处理,即先将三个通道的数组值提取出来,只需在使用到某通道色彩值的时候提取即可。

一般来说,使用MATLAB进行图像处理更为方便,所以先在MATLAB上设计、验证算法,再移植到程序当中。

下面以提取红色信标图像为例,介绍算法在MATLAB中的具体实现过程。

通过位与和位移操作提取RGB三个通道的值,由于编码格式为RGB565,对于R通道,需要将高5位取出,并右移8位,以保证256阶亮度;同理,对于G通道,将5至10位取出,并右移3位,对于B通道,将低5位取出,并左移3位,代码如下。

将三个通道的值组合后可复原彩色图像,利用impixelinfo函数可方便地查看目标像素点的RGB通道值,分析特征,并作为目标提取依据,代码如下。

分析发现当三个通道关系满足R≥248&&B≥80&&R>B时,可以提取出红色信标信息,此时,可以通过分析环境内的其他背景信息,对该关系作进一步限制,以减少环境的干扰,使目标提取更为准确。例如,当视野中出现了R-G≥70&&R>B的像素点时,才判定该行为图像提取开始行,认为该行之前的图像均为仅包含无效信息的背景。这种做法可以最大程度地契合环境,达到较好的提取效果,但对环境的时不变性要求较高。典型的处理结果如图9.22和图9.23所示。

图9.22 原始采集图像

图9.23 目标提取图像

对于灰度信标图像,只需要根据环境光线给定合适的阈值即可,算法简单、成熟,故不再详细介绍。

下面讨论视野剪裁,以降低算法的时间复杂度。一般来说,摄像头视野之内并不都是我们关注的区域。图9.24展示了一个未添加滤光片的小车放置在5 m×8 m场地一角所拍摄的灰度图片,可以看到,远处的亮点是场地的另外一个角落,这个角落以上的图像以及场地周围围栏之上的图像都是我们并不关注的区域,那么我们就会考虑把这部分的图像裁掉。实际上这样做有两个好处,一是节省了部分的计算量,毕竟不在感兴趣区域(ROI,Region of Interest)之内;二是也能避免一些场地外围复杂环境的干扰(如图9.24所示环境中的灯光、从窗户漏进来的阳光,这些主动光源使得摄像头即使加了红外滤光片也无法将它们滤掉)。那么在170°广角摄像头的严重畸变下,有没有办法圈出感兴趣区域呢?

图9.24 小车主摄像头于场地边缘实拍

以灰度图像为例,如图9.25所示的是车模距信标灯一定距离后缓慢旋转车模得到的关于信标灯在图像中位置(位置已经化为一个点的坐标,稍后会讲到算法)连接成的曲线。每条曲线代表车模距信标灯的距离,从最下面往上分别为0.4,0.6,0.8,1.0,1.2,1.4,1.6,1.8和9.5 m。

(www.xing528.com)

图9.25 不同距离旋转时信标灯在图像中的位置变化

通过图9.25能很明显地看到当小车距离信标灯位置不变,而面对信标灯的角度不断变化时,信标灯在图像上的坐标变化近似于一个二次曲线。随着车模远离信标灯,这些二次曲线的顶点纵坐标在向上移动,而且移动过程中这些曲线并不会相交。其实,只要分析一下成像关系,这些都很好理解。经过实验的验证,可以得出结论:如果信标灯距离车模的距离小于9.5 m(这个值已经大于比赛场地对角线长度),那么这个信标灯在小车的视野中,一定会出现在最上面的那条线之下。所以,可以以这条9.5 m远处测得的曲线为界,划定曲线之下的图像为需要的ROI。从后期测试结果来看,只要车模在平整的地面运行,这种在程序里用参数限制视野的方法非常稳定高效。至于车模在驶入信标固定盘和驶出信标固定盘、地面不平整时,只要略微修改参数也能获得极佳效果。

除此之外,尽管限定了图像的ROI,但也不能保证在车模的视野范围之内就不会出现一些杂光、干扰点(有可能是感光芯片的底噪、镜头的眩光,甚至光亮地面的反射红外光)。在数字图像处理中,滤噪声是一项基本操作,一些常用的滤波手段也十分成熟,如空域高斯滤波、空域中值滤波、频域低通滤波等。不过,考虑到K60芯片的运算速度和经过红外滤光片后二值化图像的较高质量,可以采取一些简化的滤波手段,加快图像处理速度。

图9.26 主摄像头加滤光片实拍及实际处理二值化图像

图9.26展示了一个稳定的信标灯信号,可以看出稳定的信号中每一行亮的像素点连起来是一条连续的线段。所以,可以这样写滤波算法:在ROI中依序扫描每一行,如果检测到一条长度大于3个像素点的线段,则把它存下来;否则,置之不理。经此处理后,任何在水平方向上长度小于等于3的离散点都会被过滤掉。考虑到噪声信号的随机性,从概率的角度来讲,基本上不会有噪声恰好连成一条线段。即使是地面反射的信标灯红外信号,由于它的强度不均匀,通常二值化后要么消失要么变成不连续的离散点,也可以被这种滤波方法滤除掉。在实际使用中,这种自创的方法一向奏效。

下一步要做的就是从一幅质量合格的图像中确定出信标中心点的坐标。在上述的滤波方法下,就已经顺便把问题转化为检测一条合格线段的头部和检测一条合格线段的尾部。这样,只需将ROI之中所有的像素点读取一遍,在计算时只拿出少量的有用信息,就大大减少了CPU计算量和反复大量读取内存占用的时间。获得这些线段的同时,可以记录下这些线段的最小行和最大行,两者的中间就可以当作信标灯的Y坐标;再在Y坐标这一行,找这一行线段的像素点的最左列和最右列,两者的中间列就可以当作信标灯的X坐标。至此,最基本的数字图像处理功能就已经被实现了。另外,在检测线段时,可以为其分配一个K60寄存器,记录前几个像素点状态,以加快整个程序运行速度。在180 MHz主频下,整个图像处理程序花费3 ms。总结一下数字图像处理部分需要做的事:①圈定ROI;②图像二值化(静态二值化只是一个比较数值的过程,在此省去未讲,动态二值化也可由读者自行思考);③图像滤噪;④计算信标信号坐标。

下面介绍本方案中避障摄像头的图像处理方法,涉及前文讲到的视野剪裁,并提出了自适应阈值算法。本方案的避障摄像头与寻标摄像头位于同一垂直平面上,以尽可能地保证有足够的前瞻,但这样一来,避障摄像头成像中线不再与车身中线重合,处理得到的障碍信息也发生了相应的位移,当然,这个位移与两中线距离并不是线性的关系。因此,考虑直接进行视野剪裁并预畸。首先,采集如图9.27所示的赛道信息,经过边缘提取后(图9.28),可获取左右边界和中线对应的图像x值,这样,不仅知道了障碍搜索的范围,又知道了障碍是偏左还是偏右。最后,可以将相关信息事先储存在程序中,单片机可以方便地通过查表的方式进行图像处理。

图9.27 原始赛道信息图

图9.28 边缘提取信息

若图像行数为ROW,则可定义一个j_BeginAndEndOfOb_Cam[ROW][2]的二维数组:

其中j_BeginAndEndOfOb_Cam[i][0]代表第i行的搜索起始边界,j_BeginAndEndOfOb_Cam[i][1]代表第i行的搜索结束边界。值得注意的是,当不需要对某些行进行扫描搜索时,可以将其设置为{0,-1},可以提高for循环的执行效率

对于中线,定义一维数组j_MidOfOb_Cam[ROW]进行存储:

j_MidOfOb_Cam[i]表示第i行的中线值。同样,当不需要对某些行进行扫描搜索时,其中线值可设置为-1。

此外,由于图像的畸变,采集的左右边界和中线可能行数会不统一,需要人为地删除一些数据。例如,当中线行数较多时,采用隔几行删除一行中线数据的方式,既可以实现行数统一,又方便保留中线信息,而不影响小车对障碍位置的判断。

对于灰度信标图像,要想准确无误地将信标图像提取出来,需要给定一个合适的阈值,将灰度图像进行二值化。当小车处于光线较为均匀的环境中时,可以通过人机交互单元人为地调出一个较合适地阈值。但是,从比赛的发展趋势来看,会更多地考验小车在复杂光线环境下的性能。障碍图像的处理不同于信标图像。因为障碍本身并不发光,而是对外界光线进行反射,所以,在光线不均匀的情况下,使用单一、固定的阈值很难将障碍信息提取出来。本方案提出了一种简单、高效的自适应阈值算法,下面介绍其具体实现原理。第一步,在几种典型的光照情况(如很暗、较暗、适中、较亮、很亮)下,分别测定图像的平均灰度值x与对应的阈值T,得到分段函数T(x);第二步,将数字图像按照一定的规律(如六等分)进行分割,计算每个区域的平均灰度值;第三步,根据T(x)求出每个区域的阈值。这样一来,在每一帧图像的不同区域均有不同的阈值,并且由于T(x)是时变的,该算法在处理复杂光线环境时,具备良好的空间与时间适应性。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈