Chapter 7: Road Recognition 道路识别
欢迎回到汽车视觉课程,今天我们将讨论第七章,即从相机图像识别道路。
以下是与本章工作相关的参考文献列表。第一篇论文是关于基于视频识别车道标记和估计车道几何形状的较早的工作。第二篇论文也涉及相同的主题,来自同一时期。第三篇论文是Heidi Laws及其团队关于从视频序列识别车道的文章之一。
我们今天要解决的任务是面对类似这样的图像:一张由自动驾驶汽车前方摄像头拍摄的相机图像。我们可以清楚地看到道路及其旁边的环境。当然,对于自动驾驶来说,重要的是知道哪里是道路以及道路遵循的几何形状,即车道的宽度、道路上存在哪些车道,以及道路是直的还是曲的。
为此,我们首先需要以某种方式识别出道路边界和车道标记,也就是我们需要从相机图像中提取关于道路几何形状的特征。然后,我们需要估计这种几何形状,也就是我们需要确定道路的几何模型。之后,我们需要以某种方式追踪这种模型,因为我们不仅仅想为一张图片解决这个问题,而是要为整个视频序列追踪道路的几何模型。
车道检测主题对于智能汽车的多个应用来说都相当关键。对驾驶员的最简单的辅助形式是车道偏离警告,也就是驾驶员仍以传统方式控制车辆,但只要驾驶员偏离自己的车道,车辆就会警告驾驶员。这种警告可能会通过一些声音,例如提示音,或者方向盘震动,或者其他方式来通知驾驶员。
改进版的车辆配备了车道保持支持系统。对于这类系统,不仅会警告驾驶员即将偏离车道,系统还会对方向盘施加一定力矩,帮助驾驶员保持车道。这并不是自动控制方向盘,但它提供了一种触觉反馈,推动驾驶员朝正确的方向转向。
最后一个版本,也可以说是最自动化的版本,是车道保持或车道偏离防护系统。在这些系统中,汽车会自行驾驶,自行保持车道,驾驶员无需干预系统的操作。当然,又有两种不同的版本,一种版本的系统并不完全可靠,这意味着它只是一种辅助系统,驾驶员仍需要观察该系统是否出现错误。而更好的系统,当然是可靠的系统,驾驶员可以完全依赖系统的性能,也就是说他们不再需要监督系统。
那么我们如何从摄像头图像中提取道路或车道呢?实际上有两种方法,一种是更传统的方法,另一种是我们稍后将介绍的更现代的方法。让我们首先从传统的方法开始。当我们看示例图片时,我们可以看到道路用车道标线进行标记,车道标线是在较暗的背景上的明亮白色条纹,所以我们可以预期车道标线会很清晰地显示出来,如果我们考虑到道路表面和车道标线之间的局部对比度。下图显示了每个像素灰度值梯度的长度,图像底部的黑色像素代表具有大梯度(大灰度值梯度)的像素,而小梯度长度的像素则用白色或非常亮的颜色表示。如我们所见,车道标线的边界显示出非常大的梯度。然而,也有一些地方梯度不大,例如被树木遮蔽的道路区域,以及我们发现大灰度值。梯度的其他区域,例如背景和天空的边界,所以我们需要更多的想法,而不仅仅是寻找具有强梯度的像素。
在这张图片中,我们再次看到前一幻灯片中的灰度值梯度图,下面是一个图表。这个图表是通过沿着顶部图片中标记为红线的线显示灰度值梯度长度来创建的。在这个图表中,我们可以清楚地看到,在红线与车道标线相交的位置,我们找到了一些大的灰度值梯度。确切地说,对于每个车道标记,我们都可以找到两个梯度长度大的点,一个在车道标记的左边界,一个在右边界。这意味着我们可以得出结论,如果我们找到一对具有强烈灰度值梯度的点,这些点可能是由车道标记创建的。此外,我们知道道路上的典型车道标记的典型宽度为10到15厘米,所以我们可以计算这两个点在道路表面上的距离,并根据这个距离,筛选出那些距离过宽或过近的点。此外,我们可以利用这样一个知识,即这两点的梯度方向必须相反。也就是说,在车道标记的左边界,我们期望找到一个大致向右的梯度,而在车道标记的右边界,我们会发现灰度值梯度大致向左。
通过考虑这些想法,我们可以筛选出在灰度值梯度图中不合理的,或者以某种方式与这个想法相矛盾的最大值。通过这种方式,我们可以筛选出一些错误的检测结果。当然,我们还可以利用这个想法来检查点是否位于地面上,至少在我们有立体视觉的情况下,我们可以将每个检测到的点投影到三维空间,并检查其地面高度。如果高度偏差过大,我们可以筛选出那个点。
在这张图片上,你可以看到这个检测过程的结果。我们找到的所有点,都在车道标记的左边界,用绿色的十字标记,而所有在车道标记右边界找到的点都用红色的十字标记。我们可以看到这个方法是有效的,当然,有一些误报,也就是说有些地方检测到了错误的车道标记,而在一些因为阴影导致对比度低的地方,无法检测到车道标记。
首先从灰度级图像中提取车道标记,然后估计道路几何形状的方法在某些情况下工作得很好,例如在公路驾驶中,这已经在商业应用中成功使用。然而,在高速公路上,车道标记清晰可见,遮挡并不是大问题,此外,道路几何形状遵循一些规则,所以我们并不面对一个相当复杂的问题。在城市环境中,情况就不同了。在城市环境中,车道标记常常缺失,或者甚至误导人,因为它们可能属于行人过街道而不是我们的车道。此外,在乡村驾驶中,其他车辆常常遮挡了道路的相关部分,使我们无法看清所有的东西。
在这种情况下,像基于梯度的方法通常会失败,我们需要一个替代方案。从摄像头图像中提取道路几何形状的一种更现代的方式是使用深度学习。深度学习是一种使用所谓的人工神经网络的方法,这些技术可以被训练来解决某个特定的任务,例如,它们可以被训练来将一幅图像分割成不同的区域,这对我们来说非常有用。没有深入到这些技术的细节,但是,这些方法可以被训练来将图像分割成属于道路的区域和其他区域,这些区域可能属于人行道,道路旁的植被,杆子,交通标志,车辆,行人,自行车等。
展示了一个例子图像。这个分割完全由神经网络完成,并且效果非常不错。基于这个分割,我们可以提取道路表面的边界,并基于此估计道路的几何形状。也可以修改任务,而不是要求这个人工神经网络将图像分割成道路区域和其他区域,而是将图像分割成属于我们自身车道的区域和其他车道的区域。基本的方法仍然是一样的,但是训练过程是不同的,也就是说,我们适应人工神经网络的任务的方式是不同的。我不想深入讲解深度学习,因为这已经是我在冬季学期提供的机器视觉课程中的一个主题。如果你想获得更多的洞察,请参考那门课程的幻灯片。
然而,我们可以使用这些方法将图像分割成隔离车道或道路表面的区域,这一主要信息仍然很重要。总的来说,其性能相当好,甚至出人意料的好,让我们看一个例子。
现在我们知道如何在摄像头图像中提取车道边界,我们可以讨论如何基于这些信息估计车道的几何形状。为此,我们首先将车道标记上检测到的点转换为鸟瞰视图,也就是说,我们将其从摄像头坐标系统转换为车辆坐标系统,所有推理都是在这个鸟瞰视图中进行的。我们想知道关于车道和车辆在车道上的什么呢?首先,自我车辆位于自我车道的某个位置,不一定在车道的中心线上,但可能在横向有点偏移,因此我们有一个横向偏移。车辆可能也会有点旋转,使得车辆的方向与车道的方向略有不同,从而产生一个确定的偏航角。然后,车辆不一定在车道的起点,也可能位于其他某个地方,具有一定的纵向偏移。
Straight Lanes 直线
车辆的位置和方向可以通过车辆坐标系统的位置和方向来描述。在这个图中,车辆坐标系统用蓝色表示,道路坐标系统用绿色表示。道路坐标系统的原点在自我车道中心线的某个点,其x坐标指向车道的方向,其y坐标垂直于车道。车辆坐标系统的原点在车辆的某个点,例如在这个图中是后轴的中心,但也可能是你可能会使用作为车辆坐标系统原点的任何其他点。该坐标系统的x轴始终沿着车辆的前进方向指向,而y轴方向则指向横向。
所以,除了确定车辆坐标系统相对于道路坐标系统的位置和方向外,我们还需要知道另一个变量,也就是车道的宽度B。然后,我们需要知道两个坐标系统的横向偏移,我们称之为d_lat;两个坐标系统的纵向偏移,我们称之为d_long;以及偏航角ψ。这些变量是必要的,用来估计直线车道的几何形状。
所以我们可以将它们组合成一个向量,称之为我们估计的状态向量,它包含这四个变量。d_long, d_lat和ψ描述了车辆坐标系统的位置和方向,B描述了车道的宽度。
现在,让我们讨论如何在这两个坐标系统之间转换坐标。车辆坐标系统总是用蓝色表示,而道路坐标系统总是用绿色表示。如果我们在车辆坐标系统中给定了一个位置,比如说x_vehicle和y_vehicle,那么我们可以将其转换到道路坐标系统中,考虑到两个坐标系统之间的偏移以及旋转角度,这表示车辆坐标系统相对于道路坐标系统的旋转方式。请注意,我们假设这两个坐标系统都是右手坐标系统,并且都使用相同的长度单位,例如米,来描述位置。在这些考虑下,转换可以写成将车辆坐标系统中的坐标与旋转矩阵相乘,该矩阵模拟了偏航角,并添加了纵向和横向偏移。结果,我们得到了相应的道路坐标。我们也可以解出这个方程,得到道路坐标和车辆坐标之间的关系。
车道标记在哪里?我们如何在道路坐标系统中描述车道标记或车道边界?这相当简单,车道边界上的每一个点必须位于可以表示为w加上或减去0.5b的位置,这是从道路坐标系统的原点向左或右边界移动,加上一些未知的纵向距离τ乘以向量[1;0]。这意味着,对于车道边界上的每一个点,我们可以找到一个τ和一个case,无论是加还是减,我们都可以用这种方式来表示那个位置。当然,我们也可以将其转换到车辆坐标系统中,得到以下等式。
正如我们所看到的,这个矩阵向量等式包含两行,一行代表x坐标,一行代表y坐标。我们可以将这些行写成单独的等式,每个等式都包含未知变量τ。我们可以解出这些等式,消除τ,结合这些等式并消除所有,并且结果我们得到了y车辆和x车辆之间的关系。等式在幻灯片上给出。现在,如果我们假设在典型的驾驶方向上,偏航角仍然很小,如果我们用弧度来表示这个偏航角ψ,那么我们可以将tan(ψ)近似为ψ,将cos (ψ)近似为1. 我们可以简化整个等式,得到这个等式。现在我们可以看到,这个等式只以线性的方式依赖于状态变量ψ、B和d_lat,所以它描述了y车辆作为状态变量的线性组合。
逐帧定位和形状估计 Frame-by-Frame Localization & Shape Estimation
现在我们可以使用这些结果来引入一个第一次回归方法,从某个观察点集合来估计车道几何和车辆姿态,我们假设我们在左车道边界观察到N^L点,我们用xiL和yiL表示坐标,以及在右车道边界观察到的NR点,用坐标XjR和yjR表示。从前面的幻灯片我们知道,对于这些观察结果,相应的等式应尽可能的准确。然而,由于观察到的点的坐标总是存在测量误差和离散化误差,这可能不总是完全正确,但可能有一些小的误差保留。这个误差,用ϵiL或ϵjR表示,称为残差。
所以,残差是我们在前面的推导出的等式由于某个观察点和某个状态向量的考虑而不符的量。我们想要找到一个状态向量可以同时使所有这些残差变小。可以通过提出一个优化问题(最小化问题)来做到这一点,我们想要最小化这些残差的平方和(对每个观察到的残差)。为了做到这一点,我们计算相对于ψ、B和d_lat的偏导数,将这些导数归零,得到一个线性方程组。在将其重写为矩阵向量乘法之后,我们得到这种形式:一个3x3矩阵包含观察点的数量和位置,乘以未知向量,等于一个依赖于观察点位置的项的向量。只要左边的矩阵具有满秩,我们就可以解这个方程组,得到未知状态向量ψ、B、d_lat的唯一解。
因此,估计直线道路几何的第一种回归方法看起来是这样的:首先,我们在相机图像中检测道路标记或车道边界,然后将这些位置转换为车辆坐标,并在鸟瞰视角中进行观察。然后,我们使用回归方法估计位置参数和车道宽度(状态向量),以便最佳地匹配观察到的车道和车道模型。显然,我们可以用这种方法估计ψ、d_lat和B,但我们无法估计d_long,因为在右侧底部的图中,我们可以看到,我们可以前后移动车道,解的质量不会变好或变坏。所以,对于直线情况,有一个变量我们无法估计,那就是d_long,所以我们要么忽略它,要么必须手动设置它。
只有当我们从相机图像中获取到更多的特征,告诉我们关于纵向位置的信息,也就是说,一些结构能够区分我在车道上前进一米还是后退一米,我们才能克服这个问题。例如,这可以是交通标志的位置,或者是整个停车线的位置。
我们现在可以从单个摄像机的图像中估计车道的几何形状,但是我们实际上拥有的是一个完整的视频序列。因此,我们不应仅使用单个图像,而是应该采用所有的视频序列图像,以增量的方式反复估计道路的几何形状。
我们已经了解到,所需要的系统状态包含了车道的宽度、车辆的纵向和横向位置,以及偏航角。左侧的图展示了在某一特定时间点,车辆和道路的两个坐标系统的状态。随着时间的推移,车辆会移动并覆盖一定的距离,我们将这个移动的向量称为m。我们假设我们能够通过车载传感器或者视觉测距等方式确定m的值,这样我们就能知道车辆在车辆坐标系统中的位置。如果我们知道向量m,那么我们就可以通过将m加到当前位置上,来计算下一时刻的新位置。 但是,我们需要注意的是,m是在车辆坐标系统中定义的向量,而d_long和d_lat是在道路坐标系统中定义的向量。因此,我们必须将m转换到道路坐标系统中,这可以通过我们之前推导出的公式来完成。如果我们假设偏航角非常小,那么我们可以使用1来近似表示偏航角的余弦值,而用偏航角本身来近似偏航角的正弦值,这样就可以简化整个等式了。
在这个偏航角本身上,我们假设我们也可以测量偏航角的变化,这意味着我们可以使用一些里程计传感器或视觉里程计来估计偏航角的变化,我们将其表示为Φ,所以ψ的更新非常简单,新的角度等于旧的角度加上Φ。对于道路宽度,它也是状态向量的一部分,我们假设它保持不变,因此b(t+1)等于b(t)。如果我们总结这些发现,我们可以将其写成矩阵向量乘法的形式,即新的状态向量等于某个矩阵乘以旧的状态向量再加上某个偏移量,这看起来非常类似于线性高斯系统的系统描述,正如我们在与卡尔曼滤波器一起介绍时所提到的那样。当然,在这里我们考虑到所有这些发现都有一些不精确性,所以我们可能会在这里添加一些随机噪声来处理小的变化以及我们没有明确建模的随机性,因此我们在这里有一个线性的状态转移模型。
为了能够使用像卡尔曼滤波器这样的滤波器,我们还需要一个观测模型。我们假设我们观察到左车道标线和右车道标线上各有一定数量的点,同时我们知道这些点在车辆坐标系中的位置。如果我们知道某个观察点在车辆坐标系中的x位置,那么我们就可以在车辆坐标系中画一条与y坐标平行的线,这条线在图中以虚线的形式表示。这条虚线在车道两边的边界上会与一些点相交,我们已经计算过这些点。因此,我们可以通过我们已经推导出的关系,来计算出 y^L 和 y^R 的值,也就是我们预期会找到的值。然而,如果我们将x视为一个常量而不是观测值,我们可以采取一个小技巧,即我们的观测值只是y^L,而不是x。
对于我们所进行的每个观测,我们可以创建其中一个测量方程,现在我们可以将所有这些测量方程排列成一个大的线性系统,即一个大的矩阵向量乘法,结果如下:前NL行包含左车道边界的NL个测量,剩下的NR行是指右车道边界的NR个测量。现在我们可以看到,这也非常符合线性系统所需的观测方程的形式。我们可以再次添加一些噪声项,一些白噪声项,然后我们可以看到,我们再次满足线性高斯模型的要求。
所以当我们总结建模时,我们得到了一个线性状态转移模型和一个线性观测模型,这非常符合卡尔曼滤波器的要求。这意味着通过这些矩阵和偏移向量,我们可以开始一个卡尔曼滤波器,并将我们进行的观测输入到这个卡尔曼滤波器中,通过这样做,我们可以逐步估计车道几何和车辆在该车道上的位置。
要以增量方式估计道路模型的状态变量,我们应遵循以下步骤。 首先,从道路的初始姿态和几何模型出发,然后应用预测步骤,比如卡尔曼滤波器,预测车辆在下一个时间点的位置。我们可以通过使用里程计传感器或视觉里程计来获取所需的偏移向量和偏航角度。接下来我们拍摄摄像头的图像并检测车道边界,可以采用基于梯度的方法或基于深度学习的方法。随后,我们将检测到的车道标记或车道边界投影到鸟瞰图中,也就是投影到车辆坐标系中。最后一步,我们执行卡尔曼滤波器的创新步骤,将观测到的车道边界与状态向量模型的车道边界进行匹配。总的来说就是这样的流程。
Curved Lanes 圆弧
至目前为止,我们介绍的方法都是用来处理直线道路的情况。但是,当道路不再是直线时怎么办?我们先来讨论道路符合圆弧形状的情况。在这种情况下,我们会以以下方式来建模,但还是需要知道车道的宽度。
由于道路符合圆弧,我们还需要知道圆的半径,或者作为替代,我们需要知道曲率κ。需要注意的是,曲率其实就是半径的倒数,也就是说,如果半径很大,那么曲率就会很小。同样要注意的是,半径和曲率都是有符号的变量,这个符号代表我们正在处理的是向左的曲线还是向右的曲线。此外,我们也需要考虑车辆相对于自己车道中心线的横向偏移量。我们还需要处理车辆位置的纵向偏移量。这个纵向偏移现在是沿着中心线进行的,因此它不再是坐标系原点和车辆位置之间的欧几里德距离,而是从道路坐标系原点开始到车辆位置的弧长。我们还需要考虑车辆的偏航角度,因此相对于圆的切线,车辆可能会旋转一定的角度。
因此,这整个情况可以通过一个状态向量来表示,这个向量包含五个变量:车道宽度B、圆的半径或曲率Kappa、纵向偏移d_long、横向偏移d_lat以及偏航角ψ。
我们可以很容易地发现,如果我们使用这种建模方式,对自车位置和车道模型参数的估计需要进行一些非线性计算,线性化不再可行,就像对于直线情况一样。因此,如果我们想解决这种类型车道的几何估计任务,我们需要非线性解决方案,可以使用非线性回归方法进行一次性定位和几何估计,或者使用扩展卡尔曼滤波器、无损卡尔曼滤波器,甚至是粒子滤波器,如果要实现模型的增量估计。
直线道路和圆弧形状道路元素还不足以描述道路的真实几何形状,因为如果道路仅由这些直线和圆弧形状元素组成,那对于驾驶员来说将非常不方便。如果观察沿着圆弧长度(即车辆行驶的纵向距离)的道路曲率,那么曲率在直线与圆弧相连接的位置会发生变化,这将要求人类驾驶员立即快速转动方向盘,这在实践中几乎是不可能的。因此,车辆会被迫偏离最佳行驶线。因此,如果可能的话,道路会以不同的方式建造,例如德国的高速公路和许多乡村道路并不是这样建造的,而是使用另一种几何形状,即所谓的卡洛伊德曲线。
Clothoid-shaped Lanes 卡洛伊德曲线
卡洛伊德曲线是一种其曲率随着弧长线性改变的几何形状。这意味着,当我们将直线段、卡洛伊德曲线和圆弧组合在一起时,曲率在弧长上的变化模式如下:在直线段的起始点处曲率为零,然后线性增加,在卡洛伊德曲线连接到圆弧的点处再次变为常数。这就意味着,曲率与弧长之间的函数关系是连续的,这让驾驶变得更为顺畅。但是,如何用这些卡洛伊德曲线来建模车道的几何形状,并如何估计卡洛伊德曲线的参数呢?
在数学上,卡洛伊德曲线是一种其曲率与弧长线性变化的几何曲线。我们用大写的L来表示弧长,而在L处的曲率κ遵循线性关系,即κ等于初始曲率κ_0加上曲率变化率κ_1乘以L。在下面的例子中,我们会展示一个卡洛伊德曲线的例子。当然,为了建模道路,我们通常只会使用卡洛伊德曲线的一部分,而不是整个螺旋曲线。
接下来,我们可以分析在某一点上,卡洛伊德曲线的切线方向是多少。我们可以用弧长L来表示每个点,并询问该位置的切线方向。我们用希腊字母χ来表示这个切线方向,χ(L)表示弧长位置L处的切线方向。那么,我们如何确定这个方向呢?我们可以从坐标系的原点开始,沿着卡洛伊德曲线积分曲率,直到达到所需的位置L。因此,我们需要计算从0到L的κ(λ)乘以dλ的积分。由于κ(λ)是线性函数,所以计算这个积分的闭式解是可能的,而且相当简单。
此外,我们可能还会对获得当我们沿着卡洛伊德曲线移动到弧长L位置时的欧几里德坐标感兴趣。我们仍然会从坐标系的原点和卡洛伊德曲线的起点开始,然后沿着卡洛伊德曲线积分切线单位向量。这个切线单位向量由χ(λ)的余弦和正弦组成,其中λ从0变化到L。然而,计算这个积分的闭式解是不可能的。
我们该怎么办呢?
我们的想法是再次假设我们只处理小的角度,也就是χ始终很小。由于我们只考虑卡洛伊德的一小部分,这个假设可能是成立的。如果he很小,我们可以用1近似cos(χ),用χ本身近似sin(χ),如果χ用弧度表示。这样,计算积分就变得简单了。我们得到X(L)的近似值约等于L,而Y(L)的近似值约等于κ_0L^2/2 + κ_1L^3/6,也就是说,我们将卡洛伊德曲线近似为一个三次多项式。
因此,如果我们想用卡洛伊德曲线建模道路的中心线,我们需要什么来建模整个道路和车辆在道路上的位置?我们需要知道车道宽度B,然后需要卡洛伊德曲线的初始曲率κ_0和曲率变化率κ_1。这描述了车道本身的形状。当然,我们还需要知道车辆在该车道上的位置,这由横向位置(即车辆到卡洛伊德曲线的正交距离)、纵向位置(与卡洛伊德曲线沿着其路径的弧长相等)以及车辆的偏航角来表示。总之,状态向量是一个六维向量,包含B、κ_0、κ_1、d_long、d_lat和ψ。
我们可以看到,我们之前讨论的两种情况,即直线元素和圆弧车道元素,都是这种建模的特殊情况。直线元素的κ_0等于0,κ_1等于0,而圆弧元素的κ_0不等于0,但κ_1等于0。因此,卡洛伊德曲线模型是这三个模型中最一般的情况。如果要估计这个参数向量,我们面临的是非线性方程,因此我们需要使用非线性回归方法或非线性滤波技术,也就是扩展卡尔曼滤波器、无损卡尔曼滤波器或甚至是粒子滤波器。
我们可以看到一个使用这种技术来估计道路几何形状的示例。这是一个稍微简化的版本,因为它仅估计车道几何形状,而不是车道宽度,车道几何形状表示为右车道边界的几何形状。这个视频是由研究小组的Julius Ziegler多年前创建的。让我们来看一下。
所以蓝线是估计的道路几何形状,它被反投影到摄像头图像中,我们可以看到,在这种高速公路行驶的情况下,该方法效果相当不错。我们可以估计未来大约20到30米的道路车道几何形状。对于较大的距离,该方法无法可靠地估计道路几何形状,因为车道标线的检测效果较差。当然,我们还可以看到,在车道变换时,该方法存在问题,因为车道变换没有被建模,因此估计结果在一段时间内会有些奇怪,直到该方法再次找到新的车道边界并适应该新的车道边界。是的,我们在高速公路外,道路的曲率相当大,标线不太清晰可见,而且摄像头的视野也不是很大,因此在这些狭窄的弯道上,该方法会丢失车道标线或甚至无法看到车道标线,从而导致方法失效。
对于高速公路行驶,这种方法效果很好,高速公路行驶中有许多应用程序使用了这种方法或其变体,例如车道偏离警告和类似的应用。当然,在实践中,有时车道的某些部分是由前方车辆编码的,这必须明确建模,以避免该方法适应某些人工结构或其他车辆上的结构,并假设这些结构是车道标线,而实际上它们并不是。因此,为了避免这些问题,可能需要将该方法与一些物体检测器结合使用。
总结一下车道和道路识别方法。我们首先讨论了如何检测车道标线和车道边界,我们首先介绍了一种基于梯度的方法,该方法能够检测到车道标线,但要求车道标线与道路表面之间有很好的对比度。然后,我们介绍了一种使用深度学习技术估计车道边界的方法,这种方法在城市驾驶中更加方便,因为车道标线通常不可见或甚至具有误导性。然后,我们为车道和车辆在车道上的位置引入了几何模型,并分别对直线车道、圆弧和卡洛伊德曲线作了描述,找到了适用于所有这些情况的包含六个参数的表示。然后,我们推导了直线车道情况的回归方法,可以估计车道参数,并将该方法扩展为一种增量滤波方法,以从整个视频序列中估计车道几何形状。最后,我们看到了一个展示这些方法性能的示例视频。尝试在Matlab等平台上实现基本算法,以获得它们的实际性能, 强烈推荐这样做作为考试准备。