1.0设想的思路

1、基于线段检测(LSD)算法

  • 第一部分是检测停车分隔线,它们在环视图像中具有一对固定距离的平行线。
    2、线聚类方法。
    3、通过根据停车位的宽度将分隔线配对来生成停车位候选。

2.第一次实践

算法步骤:
(1)图像灰度化
(2)形态学滤波,图像高斯
(3)确定图像感兴趣区域
(4)canny算子提取边缘
(5)霍夫变换进行直线检测(核心步骤)
(6)聚类算法优化霍夫变换提取的直线(核心步骤)
(7)输出车道线两点坐标

2.1 采用霍夫变换

链接:https://blog.csdn.net/linxid/article/details/78545678

1.hough:实现霍夫变换
基本语法:[H,theta,rho] = hough(BW,Name,Value,…)
输入参数:
BW:一幅二值图像;
Name:‘RhoResolution’和‘Theta’两种选择,而且相互对应,同时存在;
RhoResolution:霍夫变换沿rho轴的间距,默认是1;
Theta:所处理的直线的角度范围,默认是(-90,89);
输出参数:
H:霍夫变换矩阵;
theta:x轴和rho向量之间的角度;
rho:原点到直线的距离。

houghlines:霍夫变换线检测
基本语法:
lines = houghlines(BW,theta,rho,peaks)
lines = houghlines(___,Name,Value,…)
输入参数:
BW:二值图像;
theta:霍夫变换hough输出的角度;
rho:霍夫变换hough输出的rho;
peaks:霍夫变换峰值检测输出的峰值;

输出参数:
lines:是一个结构数组,包括point1,point2,theta,rho,长度为所检测到的线的条数;
point1,2:所检测到线的起止坐标;
theta,rho:与前两个函数类似。

聚类:
一个思路(没有采用)
https://github.com/Lightolx/LanePixel_Cluster/blob/master/main.cpp

  // Step5: 对所有拟合出来的直线做一个聚类,也就是把属于同一条车道线的不同的连通域聚类在一起int nC = 0;std::vector<Eigen::Vector3i> vRGBs;vRGBs.push_back(Eigen::Vector3i(255, 0, 0));vRGBs.push_back(Eigen::Vector3i(0, 255, 0));vRGBs.push_back(Eigen::Vector3i(0, 0, 255));vRGBs.push_back(Eigen::Vector3i(255, 255, 0));vRGBs.push_back(Eigen::Vector3i(255, 0, 255));vRGBs.push_back(Eigen::Vector3i(0, 255, 255));cv::Mat image2 = image.clone();for (auto iter = mLanes.begin(); iter != mLanes.end(); iter++){Eigen::Vector3i rgb = vRGBs[iter->first % 6];auto pts = iter->second;for (auto pt: pts){cv::circle(image2, cv::Point(pt[0], pt[1]), 1, cv::Scalar(rgb[0], rgb[1], rgb[2]));}}//        for (auto contour : vInitialContours)for (auto iter = mpairEndPoints.begin(); iter != mpairEndPoints.end(); iter++){for (const cv::Point &pt: vContours[nC++]){cv::circle(image, pt, 1, cv::Scalar(0, 0, 255));}std::pair<Eigen::Vector2d, Eigen::Vector2d> pPts = iter->second;Eigen::Vector2d p1 = iter->second.first;Eigen::Vector2d p2 = iter->second.second;Eigen::Vector3i rgb = vRGBs[nC % 6];cv::line(image, cv::Point(p1[0], p1[1]), cv::Point(p2[0], p2[1]), cv::Scalar(rgb[0], rgb[1], rgb[2]), 4);}//        CvMat imMsg = image;
//        CvFont font;
//        cvInitFont(&font, CV_FONT_HERSHEY_COMPLEX, 3, 3, 0, 2);
//        const char* numLane = std::to_string(nC).c_str();
//        cvPutText(&imMsg, numLane, cvPoint(280,270), &font, cvScalar(0, 0, 255));
//
//        CvMat imMsg2 = image2;
//        CvFont font2;
//        cvInitFont(&font2, CV_FONT_HERSHEY_COMPLEX, 3, 3, 0, 2);
//        const char* numLane2 = std::to_string(ni).c_str();
//        cvPutText(&imMsg2, numLane2, cvPoint(280,270), &font2, cvScalar(0, 0, 255));//        cv::imshow("image", image);cv::imshow("image", image2);
//        cv::imwrite("image0.png", image2);
//        if (nC == 3 || nC == 5)
//        {
//            cv::waitKey(1000);
//        } else
//        {
//            cv::waitKey(1);
//        }
//
//        if (nC > 5)
//        {
//            cerr << "something is wrong";
//            abort();
//        }char c = cv::waitKey(3);if (c==112){cv::waitKey();} else{cv::waitKey(100);}cv::imwrite("pixel.png", image2);}

实践1的一些问题总结:

链接:https://blog.csdn.net/weixin_38410551/article/details/91049247

聚类算法结果的输出具有随机性,如何能够通过聚类算法得到自己想要的结果,需要做一些限制。
原因:初始化参数矩阵时,不同的随机数导致不同的结果。

问题1:道路场景发生变化时,ROI区域会发生变化,ROI区域的变化会导致检测结果出现偏差。

解决办法1:设定多个ROI区域。
风险:路边景物会影响车道线的检测,导致最终的检测结果偏差很大。
解决办法1:设定滑动框,遍历所有的ROI,如果结果合理,则保留结果。否则,则继续遍历滑动框,最终得到正确的检测结果。
风险:可能会导致在某些帧检测时出现延时。

问题2:如何确定检测结果是合理的,如果不合理时,如何想办法解决。
解决办法:可以设定一些固定参数,用这些固定参数衡量进行自适应修改。如果与固定参数相差很远,用固定参数替代检测结果。

问题3:不合理的情况有很多种,如何针对不同的情况进行针对性修改。

问题5:如何让算法自身能够自适应地调节某些参数。
原因:设定固定参数容易使得场景在某些情况无法适应。

问题6:为什么路边景物会检测出那么多直线。

问题7:浮点运算可能导致结果出现偏差。
解决办法:合并斜率接近的线。

现有方案的缺点:
(1)检测结果的稳定性差
(2)严重依赖于ROI区域的设定

优化方案1:
(1)工程化方法完成车道线聚类,即车道线分类时,人为设定一些参数。
(2)mask方法可以提高算法运行的效率。

流程方案:
(1)灰度化。
(2)canny算子检测边缘。
(3)mask确定ROI区域(需要多个mask,工程后期优化)
(4)霍夫变换检测直线。
(5)聚类(如何聚类,道路边界,中间分隔线已经清楚,是否可以就此推断应急车道线,作为一个修正方案)。

存在的问题:
mask的调用:不同的路段,mask不同,如何快速地调用mask

图像检测结果准确性的验证:
(1)从何时介入验证,效率和稳定性更高
(2) 验证方法
(3)验证结果如何处理

现有方案需要处理的问题:
(1)ROI区域和车道的匹配。
ROI区域和车道的匹配是能否准确检测出车道线的基础。
(2)如何判断ROI区域和道路匹配准确。
1)初始化如何判断。
ROI区域内的直线条数是否为一个范围,存在上限和下限。或者每个ROI相对应的直线条数为一个固定的值,是否有一个统计值。
2)在运行过程中如何判断。
(3)聚类算法导致的车道线拟合偏差过大。
可以用先验车道线信息去替代。
方案参数:
输入参数:最小最大斜率,该斜率值与mask的边界有关。
方案的核心问题:mask与道路的匹配。

mask与道路匹配的标准是什么。
是否可以检测出应急车道线,若能,则认为匹配,不能,则重新匹配。(该标准也可以用于聚类车道线)
方案对拍摄视频的要求:必须将左右车道完整检测出来。
注:聚类算法抗噪声能力较弱,尤其是数据量较少时,无法准确评估聚类中心。

3 接下来可以的思路

1、 基于线条特征的机场检测算法——LSD直线检测算法、平行线组提取和聚类
https://blog.csdn.net/weixin_42647783/article/details/83352454
2、基于主元分析和聚类的直线检测算法
针对现有的直线检测算法中,基于霍夫变换类算法开销大且易产生虚假结果,基于链码跟踪类方法鲁棒性和适应性较差的问题,提出一种新的直线检测算法。对边缘图像做分块链码跟踪产生链码串,然后对链码串做主元分析(PCA)构造线段,最后采用聚类方法合并线段以产生直线。实验结果表明,该算法速度较快,检测结果较理想,且对较复杂、细节丰富的图像也具有良好的检测结果。
http://kns.cnki.net/kcms/detail/detail.aspx?filename=JSJY201105015&dbcode=CJFQ&dbname=CJFD2011&v=

https://wenku.baidu.com/view/7594d9223169a4517723a3d0.html

https://www.ixueshu.com/document/747e0da31b32ea69318947a18e7f9386.html

线段聚类:


3、图像主特征直线的检测算法 —— 基于线段聚类的直线检测算法
http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.590.271&rep=rep1&type=pdf

4、基于聚类的直线特征提取算法仿真研究
https://www.ixueshu.com/document/214c9856c461100798cddfd0f934236d318947a18e7f9386.html

【车道线检测与寻迹】【实践】4月17 线车位的实验思路与后续工作构想相关推荐

  1. 【车道线检测与寻迹】LSD、LBD快速直线检测

    python应用LSD opencv 这个LSD https://github.com/primetang/pylsd是封装好的,不知道哪儿改参数,原始的LSD检测前会将图片缩小至80%,当图片很小是 ...

  2. ZYAR20A 亚克力2驱 蓝牙 298寻迹避障机器人 —— 小车超声波避障实验(有舵机)

    在下载到开发板之前要选择好板和端口,具体参见: ZYAR20A 亚克力2驱 蓝牙 298寻迹避障机器人 -- Arduino相关设置 代码 // 智能小车超声波避障实验(有舵机) // 程序中电脑打印 ...

  3. ZYAR20A 亚克力2驱 蓝牙 298寻迹避障机器人 —— 小车超声波避障实验(无舵机)

    在下载到开发板之前要选择好板和端口,具体参见: ZYAR20A 亚克力2驱 蓝牙 298寻迹避障机器人 -- Arduino相关设置 代码 // 智能小车超声波避障实验(无舵机) //======== ...

  4. ZYAR20A 亚克力2驱 蓝牙 298寻迹避障机器人 —— 小车红外避障实验(带后退掉头避障)

    在下载到开发板之前要选择好板和端口,具体参见: ZYAR20A 亚克力2驱 蓝牙 298寻迹避障机器人 -- Arduino相关设置 代码 // 智能小车红外避障实验1(基础避障) //======= ...

  5. 车道线检测在AR导航中的应用与挑战

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 1. 导读 现代社会中,随着车辆的普及,人的活动范围在逐步扩大,单单依靠人类记忆引导行驶到达目的地已经 ...

  6. ECCV2020|超快的车道线检测,代码模型已开源

    作者|cfzd 来源|https://zhuanlan.zhihu.com/p/157530787 很高兴和大家分享一下我们刚刚被 ECCV 2020 接收的新工作:一种超快速的车道线检测算法(Ult ...

  7. 面向量产的3D目标与车道线检测方法

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 Part 1 背景介绍 1. 1 团队介绍 商汤科技自动驾驶团队依托公司为背景,以 SenseParr ...

  8. 详解车道线检测数据集和模型 VIL-100: A New Dataset and A Baseline Model for Video Instance Lane Detection

    本文介绍一个新的车道线数据集 VIL-100 和检测模型 MMA-Net,论文已收录于 ICCV2021,重点是理解本文提出的 LGMA 模块,用于聚合局部和全局记忆特征. 论文链接:https:// ...

  9. ECCV 2020 | 超快的车道线检测

    本文转载自知乎,已获作者授权转载. 链接:https://zhuanlan.zhihu.com/p/157530787 很高兴和大家分享一下我们刚刚被 ECCV 2020 接收的新工作:一种超快速的车 ...

  10. 传感器实验——寻迹小车

    传感器实验--寻迹小车 防跌落小车实验 所选设备 寻迹小车 巡线原理 示例程序 之前我们用寻迹模块简单的做了一个防止小车高处跌落的功能,但是寻迹并不简单(/滑稽).本次我们使用寻迹来做一个巡线功能.简 ...

最新文章

  1. 查找算法常见的五大面试知识点与两类实战!
  2. 在长沙怎么挑选装饰公司
  3. AM消息中间件OA、ERP消息提醒的必要工具
  4. 基于空间方法的图神经网络模型_用于时空图建模的图神经网络模型 Graph WaveNet | 课程上新...
  5. Project facet Dynamic Web Module version 3.1 is not supported.
  6. 【C语言】第五章 迭代计算与循环结构 题解
  7. 开源软件 依赖_新的开源依赖项管理器在场
  8. 设计模式学习笔记1——类与类之间的关系
  9. android学习日记15--WebView(网络视图)
  10. ADO.NET Entity Framework支持多Provider
  11. Web Components 系列(十)—— 实现 MyCard 的基本布局
  12. 云上的消费你真的算清楚了?
  13. java点名程序界面设计_用Java语言编写一个班级点名的程序
  14. JDK,JRE,JVM的区别
  15. 【学习笔记】Unreal(虚幻)4引擎入门(四)
  16. 统计各种字符数量(包括汉字)
  17. 山东金税盘如何跨月作废增值税普通发票
  18. Debian服务器环境搭建
  19. Excel数据透视表经典教程五《功能选项卡》
  20. Java-Util之ArrayList

热门文章

  1. EXCEL同一个数据较多的表格里自己比较数据(分屏)
  2. 题目:输入两个正整数m和n,求其最大公约数和最小公倍数。
  3. Redis-01-NoSQL简介及Redis数据库安装
  4. CXF +ws-security 和HttpURLConnection实现webservic请求
  5. Android仿58同城Loading View
  6. 从1.5K到18K 一个程序员的5年成长之路
  7. java下载execl优化_Java内存优化之POI Excel(二)
  8. unity newtonsoft 反序列化报空_基于Unity3D的大地形研究(2):资源序列化与材质加载...
  9. 类图中表达总体与局部的关系_软件工程测试题3
  10. python install_[Python] Linux下python install