首页> 中国专利> 一种基于车窗角点检测和多方向投影的车窗精确定位方法

一种基于车窗角点检测和多方向投影的车窗精确定位方法

摘要

本发明提出了一种先通过SVM检测车窗下面两个角点来粗略定位车窗位置,然后结合多方向投影来进行车窗边缘精确定位的方法;通过使用本发明的方法对车窗进行定位操作,它可以非常精确得定位到车窗边缘,并且对于车窗上下边缘存在倾斜的情况也可以进行定位。

著录项

  • 公开/公告号CN108108656A

    专利类型发明专利

  • 公开/公告日2018-06-01

    原文格式PDF

  • 申请/专利权人 浙江工业大学;

    申请/专利号CN201711134164.3

  • 申请日2017-11-15

  • 分类号

  • 代理机构杭州浙科专利事务所(普通合伙);

  • 代理人杜立

  • 地址 310014 浙江省杭州市下城区潮王路18号浙江工业大学科技处

  • 入库时间 2023-06-19 05:29:54

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2020-07-07

    授权

    授权

  • 2018-06-26

    实质审查的生效 IPC(主分类):G06K9/00 申请日:20171115

    实质审查的生效

  • 2018-06-01

    公开

    公开

说明书

技术领域

本发明涉及计算机视觉及智能交通领域,具体是一种先通过SVM检测车窗下面两个角点来粗略定位车窗位置,然后结合多方向投影来进行车窗边缘精确定位的方法。

背景技术

随着智能交通领域的不断发展,目前在道路交通安全监测系统中对于驾驶员行为的检测和分析越来越受到重视,包括驾驶员是否系安全带以及是否存在接听电话等违规行为的检测。要进行驾驶员行为检测就必须先定位到驾驶员位置,而车窗的准确定位则能够大致确定驾驶员的位置,因此车窗定位是驾驶员行为检测中非常关键的一步。

当前有许多学者提出了不同的车窗定位方法,其中与本发明较接近的技术方案为:文献(潘世吉.智能交通违章检测算法研究及软件系统实现[D].哈尔滨工业大学,2016.)利用Canny边缘检测和线性结构元素开运算的方法进行车窗上下水平边缘定位,该方法在利用线性结构元素进行开运算时没有考虑到车窗存在倾斜的情况,一旦车窗的上下边缘稍微有点倾斜则通过线性结构元素进行开运算后车窗的上下水平边缘也会被去除;文献(侯殿福.车窗检测技术研究[D].北京交通大学,2012.)提出先对车辆进行定位,然后根据车头和车窗的比例初步得到车窗位置,在车窗大致区域进行Canny边缘检测,然后使用模板匹配来进行水平直线滤波,接着使用Hough变换来进行车窗上下边界的检测,该方法使用的模板匹配方法来进行水平直线滤波也是没有考虑到车窗上下边缘存在倾斜的情况,倾斜的直线在经过模板匹配之后同样会被滤除;文献(姚东明,韩安华,等.基于车窗检测的车身颜色识别方法研究[J].信息通信,2017(2):87-88.)同样使用了Canny边缘检测结合水平直线模板滤波和Hough直线检测车窗水平带的方法,也存在车窗上下边缘倾斜的时候检测不到的情况,并且没有对车窗位置进行粗略定位就开始检测车窗上下水平带,这很有可能会检测到车辆顶部的水平直线,造成误检的情况。

综上所述,当前的车窗定位方法存在着如下不足:(1)对于车窗上下边缘存在倾斜的情况检测不到;(2)易检测到车辆顶部的水平直线,造成车窗边缘误检。

发明内容

针对现有的车窗定位方法中存在的上述问题,本发明提出了一种先通过SVM检测车窗下面两个角点来粗略定位车窗位置,然后结合多方向投影来进行车窗边缘精确定位的方法。

所述的一种基于车窗角点检测和多方向投影的车窗精确定位方法,其特征在于包括如下步骤:

步骤1:对含有车辆的彩色图像image进行车牌定位,将定位到的车牌位置记为矩形区域plateRect;

步骤2:根据车牌位置plateRect定义车窗左下角角点的检测区域detectRoiL以及车窗右下角角点的检测区域detectRoiR;

步骤3:在detectRoiL内使用SVM检测到所有车窗左下角角点的候选区域,存储在链表中,记为链表leftCornersList,在detectRoiR内使用SVM检测到所有车窗右下角角点的候选区域,存储在链表中,记为链表rightCornersList;

步骤4:从leftCornersList和rightCornersList中分别选出最终的车窗左下角角点区域记为winCornerRectL和车窗右下角角点区域记为winCornerRectR,使其满足如下条件:在所有候选区域中,(winCornerRectR.x+winCornerRectR.width/2)–(winCornerRectL.x+winCornerRectL.width/2)的绝对值最大,并且(winCornerRectR.y+winCornerRectR.height/2)–(winCornerRectL.y+winCornerRectL.height/2)的绝对值要小于max(winCornerRectL.height,winCornerRectR.height);

其中winCornerRectL.x为winCornerRectL的左上角横坐标,winCornerRectL.width为winCornerRectL的宽度,winCornerRectL.y为winCornerRectL的左上角纵坐标,winCornerRectL.height为winCornerRectL的高度,winCornerRectR.x为winCornerRectR的左上角横坐标,winCornerRectR.width为winCornerRectR的宽度,winCornerRectR.y为winCornerRectR的左上角纵坐标,winCornerRectR.height为winCornerRectR的高度,max表示从两个数中取较大者。

步骤5:根据winCornerRectL和winCornerRectR的位置以及plateRect的宽度plateRect.width定义车窗左边缘检测区域winLeftRect、车窗右边缘检测区域winRightRect以及车窗下边缘检测区域winDownRect;

步骤6:在图像image中分别截取winLeftRect区域部分、winRightRect区域部分以及winDownRect区域部分,得到车窗左边缘检测区域图像、车窗右边缘检测区域图像以及车窗下边缘检测区域图像,并对截取得到的车窗左边缘检测区域图像和车窗右边缘检测区域图像进行图像灰度化、Sobel垂直边缘检测以及OTSU二值化操作,将最终得到的二值化图像分别记为winLeftImg和winRightImg,对截取得到的车窗下边缘检测区域图像进行图像灰度化、Sobel水平边缘检测以及OTSU二值化操作,将得到的二值化图像记为winDownImg;

步骤7:以winLeftImg的左上角为坐标系原点,水平向右为x轴正方向,垂直向下为y轴正方向,将坐标系中直线与x轴正方向的夹角记为θ,其中-90°≤θ≤-60°,在每一个θ方向上,对winLeftImg进行投影,将投影值最大处对应的角度θ记为θ1,并将投影值最大处对应的投影直线上的任意一点记为point1,根据θ1和point1计算该投影直线在原图image坐标系中对应的直线方程,记为l1

其中原图image坐标系表示以原图image的左上角为坐标系原点,水平向右为x轴正方向,垂直向下为y轴正方向的坐标系;

步骤8:以winRightImg的左上角为坐标系原点,水平向右为x轴正方向,垂直向下为y轴正方向,将坐标系中直线与x轴正方向的夹角记为θ,其中60°≤θ≤90°,在每一个θ方向上,对winRightImg进行投影,将投影值最大处对应的角度θ记为θ2,并将投影值最大处对应的投影直线上的任意一点记为point2,根据θ2和point2计算该投影直线在原图image坐标系中对应的直线方程,记为l2

步骤9:以winDownImg的左上角为坐标系原点,水平向右为x轴正方向,垂直向下为y轴正方向,将坐标系中直线与x轴正方向的夹角记为θ,其中-10°≤θ≤10°,在每一个θ方向上,对winDownImg进行投影,将投影值最大处对应的角度θ记为θ3,并将投影值最大处对应的投影直线上的任意一点记为point3,根据θ3和point3计算该投影直线在原图image坐标系中对应的直线方程,记为l3

步骤10:计算直线l1和l3的交点,记为leftPoint,计算直线l2和l3的交点,记为rightPoint;

步骤11:根据winCornerRectL和winCornerRectR的位置以及leftPoint和rightPoint的位置定义车窗上边缘检测区域winUpRect;

步骤12:在图像image中截取winUpRect区域部分,得到车窗上边缘检测区域图像,并对截取得到的车窗上边缘检测区域图像进行图像灰度化、Sobel水平边缘检测以及OTSU二值化操作,将最终得到的二值化图像记为winUpImg;

步骤13:以winUpImg的左上角为坐标系原点,水平向右为x轴正方向,垂直向下为y轴正方向,将坐标系中直线与x轴正方向的夹角记为θ,在θ=θ3方向上对winUpImg进行投影,在得到的投影值中从下向上扫描,直到扫描到某一位置的投影值大于threshProject则停止扫描,将该投影值处对应的投影直线上的任意一点记为point4,根据θ3和point4计算该投影直线在原图image坐标系中对应的直线方程,记为l4,如果没有扫描到投影值大于threshProject的位置,则直接令l4为:y=(leftPoint.y+rightPoint.y)/2-(rightPoint.x-leftPoint.x)/3,其中threshProject为预先设定的投影阈值,leftPoint.x为leftPoint的横坐标,leftPoint.y为leftPoint的纵坐标,rightPoint.x为rightPoint的横坐标,rightPoint.y为rightPoint的纵坐标;

步骤14:计算直线l1和l4的交点,记为leftPoint1,计算直线l2和l4的交点,记为rightPoint1

步骤15:根据leftPoint、rightPoint、leftPoint1和rightPoint1的位置计算得到车窗在图像image中的位置winRect。

所述的一种基于车窗角点检测和多方向投影的车窗精确定位方法,其特征在于步骤2中车窗左下角角点的检测区域detectRoiL以及车窗右下角角点的检测区域detectRoiR的定义如下:

2.1):detectRoiL.x=plateRect.x-plateRect.width×3;

2.2):detectRoiL.y=plateRect.y-plateRect.width×3.5;

2.3):detectRoiL.width=plateRect.x+plateRect.width/2-detectRoiL.x;

2.4):detectRoiL.height=plateRect.y-plateRect.width-detectRoiL.y;

2.5):detectRoiR.x=plateRect.x+plateRect.width/2;

2.6):detectRoiR.y=plateRect.y-plateRect.width×3.5;

2.7):detectRoiR.width=plateRect.width×3.5;

2.8):detectRoiR.height=plateRect.y-plateRect.width-detectRoiR.y。

其中plateRect.x为plateRect的左上角横坐标,plateRect.y为plateRect的左上角纵坐标,detectRoiL.x为detectRoiL的左上角横坐标,detectRoiL.y为detectRoiL的左上角纵坐标,detectRoiL.width为detectRoiL的宽度,detectRoiL.height为detectRoiL的高度,detectRoiR.x为detectRoiR的左上角横坐标,detectRoiR.y为detectRoiR的左上角纵坐标,detectRoiR.width为detectRoiR的宽度,detectRoiR.height为detectRoiR的高度。

所述的一种基于车窗角点检测和多方向投影的车窗精确定位方法,其特征在于步骤5中车窗左边缘检测区域winLeftRect、车窗右边缘检测区域winRightRect以及车窗下边缘检测区域winDownRect的定义如下:

5.1):winLeftRect.x=winCornerRectL.x;

5.2):winLeftRect.y=winCornerRectL.y+winCornerRectL.height-plateRect.width/2;

5.3):winLeftRect.width=plateRect.width;

5.4):winLeftRect.height=plateRect.width/2;

5.5):winRightRect.x=winCornerRectR.x+winCornerRectR.width-plateRect.width;

5.6):winRightRect.y=winCornerRectR.y+winCornerRectR.height-plateRect.width/2;

5.7):winRightRect.width=plateRect.width;

5.8):winRightRect.height=plateRect.width/2;

5.9):winDownRect.x=winCornerRectL.x;

5.10):winDownRect.y=Top;

5.11):winDownRect.width=winCornerRectR.x+winCornerRectR.width–winCornerRectL.x;

5.12):winDownRect.height=(Buttom–Top+plateRect.width)/2。

其中winLeftRect.x为winLeftRect的左上角横坐标,winLeftRect.y为winLeftRect的左上角纵坐标,winLeftRect.width为winLeftRect的宽度,winLeftRect.height为winLeftRect的高度,winRightRect.x为winRightRect的左上角横坐标,winRightRect.y为winRightRect的左上角纵坐标,winRightRect.width为winRightRect的宽度,winRightRect.height为winRightRect的高度,winDownRect.x为winDownRect的左上角横坐标,winDownRect.y为winDownRect的左上角纵坐标,winDownRect.width为winDownRect的宽度,winDownRect.height为winDownRect的高度,Top=min(winCornerRectL.y,winCornerRectR.y),Buttom=max(winCornerRectL.y+winCornerRectL.height,winCornerRectR.y+winCornerRectR.height),min表示从两个数中取较小者。

所述的一种基于车窗角点检测和多方向投影的车窗精确定位方法,其特征在于步骤7中根据θ1和point1计算投影直线在原图image坐标系中对应的直线方程l1的步骤如下:

7.1):令point1.x=winLeftRect.x+point1.x,point1.y=winLeftRect.y+point1.y;

7.2):若θ1=-90°,则令直线方程l1为:x=point1.x;

7.3):若-90°<θ1≤-60°,则令直线方程l1为:y=tan(θ1)×(x-point1.x)+point1.y。

其中point1.x为point1的横坐标,point1.y为point1的纵坐标。

所述的一种基于车窗角点检测和多方向投影的车窗精确定位方法,其特征在于步骤8中根据θ2和point2计算投影直线在原图image坐标系中对应的直线方程l2的步骤如下:

8.1):令point2.x=winRightRect.x+point2.x,point2.y=winRightRect.y+point2.y;

8.2):若θ2=90°,则令直线方程l2为:x=point2.x;

8.3):若60°≤θ1<90°,则令直线方程l2为:y=tan(θ2)×(x–point2.x)+point2.y。

其中point2.x为point2的横坐标,point2.y为point2的纵坐标。

所述的一种基于车窗角点检测和多方向投影的车窗精确定位方法,其特征在于步骤9中根据θ3和point3计算投影直线在原图image坐标系中对应的直线方程l3的步骤如下:

9.1):令point3.x=winDownRect.x+point3.x,point3.y=winDownRect.y+point3.y;

9.2):直线方程l3为:y=tan(θ3)×(x–point3.x)+point3.y。

其中point3.x为point3的横坐标,point3.y为point3的纵坐标。

所述的一种基于车窗角点检测和多方向投影的车窗精确定位方法,其特征在于步骤11中车窗上边缘检测区域winUpRect的定义如下:

11.1):winUpRect.x=winCornerRectL.x;

11.2):winUpRect.y=(leftPoint.y+rightPoint.y)/2–(rightPoint.x-leftPoint.x)/3–

(rightPoint.x-leftPoint.x)/8×3;

11.3):winUpRect.width=winCornerRectR.x+winCornerRectR.width–winCornerRectL.x;

11.4):winUpRect.height=(rightPoint.x-leftPoint.x)/2。

其中winUpRect.x为winUpRect的左上角横坐标,winUpRect.y为winUpRect的左上角纵坐标,winUpRect.width为winUpRect的宽度,winUpRect.height为winUpRect的高度。

所述的一种基于车窗角点检测和多方向投影的车窗精确定位方法,其特征在于步骤13中根据θ3和point4计算投影直线在原图image坐标系中对应的直线方程l4的步骤如下:

13.1):令point4.x=winUpRect.x+point4.x,point4.y=winUpRect.y+point4.y;

13.2):直线方程l4为:y=tan(θ3)×(x–point4.x)+point4.y。

其中point4.x为point4的横坐标,point4.y为point4的纵坐标。

所述的一种基于车窗角点检测和多方向投影的车窗精确定位方法,其特征在于步骤15中车窗在图像image中的位置winRect的计算如下:

15.1):winRect.x=leftPoint.x;

15.2):winRect.y=(leftPoint1.y+rightPoint1.y)/2;

15.3):winRect.width=rightPoint.x-leftPoint.x;

15.4):winRect.height=(leftPoint.y+rightPoint.y)/2-(leftPoint1.y+rightPoint1.y)/2。

其中winRect.x为winRect的左上角横坐标,winRect.y为winRect的左上角纵坐标,winRect.width为winRect的宽度,winRect.height为winRect的高度,leftPoint1.y为leftPoint1的纵坐标,rightPoint1.y为rightPoint1的纵坐标。

通过使用本发明的方法对车窗进行定位操作,它可以非常精确得定位到车窗边缘,并且对于车窗上下边缘存在倾斜的情况也可以进行定位。

附图说明

图1为本发明实施例中选取的图像image;

图2为本发明实施例中plateRect、detectRoiL、detectRoiR、winCornerRectL和winCornerRectR的位置示意图;

图3为本发明实施例中winLeftRect、winRightRect的位置示意图;

图4为本发明实施例中winDownRect、winUpRect的位置示意图;

图5为本发明实施例中的图像winLeftImg;

图6为本发明实施例中的图像winRightImg;

图7为本发明实施例中的图像winDownImg;

图8为本发明实施例中的图像winUpImg;

图9为本发明实施例中车窗定位结果图。

具体实施方式

下面结合实施例来详细阐述本发明的基于车窗角点检测和多方向投影的车窗精确定位方法具体实施方式。应当理解,此处所描述的具体实施例仅用于解释本发明,并不用于限定本发明。

本发明的一种基于车窗角点检测和多方向投影的车窗精确定位方法,包括如下步骤:

步骤1:对含有车辆的彩色图像image进行车牌定位,将定位到的车牌位置记为矩形区域plateRect,在本实施例中选取的图像image如图1所示,车牌定位得到的plateRect位置如图2所示;

步骤2:根据车牌位置plateRect定义车窗左下角角点的检测区域detectRoiL以及车窗右下角角点的检测区域detectRoiR,在本实施例中根据plateRect位置定义得到的detectRoiL和detectRoiR区域如图2所示;

步骤3:在detectRoiL内使用SVM检测到所有车窗左下角角点的候选区域,存储在链表中,记为链表leftCornersList,在detectRoiR内使用SVM检测到所有车窗右下角角点的候选区域,存储在链表中,记为链表rightCornersList;

步骤4:从leftCornersList和rightCornersList中分别选出最终的车窗左下角角点区域记为winCornerRectL和车窗右下角角点区域记为winCornerRectR,使其满足如下条件:在所有候选区域中,(winCornerRectR.x+winCornerRectR.width/2)–(winCornerRectL.x+winCornerRectL.width/2)的绝对值最大,并且(winCornerRectR.y+winCornerRectR.height/2)–(winCornerRectL.y+winCornerRectL.height/2)的绝对值要小于max(winCornerRectL.height,winCornerRectR.height),在本实施例中选取的winCornerRectL和winCornerRectR位置如图2所示;

其中winCornerRectL.x为winCornerRectL的左上角横坐标,winCornerRectL.width为winCornerRectL的宽度,winCornerRectL.y为winCornerRectL的左上角纵坐标,winCornerRectL.height为winCornerRectL的高度,winCornerRectR.x为winCornerRectR的左上角横坐标,winCornerRectR.width为winCornerRectR的宽度,winCornerRectR.y为winCornerRectR的左上角纵坐标,winCornerRectR.height为winCornerRectR的高度,max表示从两个数中取较大者;

步骤5:根据winCornerRectL和winCornerRectR的位置以及plateRect的宽度plateRect.width定义车窗左边缘检测区域winLeftRect、车窗右边缘检测区域winRightRect以及车窗下边缘检测区域winDownRect,在本实施例中winLeftRect和winRightRect的位置如图3所示,winDownRect的位置如图4所示;

步骤6:在图像image中分别截取winLeftRect区域部分、winRightRect区域部分以及winDownRect区域部分,得到车窗左边缘检测区域图像、车窗右边缘检测区域图像以及车窗下边缘检测区域图像,并对截取得到的车窗左边缘检测区域图像和车窗右边缘检测区域图像进行图像灰度化、Sobel垂直边缘检测以及OTSU二值化操作,将最终得到的二值化图像分别记为winLeftImg和winRightImg,对截取得到的车窗下边缘检测区域图像进行图像灰度化、Sobel水平边缘检测以及OTSU二值化操作,将得到的二值化图像记为winDownImg,在本实施例中获得的winLeftImg图像如图5所示,winRightImg图像如图6所示,winDownImg图像如图7所示;

步骤7:以winLeftImg的左上角为坐标系原点,水平向右为x轴正方向,垂直向下为y轴正方向,将坐标系中直线与x轴正方向的夹角记为θ,其中-90°≤θ≤-60°,在每一个θ方向上,对winLeftImg进行投影,将投影值最大处对应的角度θ记为θ1,并将投影值最大处对应的投影直线上的任意一点记为point1,根据θ1和point1计算该投影直线在原图image坐标系中对应的直线方程,记为l1

其中原图image坐标系表示以原图image的左上角为坐标系原点,水平向右为x轴正方向,垂直向下为y轴正方向的坐标系。

步骤8:以winRightImg的左上角为坐标系原点,水平向右为x轴正方向,垂直向下为y轴正方向,将坐标系中直线与x轴正方向的夹角记为θ,其中60°≤θ≤90°,在每一个θ方向上,对winRightImg进行投影,将投影值最大处对应的角度θ记为θ2,并将投影值最大处对应的投影直线上的任意一点记为point2,根据θ2和point2计算该投影直线在原图image坐标系中对应的直线方程,记为l2

步骤9:以winDownImg的左上角为坐标系原点,水平向右为x轴正方向,垂直向下为y轴正方向,将坐标系中直线与x轴正方向的夹角记为θ,其中-10°≤θ≤10°,在每一个θ方向上,对winDownImg进行投影,将投影值最大处对应的角度θ记为θ3,并将投影值最大处对应的投影直线上的任意一点记为point3,根据θ3和point3计算该投影直线在原图image坐标系中对应的直线方程,记为l3

步骤10:计算直线l1和l3的交点,记为leftPoint,计算直线l2和l3的交点,记为rightPoint;

步骤11:根据winCornerRectL和winCornerRectR的位置以及leftPoint和rightPoint的位置定义车窗上边缘检测区域winUpRect,在本实施例中winUpRect的位置如图4所示;

步骤12:在图像image中截取winUpRect区域部分,得到车窗上边缘检测区域图像,并对截取得到的车窗上边缘检测区域图像进行图像灰度化、Sobel水平边缘检测以及OTSU二值化操作,将最终得到的二值化图像记为winUpImg,在本实施例中获得的winUpImg图像如图8所示;

步骤13:以winUpImg的左上角为坐标系原点,水平向右为x轴正方向,垂直向下为y轴正方向,将坐标系中直线与x轴正方向的夹角记为θ,在θ=θ3方向上对winUpImg进行投影,在得到的投影值中从下向上扫描,直到扫描到某一位置的投影值大于threshProject则停止扫描,将该投影值处对应的投影直线上的任意一点记为point4,根据θ3和point4计算该投影直线在原图image坐标系中对应的直线方程,记为l4,如果没有扫描到投影值大于threshProject的位置,则直接令l4为:y=(leftPoint.y+rightPoint.y)/2-(rightPoint.x-leftPoint.x)/3,其中threshProject为预先设定的投影阈值,在本实施例中设为84,leftPoint.x为leftPoint的横坐标,leftPoint.y为leftPoint的纵坐标,rightPoint.x为rightPoint的横坐标,rightPoint.y为rightPoint的纵坐标;

步骤14:计算直线l1和l4的交点,记为leftPoint1,计算直线l2和l4的交点,记为rightPoint1

步骤15:根据leftPoint、rightPoint、leftPoint1和rightPoint1的位置计算得到车窗在图像image中的位置winRect,在本实施例中计算的到的winRect区域如图9所示。

所述的一种基于车窗角点检测和多方向投影的车窗精确定位方法,其特征在于步骤2中车窗左下角角点的检测区域detectRoiL以及车窗右下角角点的检测区域detectRoiR的定义如下:

2.1):detectRoiL.x=plateRect.x-plateRect.width×3;

2.2):detectRoiL.y=plateRect.y-plateRect.width×3.5;

2.3):detectRoiL.width=plateRect.x+plateRect.width/2-detectRoiL.x;

2.4):detectRoiL.height=plateRect.y-plateRect.width-detectRoiL.y;

2.5):detectRoiR.x=plateRect.x+plateRect.width/2;

2.6):detectRoiR.y=plateRect.y-plateRect.width×3.5;

2.7):detectRoiR.width=plateRect.width×3.5;

2.8):detectRoiR.height=plateRect.y-plateRect.width-detectRoiR.y。

其中plateRect.x为plateRect的左上角横坐标,plateRect.y为plateRect的左上角纵坐标,detectRoiL.x为detectRoiL的左上角横坐标,detectRoiL.y为detectRoiL的左上角纵坐标,detectRoiL.width为detectRoiL的宽度,detectRoiL.height为detectRoiL的高度,detectRoiR.x为detectRoiR的左上角横坐标,detectRoiR.y为detectRoiR的左上角纵坐标,detectRoiR.width为detectRoiR的宽度,detectRoiR.height为detectRoiR的高度。

所述的一种基于车窗角点检测和多方向投影的车窗精确定位方法,其特征在于步骤5中车窗左边缘检测区域winLeftRect、车窗右边缘检测区域winRightRect以及车窗下边缘检测区域winDownRect的定义如下:

5.1):winLeftRect.x=winCornerRectL.x;

5.2):winLeftRect.y=winCornerRectL.y+winCornerRectL.height-plateRect.width/2;

5.3):winLeftRect.width=plateRect.width;

5.4):winLeftRect.height=plateRect.width/2;

5.5):winRightRect.x=winCornerRectR.x+winCornerRectR.width-plateRect.width;

5.6):winRightRect.y=winCornerRectR.y+winCornerRectR.height-plateRect.width/2;

5.7):winRightRect.width=plateRect.width;

5.8):winRightRect.height=plateRect.width/2;

5.9):winDownRect.x=winCornerRectL.x;

5.10):winDownRect.y=Top;

5.11):winDownRect.width=winCornerRectR.x+winCornerRectR.width–winCornerRectL.x;

5.12):winDownRect.height=(Buttom–Top+plateRect.width)/2。

其中winLeftRect.x为winLeftRect的左上角横坐标,winLeftRect.y为winLeftRect的左上角纵坐标,winLeftRect.width为winLeftRect的宽度,winLeftRect.height为winLeftRect的高度,winRightRect.x为winRightRect的左上角横坐标,winRightRect.y为winRightRect的左上角纵坐标,winRightRect.width为winRightRect的宽度,winRightRect.height为winRightRect的高度,winDownRect.x为winDownRect的左上角横坐标,winDownRect.y为winDownRect的左上角纵坐标,winDownRect.width为winDownRect的宽度,winDownRect.height为winDownRect的高度,Top=min(winCornerRectL.y,winCornerRectR.y),Buttom=max(winCornerRectL.y+winCornerRectL.height,winCornerRectR.y+winCornerRectR.height),min表示从两个数中取较小者。

所述的一种基于车窗角点检测和多方向投影的车窗精确定位方法,其特征在于步骤7中根据θ1和point1计算投影直线在原图image坐标系中对应的直线方程l1的步骤如下:

7.1):令point1.x=winLeftRect.x+point1.x,point1.y=winLeftRect.y+point1.y;

7.2):若θ1=-90°,则令直线方程l1为:x=point1.x;

7.3):若-90°<θ1≤-60°,则令直线方程l1为:y=tan(θ1)×(x-point1.x)+point1.y。

其中point1.x为point1的横坐标,point1.y为point1的纵坐标。

所述的一种基于车窗角点检测和多方向投影的车窗精确定位方法,其特征在于步骤8中根据θ2和point2计算投影直线在原图image坐标系中对应的直线方程l2的步骤如下:

8.1):令point2.x=winRightRect.x+point2.x,point2.y=winRightRect.y+point2.y;

8.2):若θ2=90°,则令直线方程l2为:x=point2.x;

8.3):若60°≤θ1<90°,则令直线方程l2为:y=tan(θ2)×(x–point2.x)+point2.y。

其中point2.x为point2的横坐标,point2.y为point2的纵坐标。

所述的一种基于车窗角点检测和多方向投影的车窗精确定位方法,其特征在于步骤9中根据θ3和point3计算投影直线在原图image坐标系中对应的直线方程l3的步骤如下:

9.1):令point3.x=winDownRect.x+point3.x,point3.y=winDownRect.y+point3.y;

9.2):直线方程l3为:y=tan(θ3)×(x–point3.x)+point3.y。

其中point3.x为point3的横坐标,point3.y为point3的纵坐标。

所述的一种基于车窗角点检测和多方向投影的车窗精确定位方法,其特征在于步骤11中车窗上边缘检测区域winUpRect的定义如下:

11.1):winUpRect.x=winCornerRectL.x;

11.2):winUpRect.y=(leftPoint.y+rightPoint.y)/2–(rightPoint.x-leftPoint.x)/3–

(rightPoint.x-leftPoint.x)/8×3;

11.3):winUpRect.width=winCornerRectR.x+winCornerRectR.width–winCornerRectL.x;

11.4):winUpRect.height=(rightPoint.x-leftPoint.x)/2。

其中winUpRect.x为winUpRect的左上角横坐标,winUpRect.y为winUpRect的左上角纵坐标,winUpRect.width为winUpRect的宽度,winUpRect.height为winUpRect的高度。

所述的一种基于车窗角点检测和多方向投影的车窗精确定位方法,其特征在于步骤13中根据θ3和point4计算投影直线在原图image坐标系中对应的直线方程l4的步骤如下:

13.1):令point4.x=winUpRect.x+point4.x,point4.y=winUpRect.y+point4.y;

13.2):直线方程l4为:y=tan(θ3)×(x–point4.x)+point4.y。

其中point4.x为point4的横坐标,point4.y为point4的纵坐标。

所述的一种基于车窗角点检测和多方向投影的车窗精确定位方法,其特征在于步骤15中车窗在图像image中的位置winRect的计算如下:

15.1):winRect.x=leftPoint.x;

15.2):winRect.y=(leftPoint1.y+rightPoint1.y)/2;

15.3):winRect.width=rightPoint.x-leftPoint.x;

15.4):winRect.height=(leftPoint.y+rightPoint.y)/2-(leftPoint1.y+rightPoint1.y)/2。

其中winRect.x为winRect的左上角横坐标,winRect.y为winRect的左上角纵坐标,winRect.width为winRect的宽度,winRect.height为winRect的高度,leftPoint1.y为leftPoint1的纵坐标,rightPoint1.y为rightPoint1的纵坐标。

在本实施例中,通过以上处理,可以看到图9中的车窗区域被精确定位出来。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号