发明名称 基于单目视觉的道路边缘检测及粗定位方法
摘要 基于单目视觉的道路边缘检测以及粗定位方法,涉及机器视觉和智能控制领域。本发明针对连续的具有不同边缘特征的道路提供了两种道路边缘检测方法,适用于半结构化和非结构化的道路,可用于机器人的视觉导航及智能控制。一种是基于颜色的道路边缘检测方法,另一种是基于阈值分割的道路边缘检测方法。在得到道路边缘的基础之上,对图像进行逆透视投影变换,将前视图转化成俯视图,根据转换后的图像中的像素和实际距离的线性对应关系,计算机器人当前位置和道路边缘的垂直距离以及航向角。本发明的方法实施简单,抗干扰力强,实时性好,适用于半结构化道路、非结构化道路。
申请公布号 CN102682292B 申请公布日期 2014.01.29
申请号 CN201210144082.8 申请日期 2012.05.10
申请人 清华大学 发明人 王宏;严润晨;赵云鹏
分类号 G06K9/00(2006.01)I;G01C21/00(2006.01)I 主分类号 G06K9/00(2006.01)I
代理机构 北京思海天达知识产权代理有限公司 11203 代理人 楼艮基
主权项 1.基于单目视觉的道路边缘检测和粗定位方法,其特征在于,是一种半自动式的基于移动机器人单目视觉的道路边缘检测和粗定位方法,是在由操作人员操控的计算机和装在移动机器人上的单镜头CCD摄像机共同串接而成的基于单目视觉的道路边缘检测和粗定位系统中实现的,该方法是依次按照以下步骤实现的; 步骤(1),单镜头CCD摄像机将机器人前进时拍摄到的能反映道路和非道路边界两侧颜色差异的路况图像输入到计算机中显示; 步骤(2),操作人员根据所述的道路和非道路边界两侧的颜色差异,来选择性的启动设在所述计算机内的两个不同的软件模块; 对于道路和非道路边界两侧颜色有显著差异的RGB颜色空间彩色路况图像,启动基于颜色的道路边缘检测模块; 对于道路和非道路边界两侧颜色模糊且无明显边界的RBG颜色空间彩色路况图像,启动基于阈值分割的道路边缘检测模块; 步骤(3),所述基于颜色的道路边缘检测模块依次执行以下步骤进行道路边缘的检测; 步骤(3.1),参数初始化,读入所述RBG颜色空间的彩色路况图像,设置感兴趣区域ROI的范围为所述路况图像的1/4~1/2大小,从所述彩色路况图像左下角开始划分; 步骤(3.2),从所述彩色路况图像中取出感兴趣区域ROI的图像并转换到HSV颜色空间,得到新的路况图像; 亮度V′=max(R,G,B), 饱和度<img file="FDA00003299276200013.GIF" wi="606" he="184" />色度<img file="FDA00003299276200012.GIF" wi="997" he="287" />若H′&lt;0,则用(H′+360)代替,其中RGB分别为原像素点红、蓝、绿三色的亮度值,令V=255V′,S=255S′,H=H′/2; 步骤(3.3),按以下方式用openCV库中的cvCanny函数模块进行canny抽边,得到canny图: 设定步骤(3.2)得到的结果图像边缘连接处作为梯度阈值为50的控制边缘,内侧初始分割处作为梯度阈值为150的控制强边缘,输入为感兴趣区域ROI的HSV颜色空间图像和上述两个梯度阈值;输出为canny抽边图; 步骤(3.4),设定HSV的颜色范围区间,把绿色区域或土黄色区域提取出来,其中绿色的范围区间为(20,0,0)~(70,40,0),土黄色的范围为(10,0,0)~(30,0,150); 步骤(3.5),利用openCV库中的cvErode函数模块对步骤(3.4)得到的绿色或土黄色区域进行腐蚀操作,输出为结果图像; 步骤(3.6),利用openCV库中的cvDilate函数模块对步骤(3.5)得到的结果图像进行膨胀操作,输出为经过腐蚀膨胀操作后的绿色或土黄色区域结果图像; 步骤(3.7),从步骤(3.6)得到的结果图像中提取拟合用的边缘点:为道路左侧边缘时,在步骤(3.6)得到的结果图像内,从右至左地扫描,若canny抽边图中某个边缘点左侧的5个像素内有绿色点,而右侧的5个像素内对应的没有绿色点,则认为该边缘点为真实边缘点,边缘点左右不足5个像素时,此边缘点直接舍去,得到一个真实边缘点样本集;对土黄色区域按同样步骤; 步骤(3.8),判断真实边缘点: 若所述真实边缘点样本集中,真实边缘点的个数m≥30,则执行以下步骤; 步骤(3.8.1),从所述真实边缘点样本集中,随机地选出两个真实边缘点,作为两个样本数据; 步骤(3.8.2),通过openCV库中的cvFitline函数模块,用最小二乘法拟合出一条直线;输入为步骤(3.8.1)得到的两个样本数据,计算误差类型为CV_DIST_L2,极坐标半径和角度误差均为0.01,输出为所拟合直线的斜率和截距;之后再统计与所述直线距离小于4个像素点的边缘点个数k,以此作为后续步骤拟合用的点; 步骤(3.8.3),若k/m大于0.3,则接受拟合模型,再通过所述的k个点利用最小二乘法重新拟合直线,即得到最终结果;否则,返回步骤(3.8.1);当重复执行次数大于设定的最大循环次数200次时,则失败;若所述真实边缘点样本集中的真实边缘点数小于30时则失败; 步骤(4),所述基于阈值分割的道路边缘检测模块,在道路右侧边缘处,依次做以下步骤进行道路边缘检测; 步骤(4.1),设置感兴趣区域ROI的大小为图像右下角1/4部分; 步骤(4.2),取出感兴趣区域图像,并按下式转换为灰度图像; v<sub>0</sub>(x,y)=0.212671×R(x,y)+0.715160×G(x,y)+0.072169×B(x,y), x,y代表所述图像中以左上角为原点的像素点坐标值;v<sub>0</sub>表示(x,y)像素点的灰度值,R表示彩色图像中所在像素的红色通道值,G表示彩色图像中所在像素的绿色通道值,B表示彩色图像中所在像素的蓝色通道值,v<sub>0</sub>,R,G,B都在[0,255]内; 步骤(4.3),按下式对像素点(x,y)进行均值模糊处理,将以(x,y)为中心的5×5的像素值矩阵V与核矩阵K卷积,得到新的像素值V1; v<sub>1</sub>(x,y)=V*K,*表示卷积, <img file="FDA00003299276200031.GIF" wi="631" he="281" /><img file="FDA00003299276200032.GIF" wi="1943" he="335" />步骤(4.4),计算每个灰度值对应的像素点数,制成颜色直方图; 步骤(4.5),设定CCD摄像机获取的感兴趣区域图像,在灰度空间中的值域为[0,l-1],l∈(0,255]; 按下式计算评判值η(t),遍历所有灰度值的评判值,选出评判值最大的一个灰度值作为分类最优的灰度阈值; <img file="FDA00003299276200033.GIF" wi="409" he="117" />其中,<img file="FDA00003299276200034.GIF" wi="126" he="79" />为根据灰度分类阈值t划分的大于和小于等于该值的两类像素点,通过计算出现概率P<sub>0</sub>(t)、P<sub>1</sub>(t)而得到的类间方差;<img file="FDA00003299276200035.GIF" wi="1041" he="79" /><img file="FDA00003299276200036.GIF" wi="758" he="83" />p<sub>i</sub>为灰度值i的像素点出现的概率;图像的总像素为<img file="FDA00003299276200037.GIF" wi="266" he="84" />n表示灰度值为i的像素点数,利用直方图的结果计算得到灰度为i的像素出现的概率为<img file="FDA00003299276200038.GIF" wi="173" he="102" />P<sub>0</sub>(t)、P<sub>1</sub>(t)是根据所述灰度阈值t划分的两类的灰度值出现概率;μ<sub>T</sub>(t)为整个灰度值值域内像素点的概率加权总和; <img file="FDA00003299276200039.GIF" wi="1463" he="110" /><img file="FDA000032992762000310.GIF" wi="134" he="81" />为根据灰度阈值t划分的大于和小于等于该值的两类像素点,通过计算出现概率而得到的类内方差;其中,μ<sub>0</sub>(t)、μ<sub>1</sub>(t)分别为在阈值t以下和以上的灰度值值域中,像素点出现的概率的加权均值; <img file="FDA000032992762000311.GIF" wi="1206" he="109" />步骤(4.6),基于步骤(4.5)得到的灰度分类阈值t,分别把高于所述灰度分类阈值t以及低于所述灰度分类阈值t的两类像素点,将其灰度值按下式进行二值化处理; <img file="FDA000032992762000312.GIF" wi="631" he="131" />v(x,y)为进行二值化处理后的像素灰度值; 步骤(4.7),利用所述openCV库中的cvCanny函数模块对步骤(4.5)得到的二值图像进行canny抽边,输出为canny抽边图像;设定作为边缘连接处的控制边缘连接的像素梯度阈值为50,作为边缘初始切割处的控制强边缘连接处的像素梯度阈值为100; 步骤(4.8),对于步骤(4.7)得到的二值化处理以后的canny抽边图,按照从左到右取得第一个白色边缘点,作为边界点,得到一个边界点集; 步骤(4.9),利用openCV库中的cvHoughLines函数模块对步骤(4.8)得到的边界点集中的所有边界点进行Hough直线拟合,得到道路边缘;设定极坐标半径的分辨率为3个像素点,极坐标角度分辨率为<img file="FDA00003299276200041.GIF" wi="63" he="101" />直线转换到极坐标上需通过该直线的曲线条数最少为50;步骤(5),按以下步骤进行机器人和道路边缘的相对粗定位; 步骤(5.1),把步骤(4)检测得到的路况边缘的前向图通过做逆透视投影变换得到道路边缘的俯视图,步骤如下: 步骤(5.1.1),用机器人上的摄像机拍摄一幅带有梯形图像,在俯视图中为矩形的前向图; 步骤(5.1.2),在步骤(5.1.1)得到的前向图中选择一个梯形的四个顶点,记录坐标; 步骤(5.1.3),任意设置俯视图中矩形大小与像素的对应关系,从而得到所述四个顶点在做完逆透视投影变换后得到的俯视图中的四个顶点,记录坐标; 步骤(5.1.4),利用openCV中的cvWrapPerspectiveQMatrix函数模块,求出逆透视投影变换矩阵H,输入为步骤(5.1.2)、(5.1.3)中的两套坐标构成的两个4×2的矩阵,输出为逆透视投影变换矩阵H; 步骤(5.1.5),把所述前向图和逆透视投影变换矩阵输入openCV中的cvWrapPerspective函数模块中,得到逆透视投影变换后的俯视图; 步骤(5.2),按以下步骤计算航向角偏差和横向位移: 所述航向角偏差是指机器人行驶方向AC与道路边缘线的延长线AE之间的夹角θ, 所述横向位移是指所述机器人行驶方向AC上的机器人中心B到所述道路边缘延长线上的垂直距离BD; 步骤(5.2.1),求航向角偏差θ, 在所述前向图的道路边缘线上任意两点,将其中的每一个点的坐标乘以所述逆透视投影变换矩阵H,就得到所述道路边缘线的延长线上对应两点的坐标(x<sub>1</sub>,y<sub>1</sub>)、(x<sub>2</sub>,y<sub>2</sub>),相应的直线AE的斜率k=(y<sub>2</sub>-y<sub>2</sub>)/(x<sub>2</sub>-x<sub>1</sub>),则θ=90°-arctan(k);若x<sub>1</sub>=x<sub>2</sub>,则θ=0°; 步骤(5.2.2),求横向位移BD, 步骤(5.2.2.1),设定:所述俯视图的左上角为坐标原点,坐标用像素点表示,每一个像素点对应实际长度为7.5mm,在步骤(5.1.3)中设置俯视图坐标时设定的;联立如下方程可 得到机器人行驶方向AC中A的纵坐标为h; <img file="FDA00003299276200051.GIF" wi="513" he="132" />width表示图像宽度,步骤(5.2.2.2),设机器人行驶方向AC与所述俯视图的交点C的纵坐标为图像高度height,则从C点到道路边缘线的延长线的垂直距离为CE=sin(θ)*7.5*(h-height); 步骤(5.2.2.3),按下式计算横向位移BD: BD=sin(θ)*7.5*(h-height-d/7.5) d是机器人中心B和俯视图下边缘的垂直距离BC,也是机器人前方的盲区距离,单位为mm。 
地址 100080 北京市海淀区清华园1号