发明名称 一种基于视觉的汽车列车直线行驶轨迹测量方法
摘要 本发明涉及一种基于视觉的汽车列车直线行驶轨迹测量方法,包括如下内容:在牵引车车头左侧和挂车车厢左侧分别安装高清第一摄像机5和第一摄像机6,要求摄像机垂直向下安装,使得摄像机光轴尽可能垂直于地面拍摄车头前下方的图像,该摄像机带补光设备以弥补光线不足;在牵引车的最前方,用固定线固定位置;在行驶过程中,第一摄像机和第一摄像机同时开始采集视频图像;获取摄像机拍摄的视频流,并通过上位机对视频进行实时处理。
申请公布号 CN103134429B 申请公布日期 2015.12.23
申请号 CN201310089237.7 申请日期 2013.03.19
申请人 南京智真电子科技有限公司 发明人 林国余;陈丁;董金松;张红卫;李晓天
分类号 G01B11/00(2006.01)I;G01B11/14(2006.01)I 主分类号 G01B11/00(2006.01)I
代理机构 江苏银创律师事务所 32242 代理人 何震花
主权项 一种基于视觉的汽车列车直线行驶轨迹测量方法,其特征在于:包括如下内容:1)在牵引车车头左侧和挂车车厢左侧分别安装高清第一摄像机(5)和第二摄像机(6),要求摄像机垂直向下安装,使得摄像机光轴尽可能垂直于地面拍摄车头前下方的图像,摄像机带补光设备以弥补光线不足;2)根据营业性货运汽车列车在平坦、干燥的直线路面上行驶时,挂车后轴中心相对于牵引车前轴中心的最大摆动幅度:全挂汽车列车应不大于200mm,半挂列车应不大于100mm,因此,在地面上绘制出两条平行标识线,即第一标识线,第二标识线;将第一标识线和第二标识线分别设为带色彩的标识线;3)在牵引车的最前方,沿着垂直于标识线方向,在第一标识线和第二标识线起始端画一条短直线,称为“固定线”,用于表示固定位置;4)开始实验时,首先令挂车停在车道中央,调整位置,使得挂车的纵向对称轴和地面的交线与第一标识线对齐,牵引车最前方与固定线齐平;实验开始后,让驾驶员驾驶车辆在车道内正常行驶;在行驶过程中,第一摄像机(5)和第二摄像机(6)同时开始采集视频图像;获取摄像机拍摄的视频流,并通过上位机对视频进行实时处理;所述的通过上位机对视频进行实时处理,包括以下几个步骤:步骤1:定义两个变量flag1、flag2,作为标记符号,并赋值flag1=0、flag2=0;步骤2:从摄像头视频流中读取一帧图像,并进行尺度标定;步骤3:判断是否能检测到新的标识线,检测的步骤如下:①首先确定第一标识线像素点和第二标识线像素点的判断条件,第一标识线像素点的判断条件为:根据像素点的RGB值,如果(R‑G)>ε<sub>1</sub>and(R‑B)>ε<sub>2</sub>and|B‑G|<ε<sub>3</sub>,其中ε<sub>1</sub>、ε<sub>2</sub>、ε<sub>3</sub>为阈值,此处分别取值100、100、20,则认为该像素点为第一标识线像素点;第二标识线像素点的判断条件为:根据像素点的RGB值,如果(B‑G)>ε<sub>1</sub>and(B‑R)>ε<sub>2</sub>and|R‑G|<ε<sub>3</sub>,其中ε<sub>1</sub>、ε<sub>2</sub>、ε<sub>3</sub>为阈值,此处分别取值100、100、20,则认为该像素点为第二标识线像素点;②根据①中的判断条件,在读取的图片中检测第一标识线像素点和第二标识线像素点的分量个数,并采用基于邻域搜索的连通域检测算法分别提取第一标识线目标点分量和第二标识线目标点分量个数,并保存各个坐标点的坐标值;③判断两个标记符号的值,如果flag1=0且flag2为任意值,则继续执行下面的步骤④,如果flag1=1且flag2为任意值,执行步骤4;如果flag2=0且flag1为任意值,执行下面的步骤⑤,如果flag2=1且flag1为任意值,执行步骤5;④判断第一标识线像素点个数,如果第一标识线像素点的个数大于200,则认为能检测到第一标识线,用最小二乘法拟合第一标识线的方程y=a<sub>r</sub>x+b<sub>r</sub>,并将flag1=1;⑤判断第二标识线像素点个数,如果第二标识线像素点的个数大于200,则认为能检测到第二标识线,用最小二乘法拟合第二标识线的方程y=a<sub>b</sub>x+b<sub>b</sub>,并将flag2=1,执行步骤6;步骤4:跟踪方法求第一标识线;根据图像已检测到的第一标识线的标识线方程y=a<sub>r</sub>x+b<sub>r</sub>,确定图像区域,即(y‑ε,y+ε),其中ε为阈值,取值20;根据第一标识线像素点的判断条件,即(R‑G)>ε<sub>1</sub>and(R‑B)>ε<sub>2</sub>and|B‑G|<ε<sub>3</sub>,其中ε<sub>1</sub>、ε<sub>2</sub>、ε<sub>3</sub>分别取值100,100,20,在(y‑ε,y+ε)区域内检测是否有第一标识线标识点;若有第一标识线像素点,采用基于邻域搜索的连通域检测算法将第一标识线像素点聚类,并用最小二乘法拟合新标识线参数;若没有第一标识线标识点,则认为是此帧图像没有检测到第一标识线的标识线,则fla<sub>g</sub>1=0;步骤5:跟踪方法求第二标识线;根据图像已检测到的第二标识线的标识线方程y=a<sub>b</sub>x+b<sub>b</sub>,确定图像区域,即(<sub>y</sub>‑ε,<sub>y</sub>+ε),其中ε为阈值,取值20;确定第二标识线像素点的判断条件,即(B‑G)>ε<sub>1</sub>and(B‑R)>ε<sub>2</sub>and|R‑G|<ε<sub>3</sub>,其中ε<sub>1</sub>、<sub>ε2</sub>、ε<sub>3</sub>分别取值100,100,20,并在(y‑ε,y+ε)区域内检测是否有第二标识线标识点;若有第二标识线像素点,采用基于邻域搜索的连通域检测算法将第二标识线像素点聚类,并用最小二乘法拟合新标识线参数;若没有第二标识线标识点,则认为是此帧图像没有检测到第二标识线的标识线,则flag2=0;步骤6:以第一标识线为基准线,根据所检测到标识线的方程,根据点到直线的计算公式来计算图像中心点到第一标识线的距离;其中,若图像中能够检测到第一标识线,则<img file="FDA0000811261430000021.GIF" wi="668" he="96" />若图像中只检测到第二标识线,则<maths num="0001" id="cmaths0001"><math><![CDATA[<mrow><mi>d</mi><mo>=</mo><mo>|</mo><msub><mi>b</mi><mi>r</mi></msub><mo>-</mo><msub><mi>b</mi><mi>b</mi></msub><mo>|</mo><mo>-</mo><mrow><mo>(</mo><mi>y</mi><mo>-</mo><mo>(</mo><mrow><msub><mi>a</mi><mi>b</mi></msub><mi>x</mi><mo>+</mo><msub><mi>b</mi><mi>b</mi></msub></mrow><mo>)</mo><mo>)</mo></mrow><mo>/</mo><msqrt><mrow><msup><msub><mi>a</mi><mi>b</mi></msub><mn>2</mn></msup><mo>+</mo><msup><msub><mi>b</mi><mi>b</mi></msub><mn>2</mn></msup></mrow></msqrt><mo>;</mo></mrow>]]></math><img file="FDA0000811261430000022.GIF" wi="845" he="101" /></maths>图像的中心点所在的位置反应了当前汽车列车的直线行驶所在的位置;步骤7:重复步骤2~步骤7,直到上位机发送停止处理的命令,就可以得出一系列d<sub>i</sub>(i=1,2…)的值,即为汽车列车的直线行驶的轨迹;②所述的基于邻域搜索的连通域检测算法流程如下:i)在所获得的图像中获取一个未被标记的第一标识线或第二标识线像素点,并对此点进行标记,并将此点置于先入先出的堆栈中;ii)从先入先出的堆栈中取出一个目标像素点,在二值化图像中的该目标3×3邻域中再次寻找未被标记的第一标识线或第二标识线目标像素点,对此第一标识线或第二标识线目标像素点进行标记,并将其置入先入先出的堆栈中;iii)重复步骤ii),遍历先入先出堆栈中的各个目标像素,找出所有符合条件的第一标识线或第二标识线像素点。
地址 210036 江苏省南京市鼓楼区汉中门大街301号