主要内容

findCubicLaneBoundaries

发现使用立方模型边界

描述

例子

边界= findCubicLaneBoundaries (xyBoundaryPoints,approxBoundaryWidth)使用随机样本共识(RANSAC)算法来找到立方车道边界模型,符合一组边界点和一个近似的宽度。返回数组的每个模型cubicLaneBoundary对象包含了[A B C D]系数的三度多项式方程和边界强度的估计。

(边界,boundaryPoints)= findCubicLaneBoundaries (xyBoundaryPoints,approxBoundaryWidth)还返回一个单元阵列内围层边界点为每个边界模型发现,使用前面的输入参数。

(___)= findCubicLaneBoundaries (___,名称,值)使用指定的一个或多个选项名称,值参数,与前面的语法。

例子

全部折叠

发现车道图像通过使用立方车道边界模型。覆盖原始图像的识别车道和一个鸟瞰图变换的图像。

加载图像道路的车道。这张照片从相机获得传感器安装在汽车的前面。

我= imread (“road.png”);

将图像转换为一个鸟瞰图图像通过使用一个预先配置的传感器对象。这个对象模型的传感器捕获原始图像。

bevSensor =负载(“birdsEyeConfig”);birdsEyeImage = transformImage (bevSensor.birdsEyeConfig,我);imshow (birdsEyeImage)

图包含一个坐标轴对象。坐标轴对象包含一个类型的对象的形象。

设置宽度近似车道标志在世界单位(米)。

approxBoundaryWidth = 0.25;

检测车道功能和显示的黑白图像。

birdsEyeBW = segmentLaneMarkerRidge (im2gray (birdsEyeImage),bevSensor.birdsEyeConfig approxBoundaryWidth);imshow (birdsEyeBW)

图包含一个坐标轴对象。坐标轴对象包含一个类型的对象的形象。

获得相对应的图像坐标巷候选人的立场。的找到函数返回对应于候选像素指数车道的位置。按照惯例,图像坐标的顺序总是相对于像素指数逆转。关于图像坐标的更多信息,请参阅坐标系统

获得相应的车辆车道边界点坐标通过使用imageToVehicle函数。

[imgaeY, imageX] =找到(birdsEyeBW);xyBoundaryPoints = imageToVehicle (bevSensor.birdsEyeConfig [imageX imgaeY]);

找到图像中车道边界通过使用findCubicLaneBoundaries函数。默认情况下,函数返回最多两个车道边界。存储在一个数组的边界cubicLaneBoundary对象。

边界= findCubicLaneBoundaries (xyBoundaryPoints approxBoundaryWidth);

使用insertLaneBoundary覆盖原始图像的车道。的XPoints向量代表巷点,米,范围内的自我车辆的传感器。用不同的颜色指定车道。默认情况下,通道是黄色的。

XPoints = 3;数字传感器= bevSensor.birdsEyeConfig.Sensor;lanesI = insertLaneBoundary(边界(1),传感器,XPoints);lanesI = insertLaneBoundary (lanesI边界(2),传感器,XPoints,“颜色”,“绿色”);imshow (lanesI)

图包含一个坐标轴对象。坐标轴对象包含一个类型的对象的形象。

视图的车道鸟瞰图的形象。

图BEconfig = bevSensor.birdsEyeConfig;lanesBEI = insertLaneBoundary (birdsEyeImage,界限(1)、BEconfig XPoints);lanesBEI = insertLaneBoundary (lanesBEI,界限(2)、BEconfig XPoints,“颜色”,“绿色”);imshow (lanesBEI)

图包含一个坐标轴对象。坐标轴对象包含一个类型的对象的形象。

输入参数

全部折叠

候选边界点,指定为一个(x, y)向量在车辆坐标系。获取车辆坐标点birdsEyeView图像,使用imageToVehicle函数鸟瞰图图像坐标转换为车辆坐标。

近似边界宽度,在世界单位指定为一个真正的标量。宽度是一个水平y设在测量。

名称-值参数

指定可选的双参数作为Name1 = Value1,…,以=家,在那里的名字参数名称和吗价值相应的价值。名称-值参数必须出现在其他参数,但对的顺序无关紧要。

R2021a之前,用逗号来分隔每一个名称和值,并附上的名字在报价。

例子:“MaxSamplingAttempts”, 200年

最大数量的车道边界函数试图找到指定为逗号分隔组成的“MaxNumBoundaries”和一个正整数。

功能验证边界模型,指定为逗号分隔组成的“ValidateBoundaryFcn”和一个函数处理。指定的函数返回逻辑1(真正的)如果被接受和逻辑边界模型0(false)。使用这个函数拒绝无效的边界。表单的功能必须:

isValid = validateBoundaryFcn(参数)

参数是一个向量对应的三个抛物线参数。

默认的验证函数始终返回1(真正的)。

最大数量的试图找到一个样本点,产生一个有效的立方边界,指定为逗号分隔组成的“MaxSamplingAttempts”和一个函数处理。findCubicLaneBoundaries使用fitPolynomialRANSAC函数样本组边界点和适合立方边界线。

输出参数

全部折叠

车道边界模型,作为一个数组返回cubicLaneBoundary对象。这个表显示每个输出边界对象的属性。

财产 描述
参数

系数的立方模型形式y=一个x3+Bx2+Cx+D,指定为一个实值向量的形式[A B C D]

BoundaryType

车道边界类型,指定为一个LaneBoundaryType枚举。金宝app支持车道边界类型有:

  • 没有标记的

  • 固体

  • BottsDots

  • DoubleSolid

车道边界对象总是返回BoundaryType类型固体。更新这些类型匹配类型的车道被安装。更新一个车道边界类型,使用LaneBoundaryType。BoundaryType语法。例如,这个代码示例展示了如何更新第一个输出通道边界类型BottsDots:

(1)= LaneBoundaryType.BottsDots边界;

强度

边界强度模型,指定为一个真正的标量。强度独特的数量的比例吗x设在边界上的位置指定的边界的长度XExtent财产。一个没有任何休息的实线强度高于一个虚线边界沿全长。

XExtent

边界的长度x设在,指定为一个实值向量的形式【风骚女子maxX的】描述的最小值和最大值x设在位置。

内围层边界点,作为细胞数组返回(x, y)值。细胞数组的每个元素对应于相同的元素的数组cubicLaneBoundary对象。

提示

  • 适合一个双车道标记边界模型,设置approxBoundaryWidth参数是大到足以包含宽度跨越两车道标记。

算法

  • 这个函数使用fitPolynomialRANSAC发现立方模型。因为该算法使用随机抽样,运行之间的输出会发生变化。

  • maxDistance参数的fitPolynomialRANSAC设置为指定的宽度的一半吗approxBoundaryWidth论点。点被认为是内围层边界宽度内。使用最小二乘函数获得最后的边界模型适用于内围层点。

扩展功能

C / c++代码生成
生成C和c++代码使用MATLAB®编码器™。

版本历史

介绍了R2018a