1.一种基于机器视觉的障碍物识别方法,其特征在于包括如下步骤:S1:从采集到的图像中确定并提取警戒线区域;
所述步骤S1具体包括:
对采集到的图像进行预处理,图像的预处理包括对采集的图像首先进行中值滤波处理,然后再进行双边滤波去噪;
首先将预处理后的警戒线图像转换到hsv空间;然后根据警戒线的颜色特征生成阈值,对hsv空间中的警戒线图像根据阈值进行二值化;再对二值化后的图像进行霍夫变换寻找直线,对寻找到的所有直线按照纵坐标进行排序获取纵坐标最小的直线,获取该直线在图像中的位置信息以此来确定警戒线区域;
首先根据寻找到直线的位置信息生成一个包含警戒线的矩阵区域,然后构建一个和警戒线图像同宽高的图像,再对构建的图像进行初始化将矩阵区域设置为白色,其它区域为黑色,最终得到一个黑白图当作掩码;
将生成的掩码与采集到的警戒线图像进行与运算最终达到提取出警戒线区域的效果;
S2:对警戒线区域进行边缘提取;
所述步骤S2具体包括:
首先将提取到的警戒线区域转换成灰度图,然后对灰度图使用Canny算子进行边缘提取;
获取边缘提取后的图像中非警戒线边缘的横向线段;
获取边缘提取后的图像中非警戒线边缘的纵向线段;
对得到的横向和纵向线段进行霍夫变换寻找直线得到每条线段的位置信息,最后根据每条线段的位置信息制作掩码,构建一个和警戒线图像同宽高的图像,对构建的图像进行初始化,线段的区域设置为黑色,其它区域为白色;
将得到的掩码与边缘提取的图像进行与运算实现过滤掉非警戒线边缘的线段;
S3:根据颜色特征提取对应的警戒线区域;
S4:用提取到的警戒线区域填充边缘提取的图像;
S5:对步骤S4填充后的警戒线图像进行轮廓提取,识别出警戒线。
2.如权利要求1所述的基于机器视觉的障碍物识别方法,其特征在于,所述S1具体包括如下步骤:S11:对采集到的图像img进行滤波处理得到图像middle_img;
S12:对滤波处理后的图像middle_img进行滤波去噪,得到图像bilater_img;
S13:将图像bilater_img转换成hsv空间图像得到图像hsv_img;
S14:根据黄色在hsv中的值设置出阈值,其中阈值的下限为low(min_h,min_s,min_v),阈值的上限为high(max_h,max_s,max_v)其中,hsv_yellow为hsv空间中黄色的hsv值,hsv_min为在hsv空间中能检测到黄色的最小hsv值,hsv_max为在hsv空间中能检测到黄色的最大hsv值,(min_h,min_s,min_v)为low的具体值,(max_h,max_s,max_v)为high的具体值;
S15:对图像hsv_img进行阈值处理得到图像mask1,其中阈值的下限为low(min_h,min_s,min_v),阈值的上限为high(max_h,max_s,max_v),将在阈值范围内的图像变为白色,阈值范围外的图像变为黑色,此处阈值公式为:S16:使用3*3的卷积核对mask1进行膨胀操作,迭代次数为itera1次,得到图像dilation_img,迭代次数确定公式为:其中itera1为膨胀的迭代次数,s_w为白色区域的面积,size_kmax为卷积核的大小;
S17:对图像dilation_img使用Canny算子进行边缘化操作得到图像canny_img1;
S18:对图像canny_img1进行霍夫变换寻找直线得到所有直线lines,并保存到lines_list列表中;
S19:对lines_list列表按照y坐标进行排序得到y坐标值最小的点dot(x1,y1)所在的直线;
S110:初始化一个与图像img同宽高的黑白图像same_img,初始化公式为:其中,same_img(x,y)为same_img图像x,y坐标的值,y1为dot点的纵坐标,w_con为警戒线区域的高度,t1、t2为浮动的范围;
S111,将黑白图像same_img当作掩码与采集到的警戒线图像img进行与运算,提取警戒线区域。
3.如权利要求1所述的基于机器视觉的障碍物识别方法,其特征在于,所述S2具体包括如下步骤:S21:将图像img转换成灰度图gray;
S22:将图像same_img作为掩码对灰度图gray进行与运算得到图像bit_img;
其中,bit_img(x,y)为bit_img图像x,y坐标的值,same_img(x,y)为same_img图像x,y坐标的值,dilate_img(x,y)为dilate_img图像x,y坐标的值,gray(x,y)为灰度图gray的x,y坐标值;
S23:对图像bit_img使用Canny算子进行边缘化操作得到图像canny_bit;
S24:对图像canny_bit进行霍夫变换寻找较长的直线将起始点和终点的坐标存储到lines列表中;
S25:对lines列表中每个线段的坐标生成掩码得到图像mask_reline公式如下:其中,mask_reline(x,y)为图像mask_reline的x,y坐标的值,y2为各个线段起点的纵坐标;
S26:构造hors_k*1的卷积核kernel_hors与mask_reline进行itera次腐蚀操作用来得到横向较短线段得到图像mask_reh,其中:其中,width为图像img的宽度,kernel_hors为所用卷积核,itera为迭代次数,s_d为黑色区域的面积,size_kmin为卷积核的大小;
S27:对图像mask_reh进行霍夫变换,寻找的直线存储到列表list_line1中;
S28:根据list_line1中的直线生成掩码mask_h公式如下:其中,mask_h(x,y)为图像mask_h的横纵坐标的值,width为图像img的宽度,y3为list_line1中线段的纵坐标;
S29:构造1*vert_k的卷积核kernel_vert与mask_reline进行腐蚀操作,用来得到纵向较短线段,迭代次数为itera2得到图像mask_rev;
其中,itera2为膨胀的迭代次数,s_d为黑色区域的面积,size_kmin为卷积核的大小,height为图像img的高度,kernel_vert为具体的卷积核;
S210:对图像mask_rev进行霍夫变换,寻找的直线存储到列表list_line2中S211:根据list_line2中的直线生成掩码mask_v公式如下:其中,mask_v(x,y)为图像mask_v的横纵坐标的值,height为图像img的高度,x1为list_line2中线段的横坐标;
S212:将图像mask_h与图像mask_v进行与运算得到图像canny_img。
4.如权利要求1所述的基于机器视觉的障碍物识别方法,其特征在于,所述S3具体包括如下步骤:S31:根据黑色在hsv中的值设置出阈值,其中阈值的下限为blacklow(min2_h,min2_s,min2_v),阈值的上限为blackhigh(max2_h,max2_s,max2_v)其中,hsv_black为hsv空间中黑色的hsv值,hsvblack_min为在hsv空间中能检测到黑色的最小hsv值,hsvblack_max为在hsv空间中能检测到黑色的最大hsv值,(min2_h,min2_s,min2_v)为blacklow的具体值,(max2_h,max2_s,max2_v)为blackhigh的具体值;
S32:对图像hsv_img进行阈值处理得到图像mask_b,此处阈值公式为:其中,阈值的下限为low1(min2_h,min2_s,min2_v),阈值的上限为high1(max2_h,max2_s,max2_v),将在阈值范围内的图像变为白色,范围外的图像变为黑色;
S33:将图像mask_b和图像same_img进行与运算得到图像mask_black;
其中,mask_black(x,y)为mask_black图像x,y坐标的值,same_img(x,y)为same_img图像x,y坐标的值,mask_b(x,y)为mask_b图像x,y坐标的值。
5.如权利要求1所述的基于机器视觉的障碍物识别方法,其特征在于,所述S4具体包括如下步骤:S41:将图像mask1与图像canny_img进行与运算操作得到图像bit_yellow;
其中,bit_yellow(x,y)为bit_yellow图像x,y坐标的值,canny_img(x,y)为canny_img图像x,y坐标的值,mask_1(x,y)为mask_1图像x,y坐标的值;
S42:将图像mask_black与图像bit_yellow进行与运算操作得到图像bit_b;
其中,bit_b(x,y)为bit_b图像x,y坐标的值,bit_yellow(x,y)为bit_yellow图像x,y坐标的值,mask_black(x,y)为mask_black图像x,y坐标的值;
S43:使用7*7的卷积核对bit_b进行膨胀操作,迭代次数为itera3次得到图像dilation_mask:其中,itera3为膨胀的迭代次数,s_w为白色区域的面积,size_kmin为卷积核的大小。
6.如权利要求1所述的基于机器视觉的障碍物识别方法,其特征在于,所述S5具体包括如下步骤:S51:对图像dilation_mask寻找轮廓,得到所有轮廓保存于contours_list列表;
S52:对contours_list列表按照轮廓的周长进行排序获取周长最大的轮廓contour;
S53:初始化一个与图像img同宽高的黑白图像same_img2,初始化公式为:其中,same_img2(x,y)为same_img2图像x,y坐标的值,contour(x,y)为contour中每个点的x,y的坐标值;
S54:对图像same_img2寻找轮廓并画出轮廓得到最终的标记有警戒线的图像img_end。