主要内容

车道检测

这个例子展示了如何实现一种fpga的车道标记检测算法。

车道检测是先进驾驶辅助系统(ADAS)的关键处理阶段。从视频流中自动检测车道边界具有计算挑战性,因此通常需要fpga和gpu等硬件加速器来实现实时性能。

在这个例子模型中,一个基于fpga的车道候选生成器与一个基于软件的多项式拟合引擎相结合,来确定车道边界。

系统概述

LaneDetectionHDL.slx系统如下图所示。HDLLaneDetector子系统代表设计的硬件加速部分,而SwlaneFindOverlay子系统代表基于软件的多项式拟合引擎。在帧到像素块之前,RGB输入转换为强度颜色空间。

车道检测器

HDL车道检测器代表设计的硬件加速部分。该子系统接收来自前向摄像头源的输入像素流,变换视图以获得鸟瞰视图,从变换视图中定位车道标记候选对象,然后将其缓冲到向量中,以发送到软件端,用于曲线f镶嵌和覆盖。

鸟瞰

鸟瞰视图块将前置摄像头视图转换为鸟瞰视角。使用该视图中的图像简化了下游车道检测算法的处理要求。正面视图遭受透视失真,导致车道在消失点处收敛。通过应用反透视变换来校正透视失真。

反向透视映射(IPM)的表达式如下:

$ $(\帽子{x}, {y} \帽子)=圆\离开(\压裂{h_ {11} x + h_ {12} y + h_ {13}} {h_ {31} x + h_ {32} y + h_{33}}, \压裂{h_ {21} x + h_ {22} y + h_ {23}} {h_ {31} x + h_ {32} y + h_{33}} \右)$ $

单应矩阵,H,由物理相机设置的四个固有参数导出,即焦距、螺距、高度和原理点(来自针孔相机模型)。有关更多详细信息,请参阅计算机视觉工具箱™ 文档

您可以使用计算机视觉工具箱估计单应矩阵™estimateGeometricTransform2D函数或图像处理工具箱™fitgeotrans函数创建projective2d对象。这些函数需要源帧和鸟瞰图帧之间的一组匹配点。源框架点作为感兴趣的梯形区域的顶点,可以扩展到超过源框架限制的区域来捕获更大的区域。对于所示的梯形,点映射为:

$ $ sourcePoints = [c_ {x}, c_ {y}; \ d_ {x}, d_ {y}; \现代{x},现代{y}; \ b_ {x}, b_ {y}] $ $

$$birdsEyePoints = [1,1;\ bAPPL,1;\ 1,bAVL;\ bAPPL,bAVL]$$

在哪里bAPPLbAVL分别为每行鸟瞰活动像素和活动视频线。

在FPGA/ASIC硬件上直接评估源(正面)到目的地(鸟瞰)的实时映射具有挑战性。对分割的要求以及从帧缓冲区对非顺序存储器访问的潜力意味着这部分设计的计算需求是实质性的。因此,不是直接实时评估IPM计算,而是对输入到输出映射进行离线分析,并用于预计算映射方案。这是可能的,因为单应矩阵在工厂校准/安装摄像机后是固定的,因为摄像机的位置、高度和俯仰是固定的。

在此特定示例中,鸟眼输出图像是[700x640]尺寸的帧,而前向输入图像是[480x640]尺寸的帧。在下一个前向摄像头输入流进来之前,没有足够的消隐功能来输出完整的鸟眼帧。因此,鸟瞰视图块在完成当前鸟瞰帧的处理之前,不会接受任何新帧数据。

行缓冲和地址计算

从输入到输出的全尺寸投影变换将产生[900x640]的输出图像。这就要求将完整的[480x640]输入图像存储在内存中,同时使用源位置和单应矩阵计算源像素位置。理想情况下,片内存储器应该用于此目的,而不需要片外帧缓冲区。

通过使用单应矩阵执行逆行映射,可以确定芯片上缓冲的行数。下面的脚本从点映射计算单应矩阵,使用它进行反变换,将源帧行映射到鸟瞰图行。

%来源和鸟眼框架参数AVL:活动视频线,APPL:活动像素每线sAVL = 480;sAPPL = 640;%一个框架bAVL = 700;bAPPL = 640;
确定单应矩阵%点映射[NW;东北;西南;SE)sourcePoints = [218196;421196;-629405;1276年,405年);birdsEyePoints = [001001;640001;001900;640900);%估计变换tf = estimateGeometricTransform2D (sourcePoints birdsEyePoints,“投射的”);%单应性矩阵h = tf.T;
%在源框架上可视化鸟瞰ROIvidObj = VideoReader (“visionhdl_caltech.avi”);vidFrame = readFrame (vidObj);vidFrameAnnotated = insertShape (vidFrame,“多边形”,[sourcePoints(1,:)...: sourcePoints (2) sourcePoints (4:) sourcePoints (3:)),...“线宽”5,“颜色”“红色”);vidFrameAnnotated = insertShape (vidFrameAnnotated,“FilledPolygon”...[sourcePoints (1:) sourcePoints (2:) sourcePoints (4:)...来源点(3,:)],“线宽”5,“颜色”“红色”“不透明度”, 0.2);图(1);次要情节(2,1,1);imshow (vidFrameAnnotated)标题(“源视频帧”);
确定所需的鸟眼线缓冲深度在帧中心逆行映射x =圆(sourcePoints (2,1) - ((sourcePoints (2, 1) -sourcePoints (1,1)) / 2));bAVL Y = 0(1日);对于ii = 1:1:bAVL [~,Y(ii)] = transformPointsInverse(tf,x,ii);终止numRequiredRows = ceiw (Y(0.98*bAVL) - Y(1));
%可视化反向行映射次要情节(2,1,2);情节(Y,“可操作性”“关闭”);%逆行映射参照线(0.98 * bAVL,“r”'98%'“LabelHorizontalAlignment”“左”...“可操作性”“关闭”);%行缓冲器深度yline (Y (1),“r——”“可操作性”“关闭”) yline (Y (0.98 * bAVL),“r”)标题(“鸟瞰视图逆行映射”);包含(“输出行”);ylabel (“输入行”);传奇([“行缓冲器深度:”num2str (numRequiredRows),“行”],...“位置”“西北”); 轴平等的; 网格

该图显示了输入行到输出行的映射,表明为了生成从上到下的鸟眼输出图像的前700行,大约需要50行输入图像。这是使用片内存储器存储的可接受的行数。

车道检测

通过获取鸟瞰图,可以进行实际的车道检测。有许多技术可以考虑到这一目的。为了实现一个健壮的、在流图像数据上工作得很好并且可以在FPGA/ASIC硬件上以合理的资源成本实现的实现,本示例使用[1]中描述的方法。该算法使用一个垂直方向的一阶高斯导数滤波核进行全图像卷积,然后进行子区域处理。

垂直方向滤波器卷积

紧接着输入图像的鸟眼映射,输出与一个过滤器进行卷积,该过滤器设计用于定位黑色背景上的高强度像素条带。核的宽度是8像素,这与鸟眼图像中出现的线的宽度有关。高度设置为16,这与图像中出现的虚线标记的大小有关。由于鸟瞰图像与相机的高度、俯仰等物理相关,图像中车道的宽度本质上与道路的物理测量相关。在不同国家操作车道检测系统时,可能需要更新kernel的宽度和高度。

过滤器内核的输出如下所示,使用喷射器颜色映射来突出强度上的差异。因为滤波器核是一个一般的、垂直方向的高斯导数,所以会有来自许多不同区域的响应。然而,对于存在车道标记的位置,在强烈的负响应旁边有一个强烈的正响应,这是跨列一致的。下一阶段的检测算法将使用滤波器输出的这一特性来定位有效的通道候选。

莱恩候选人一代

与高斯导数核卷积后,对输出进行子区域处理,求出有车道标记的坐标。每个区域由18行组成,有一个乒乓存储器方案,以确保数据可以连续地流过子系统。

柱状图列数

首先,HistorogramColumnCount统计18行区域中每列中的阈值像素数。高列计数表示区域中可能存在车道。此计数针对正阈值图像和负阈值图像执行。正直方图计数被偏移以考虑内核宽度。车道caNDIDate发生在正计数和负计数都很高的地方。这利用了前面提到的卷积输出特性,其中正磁道出现在负磁道旁边。

在内部,列计数直方图生成选择18行区域的控制信号,计算列直方图,并在准备就绪时输出结果。一个乒乓缓冲方案是适当的,它允许一个直方图正在读取,而下一个直方图正在写入。

重叠和繁殖

如上所述,当鸟瞰图像中出现一条车道时,卷积结果将产生高强度正输出的条带,紧邻高强度负输出的条带。正列计数直方图和负列计数直方图定位这些区域。为了放大这些位置,正计数输出被延迟8个时钟周期(与核宽相关的内在参数),并且正计数和负计数相乘。这将放大阳性和阴性计数一致的列,并将阳性和阴性计数不一致的区域最小化。该设计是流水线,以确保高吞吐量操作。

过零滤波器

在重叠和倍增子系统的输出中,有车道标记的地方会出现峰值。峰值检测算法确定车道标记存在的列。由于数据的信噪比比较高,本例使用了简单的FIR滤波操作,然后进行过零检测。零穿越滤波器是使用DSP System Toolbox™中的离散FIR滤波器块实现的。它是流水线为高吞吐量的操作。

商店主要航线

然后将过零滤波器输出传递到存储主通道子系统。这个子系统的最大内存为7个条目,每次达到18行新批时都会重置。因此,每个子区域生成7个潜在的车道候选。在这个子系统中,过零滤波器输出流通过,并检查潜在的过零。如果确实发生了零交叉,那么在零交叉之前的地址和零交叉之后的地址之间的差值就被取下来,以获得对峰值大小的测量。子系统存储具有最高震级的过零位置。

计算自我道

车道检测子系统输出7个最可行的车道标记。在许多应用中,我们最感兴趣的是包含车辆行驶的车道的车道标记。通过在设计的硬件方面计算所谓的“Ego-Lanes”,我们可以通过向处理器发送2个而不是7个lanes,减少硬件和软件之间的内存带宽。Ego-Lane计算被分成两个子系统。FirstPassEgoLane子系统假设当车辆在车道边界内正确运行时,图像的中心列对应于车道的中间。因此,最接近中心的候选车道被认为是自我车道。离群点移除子系统保持从车道标记到中心坐标的距离的平均宽度。不符合当前宽度公差的车道标记将被拒绝。在设计后期进行曲线拟合时,尽早拒绝车道标志会得到更好的结果。

控制接口

最后,将计算得到的自我通道发送到MATLAB函数子系统CtrlInterface。这个状态机使用的四个控制信号输入,使hwStart, hwDone, swStart决定何时开始缓冲,接受新巷协调到40 x1缓冲区,最后指出软件所有40一直缓冲,所以巷巷坐标拟合可以执行和叠加。dataReady信号确保软件在所有40个坐标被缓冲之前不会尝试车道拟合,而swStart信号确保当前的40个坐标集将被保留,直到车道拟合完成。

软件车道拟合和覆盖

然后,检测到的ego车道被传递到SW车道拟合和叠加子系统,在该子系统中执行稳健的曲线拟合和叠加。回想一下,鸟眼输出大约每两帧产生一次,而不是每一个连续帧产生一次。因此,曲线拟合和叠加被放置在启用的子系统中,该子系统仅在以下情况下启用产生了新的自我车道。

驾驶员

驱动MATLAB函数子系统控制硬件和软件之间的同步。最初它处于轮询状态,每帧定期采样dataReady输入,以确定硬件何时缓冲了完整的[40x1]车道坐标向量。一旦发生这种情况,它就转换为软件处理状态,其中swStart和进程输出保持较高。驱动程序一直处于软件处理状态,直到swDone输入为高。由于流程输出循环回swDone输入,中间有一个速率转换块,因此为FitLanesandOverlay子系统指定了一个有效的恒定时间预算,以执行装配和覆盖。当swDone为高时,驱动程序将转换到同步状态,其中swStart保持为低状态,以向硬件表明处理已经完成。软件和硬件之间的同步是这样的,硬件将保持车道坐标的[40x1]向量,直到swStart信号转换回低。当这种情况发生时,硬件的dataReady输出将转回低电平。

调整车道和叠加

Fit Lanes和Overlay子系统由驱动程序启用。它执行必要的算法,将多项式拟合到输入处接收到的车道坐标数据上,然后将拟合的车道和车道坐标绘制到bird - eye图像上。

合适的航线

拟合车道子系统在生成的候选车道上运行基于RANSAC的线路拟合程序。RANSAC是一种迭代算法,它根据拟定曲线和输入数据之间的距离度量建立一个入口表。在该子系统的输出处,有一个[3x1]指定RANSAC例程找到的多项式系数的向量。

覆盖车道标记

叠加车道标记子系统执行图像可视化操作。它覆盖通过车道拟合例程找到的ego车道和曲线。

仿真结果

该模型包括两个视频显示器,显示在仿真结果的输出。的伯兹显示在覆盖车道候选、执行多项式拟合并将结果多项式覆盖到图像上后,以扭曲透视图显示输出。这个OriginalOverlay显示屏显示伯兹输出又回到了原来的角度。

由于在该模型中使用的帧尺寸较大,仿真可能需要较长的时间才能完成。如果您有HDL验证器™许可证,您可以通过使用FPGA in the Loop (TM)在硬件中直接运行HDL Lane Detector子系统来加速模拟速度。

HDL代码生成

要检查和生成本例中引用的HDL代码,您必须具有HDL Coder™许可证。

要生成HDL代码,请使用以下命令。

makehdl (“LaneDetectionHDL / HDLLaneDetector”

要生成测试工作台,请使用以下命令。注意,由于数据量大,测试台生成需要很长时间。您可能希望在生成测试台之前减少模拟时间。

makehdltb (“LaneDetectionHDL / HDLLaneDetector”

为了更快地模拟测试台,您可以使用以下命令生成SystemVerilog DPIC测试台。

makehdltb (“LaneDetectionHDL / HDLLaneDetector”“GenerateSVDPITestBench”“ModelSim”

结论

这个例子提供了对ADAS系统总体设计挑战的洞察,特别强调了硬件设计中关键部分的加速。

参考文献

[1] . R. K. Satzoda和Mohan M. Trivedi,“基于视觉的Lane分析:嵌入式实现的问题和方法的探索”,2013 IEEE计算机视觉与模式识别会议。

[2]加州理工学院车道数据集视频- Mohamed Aly,“城市街道车道标记的实时检测”,2008年IEEE智能车辆研讨会-经许可使用。

相关的话题