提取向上的车道线

时间:2019-05-24 11:08:03

标签: python opencv image-processing

我们尝试检测行驶轨迹上的车道线(并使用此信息作为即将到来的方向)。

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

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

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

  3. Canny::检测边缘并将其与HoughLinesP分组

  4. 向上的线和结束线:仅保留斜率最大的线-忽略水平线

  5. 结果::找到连接的组件并通过每行拟合二次函数

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

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

是否有更好的方法来消除非向上指向的轨迹线? 作为当前使用canny的解决方案,霍夫变换和斜率滤波对于曲线不是最佳的,有时根本不起作用(如上所述)。

是否可以通过形态学操作将裁剪后的图像直接移到分隔的线条上? 与this example类似。 我知道我们没有严格的水平线,这会使任何合适的内核变得更加复杂(我认为)。

当前,我们尝试使用透视变换来获得赛道上的鸟瞰图。 这应该有助于区分水平指向和向上指向的线条。

另一个小问题是,行太短会导致近似的二次函数不正确(problems.png和straight.png中的最左行)。这可能很容易解决(通过将最少的像素数计算为跟踪线即可将其计算在内),并且不应该成为此问题的一部分。

编辑(回答vlad_tepesch的问题)

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

我们显然希望检测行驶轨迹的曲线-因为方向估计需要此曲线。但是我们想忽略(删除)问题.png示例底部的水平连接曲线。

4./6。校正-相机失真

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

7.3如果段之间的重叠被忽略了多少个像素(组像素数)

只绘制一组中的所有线并检查非零像素数吗?

10。车道通常不是二次的-而是看int复数形式-这可能会导致过大杀伤力,因此可能改用三阶多项式

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

可选的更高级

好点,我们已经考虑过对多个帧取平均结果。我也把这个建议留在脑海里。

直接

straight

left

问题

problems

1 个答案:

答案 0 :(得分:2)

似乎您真正的问题是过滤和连接步骤。因为您滤除了许多水平分量,所以为了连接未滤波的近乎垂直的线,只剩下次优段。

曲线是什么?它们是否应该成为您的车道模型的一部分? 起初我不认为,但它仅在分组阶段产生影响。

我建议采取以下步骤

  1. 作物
  2. binary(为什么在将要裁剪的图像部分进行二值化时浪费处理时间)
  3. canny(也许尝试使用垂直Sobel以获得水平边缘)
  4. 考虑纠正以纠正相机失真
  5. HoughLinesP
  6. 如果您决定不校正输入图像,则至少校正输出线的坐标
    从处理时间的角度来看,这可能是更理想的选择-但是,根据摄像头失真的强度,霍夫线检测器产生的最佳结果会较差
  7. 连接导线,无论其方向如何
    1. 我会首先尝试以下
    2. 为每个路段计算一条线(点,方向)
    3. 找到具有相似参数的线并检查线段的距离
    4. 如果距离足够近,请将其分组为线组
    5. 最后,您应该有一些带有某些属性的线组,您可以计算这些属性以评估质量
      1. 该组中有多少行/段
      2. 该组有多少像素(所有线段的长度之和)
      3. 如果忽略段之间的重叠有多少像素(组像素数)
      4. 线组(某种组线段)上最左边/最右边的像素
      5. 填充率(组线长/组像素数)
    6. 在此之后,不再需要对线段进行分组并将它们分配给组,但是我会保留计算出的属性。
  8. 如果弯道应该是车道的一部分,那么我会尝试寻找在最后继续找到的组并将其合并的组。
    这样可以防止交叉线合并。
  9. 根据需要过滤组
  10. 拟合。
    1. 车道通常不是二次的
    2. 改用int复数形式
    3. 这可能会导致过大杀伤力,因此可能改用三阶多项式

可选的更高级

  1. 最后保留所有组
  2. 仅在输出级别进行过滤
  3. 在下一帧中,将旧组与新组进行匹配,并对模型进行一些跟踪和真实性检查。