【第十七届智能车】智能车图像处理(4)-元素识别(三岔)_智能车赛道识别

41 阅读8分钟

三岔是三个120°V形拼在一起的构象,在几何上对称,所以出入三岔的识别基本一致,但是在斜对三岔时需要特殊处理,减少误判。

预识别条件:

  1. 图像中线上存在很长的黑色部分(三岔中间的黑色尖);
  2. (可选)赛道宽度上大下小的行数达到阈值(满足1且赛道宽度倒置,是三岔的特有现象);
  3. (可选)赛道边界横坐标变化趋势连续数行发生倒置(从上到下离中线越来越近,而不是越来越远)。

决定识别条件:

​ 三岔的三个120°V形拐点中,中间V拐点存在,左右V拐点至少存在一个。

示意图

(1)远端情况

以下示意图情况我称之为远端情况,左/右侧V拐点在图像中是可见的,这种情况使用最基本的远端条件,找拐点就可以轻松完成判定;

正入三岔示意图:

在这里插入图片描述

斜入三岔示意图:

在这里插入图片描述

这种情况多发生在即将出三岔、过急弯后入三岔时。入三岔时机的前后,也会导致图像有巨大的差异。

(2)近端情况

在过急弯后进入三岔,可能出现图像处理跟不上车速的情况,这时候进入三岔,视野内只会剩下中间V拐点,这种情况我称之为近端情况,这时候需要引入一个近端条件进行辅助判断:两条参考线的至少一侧均丢边

在这里插入图片描述
近端实拍:

在这里插入图片描述
在这里插入图片描述

三岔的各个状态

以下状态按照时间顺序排列,且在识别程序的状态切换过程中,进入下一个状态的前提是状态位已经置为上一个状态

  1. 尚未进入三岔:

(1)远端条件:视野内存在三个(正入)V拐点或者两个(斜入)V拐点,但是中间V拐点一定存在;

(2)近端条件:中线黑线足够长,中间V拐点存在,近端两条参考线的一侧均丢边;

三岔标志位置位,三岔状态位置1,入三岔补线开始; 2. 车头即将拐入三岔:此时视野下方会有很大的白色区域,此时选定的近端某行参考线,至少有一侧会发生丢线(视野内类似斜入三岔的情况),三岔状态位置2(此时编码器积分开始,在积分过程中锁定三岔判断,不进行识别,防止所有三岔状态转换在第一次认到三岔的几帧内直接就全部完成了,三岔标志异常清除); 3. 车头已经进入三岔:选定的两行参考线两侧均不丢线(这时车头应该在进入三岔很短的那一小段直道内),三岔状态位置3,入三岔补线结束; 4. 车在三岔内的直道行驶:正常循迹行驶,编码器照常积分; 5. 车头进入即将出三岔的那个弯道:视野内会出现一侧的尖点,当编码器积分结束,重新使能三岔判定后,这个时候很容易发生误判导致提前清标志位,在这里我临时引入了近端参考线两侧均不发生丢边的条件进行限制,防止在这一段出现提前误判; 6. 车头即将遇到三岔出口,斜对三岔:视野内会出现中间V拐点和一侧V拐点(也可能出现两个V拐点,因为是斜对三岔的,图像也是斜的,此时状态V拐点不是很好认,识别滞后车很容易冲出去,我采用的解决方案是在上一个状态进入后临时减少中线黑线长度阈值,退出三岔时再把这个阈值加回去),此时重新认到三岔,三岔状态位置4,出三岔补线开始; 7. 即将出三岔:视野内认不到左右侧V拐点了,三岔状态位置5; 8. 出了三岔:两条参考线两侧均不丢线,清除三岔状态位和三岔标志位,出三岔补线结束。

具体的示例图片这里也不放了,需要注意的主要就是状态2、状态5和状态6,这三个状态下非常容易发生误判!由于今年省赛赛道的特殊性,我们选择的是车库出来向十字方向发车,在出了三岔之后斜对斑马线也很容易误判三岔(可以通过限制V拐点判定区域、引入参考线判定进行规避,也可以使用CD机制给每个元素的判断都加上CD),这些状态分组可能做的不是很好,使用的时候肯定是需要微调的!

识别程序编写思路

  1. 需要提前设置的一些阈值

    • 三岔中线黑线长检测行数,只有在图像上方的这些行内检测黑色部分长(防止与十字误判)
    • 三岔远/近端识别中线黑线长阈值,分别指定远端和近端进入三岔条件,远端进入的数值要比近端小,调整这个数值可以调节识别前瞻,低了容易误判高了识别较晚来不及打弯进入三岔,需要自行把握
    • 已在三岔中,二次判定三岔中线黑线长阈值减少值,用于帮助出三岔二次判断,但我最后没有使用
    • (可选)三岔赛道宽度倒置阈值,我最后并没有使用
    • (可选)三岔赛道宽度倒置改变阈值,我最后并没有使用
  2. 思路

注意:三岔在使用全图进行判定的时候很容易在弯道、斑马线或是已经进入三岔、但是还没有出三岔的那个弯道内发生误判,所以这里对V拐点的判定需要截取一部分图像进行,以此限制V拐点在图像中的有效坐标,可降低误判率并方便补线。

(1)统计中线上黑色线段长度;

(2)(可选)判定赛道宽度上大下小行数是否达到阈值,赛道边界横坐标“上外下里”倒置行数是否达到阈值;

(3)V拐点的判定:

①左右侧V拐点的判定

左右侧V拐点判定相对简单,只需要从下至上判定边线的斜率是否发生突变即可。图像的坐标原点在左上角,正常直道情况下,左边线斜率为-1.5左右,右边线斜率为+1.5左右。而在三岔,边线发生了外拐的情况,这时候势必可以造成边线斜率的正负变化,通过每间隔10行取一个边线上的点计算该段斜率并存储至一个数组中,遍历这个数组即可轻易发现边线斜率是否存在突变。同时,可以限制对V拐点坐标的检出范围,以降低误判概率。

在这里插入图片描述

②中间V拐点的判定

中间V拐点的判定相对复杂,但其实和十字寻找L角点有相似之处。第一步,从全图的最下方开始,逐列、向上扫描黑白交界点,将扫描出来的黑白交界点纵坐标存入一个数组(这一步和十字基本一致)。第二步,根据扫描到的黑白交界点纵坐标数组,分析其中的数据特点,判定是否找到了中间V拐点。由已有的上黑白交界数组为基础,其中的数据大致会呈现“M”型分布(见下方的示意图),中间V拐点即为此M的中间点,寻找其需要分为两步:1.从左向右找到M型上的第一个尖点位置,即数组开始变大的点;2.找到M型上的第二个尖点位置即为所求V拐点坐标,即在数组变大后开始变小的点,这就是所求的中间V拐点。

在这里插入图片描述

补线程序编写思路

  1. 传统补线方式

收集整理了一份《2024年最新物联网嵌入式全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升的朋友。 img img

如果你需要这些资料,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人

都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!