Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 提取指向上的车道线_Python_Opencv_Image Processing - Fatal编程技术网

Python 提取指向上的车道线

Python 提取指向上的车道线,python,opencv,image-processing,Python,Opencv,Image Processing,我们尝试检测跑道上的车道线(并利用此信息确定即将到来的方向) 我们目前使用以下(简化)步骤: 二进制:使用二进制阈值转换输入 裁剪:裁剪感兴趣区域(当前仅为图像的下半部分) Canny:检测边缘并使用HoughLinesP将其分组 向上线条和闭合:仅保留具有极端坡度的线条-忽略水平线条 结果:找到连接的组件并通过每条线拟合二次函数 这通常是可行的(示例:straight.png,left.png),但如果没有删除水平连接线(示例:problems.png-bottom right&bottom

我们尝试检测跑道上的车道线(并利用此信息确定即将到来的方向)

我们目前使用以下(简化)步骤:

  • 二进制:使用二进制阈值转换输入

  • 裁剪:裁剪感兴趣区域(当前仅为图像的下半部分)

  • Canny:检测边缘并使用HoughLinesP将其分组

  • 向上线条和闭合:仅保留具有极端坡度的线条-忽略水平线条

  • 结果:找到连接的组件并通过每条线拟合二次函数

  • 这通常是可行的(示例:straight.png,left.png),但如果没有删除水平连接线(示例:problems.png-bottom right&bottom left),则会出现问题。 在这种情况下,两条线和连接被解释为一个连接的组件

    由于我们的视角可以从左向右倾斜很多(摄像机安装在跑步的人身上),因此很难为向上的直线定义坡度阈值

    有没有更好的方法来消除非向上指向的轨道线? 作为canny的当前解决方案,hough变换和坡度过滤对于曲线不是最优的,有时根本不起作用(如上所述)

    是否有可能通过形态学操作直接从裁剪图像到分离线? 类似 我知道我们没有严格的水平线,这使得任何合适的内核都更加复杂(我假设)

    目前,我们尝试使用透视变换在轨道上获得鸟瞰图。 这将有助于区分水平线和向上指向的线

    另一个小问题是直线太短,导致近似二次函数不准确(problems.png和straight.png中的大多数左行)。这可能很容易解决(通过要求将组件计数为轨迹线的最小像素计数),并且不应成为此问题的一部分

    编辑(回答vlad_tepesch的问题)

    曲线是怎么回事?它们是否应该成为车道模型的一部分

    我们显然希望检测跑道的曲线,因为这是方向估计所需要的。但我们希望忽略(删除)problems.png示例底部的水平连接曲线

    4/6。摄像机畸变校正

    我将再看一次整改,直到现在我才推迟,因为我认为这并不重要

    7.3如果忽略段之间的重叠,则有多少像素(组像素计数)

    只需从一个组中画出所有线,然后检查非零像素计数

    十,。车道通常不是二次曲线-改为内环回旋线-这可能会有过大的杀伤力,因此可以使用三阶多项式代替

    我明白你的意思。回旋线目前不在范围之内,但我会记住它们。 若我们使用更复杂的拟合,你们会如何进行方向估计? 目前,我们仅采用二阶多项式的第一个系数来估计弯曲方向(以及区分曲线和直线部分的曲率)

    可选更高级

    好的一点,我们已经考虑过在多个帧上平均结果。我也把这个建议牢记在心

    笔直的

    问题


    看来您真正的问题在于过滤和连接步骤。因为过滤掉了很多水平组件,所以对于未过滤的接近垂直的线的连接,只剩下次优的线段

    曲线是怎么回事?它们是否应该成为车道模型的一部分? 起初我假设不是,但它只在分组阶段有一些影响

    我建议采取以下步骤

  • 收成
  • 二值化(为什么要将处理时间浪费在被裁剪的图像部分的二值化上)
  • 精明(可以尝试垂直索贝尔,只获得水平边缘)
  • 考虑校正以校正相机失真
  • HoughLinesP
  • 如果您决定不校正输入图像,则至少校正输出线的坐标
    从处理时间的角度来看,这可能是一个更理想的选择-然而,霍夫线检测器将产生不太理想的结果,这取决于您的相机失真的强度
  • 连接线,而不考虑其方向
  • 我会首先尝试以下方法
  • 为每个线段计算一条直线(点、方向)
  • 查找具有类似参数的直线并检查线段的距离
  • 如果距离足够近,将其分组为一个直线组
  • 最后,您应该有几个线组,其中包含一些可以计算以估计质量的特性
  • 有多少条线/段属于该组
  • 属于该组的像素数(所有线段长度之和)
  • 如果忽略段之间的重叠,则有多少像素(组像素计数)
  • 线组(某种组线段)上最左边/最右边的像素
  • 填充比(组线长度/组像素计数)
  • 在分组之后,不再需要线段及其对组的指定,但我将保留计算的属性
  • 如果弯道应该是车道的一部分,那么我将尝试寻找继续在末端找到的组的组,并合并它们。
    这将防止交叉线合并
  • 根据您的需要筛选组
  • 合身。
  • 车道通常不是二次曲线
  • 改为看内回旋线
  • 这可能会导致杀伤力过大,因此可以使用三阶多项式代替
  • 可选更高级

  • 保持沉默