主要内容

findParabolicLaneBoundaries

用抛物线模型求边界

描述

例子

边界= findParabolicLaneBoundaries (xyBoundaryPointsapproxBoundaryWidth采用随机抽样一致性(RANSAC)算法寻找拟合一组边界点和近似宽度的抛物线车道边界模型。的返回数组中的每个模型parabolicLaneBoundary对象包含[a b c]其二次多项式方程的系数和边界估计的强度。

边界boundaryPoints= find抛物线界线(xyBoundaryPointsapproxBoundaryWidth还返回所找到的每个边界模型的较内边界点的单元格数组。

___= find抛物线界线(___名称,值使用一个或多个指定的选项名称,值对参数,使用前面的任何语法。

例子

全部折叠

利用抛物线车道边界模型在图像中寻找车道。在原始图像和图像的鸟瞰变换上叠加识别出的车道。

加载带有车道的道路图像。该图像是由安装在车辆前部的摄像头传感器获得的。

I = imread(“road.png”);

通过使用预先配置的传感器对象将图像转换为鸟瞰图像。该对象为捕捉原始图像的传感器建模。

bevSensor = load(“birdsEyeConfig”);birdsEyeImage = transformImage(bevSensor.birdsEyeConfig,I);imshow (birdsEyeImage)

图中包含一个轴对象。axis对象包含一个image类型的对象。

设置以世界单位(米)为单位的近似车道标记宽度。

approxBoundaryWidth = 0.25;

检测车道特征并将其显示为黑白图像。

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

图中包含一个轴对象。axis对象包含一个image类型的对象。

在世界坐标中获取车道候选点。

[imageX,imageY] = find(birdsEyeBW);xyBoundaryPoints = imageToVehicle(bevSensor.birdsEyeConfig,[imageY,imageX]);

方法查找图像中的车道边界findParabolicLaneBoundaries函数。默认情况下,该函数最多返回两个车道边界。的数组中存储边界parabolicLaneBoundary对象。

边界=找到抛物线lane边界(xyBoundaryPoints,approxBoundaryWidth);

使用insertLaneBoundary在原始图像上叠加车道。的XPoints向量表示车辆传感器范围内的车道点,单位为米。指定不同颜色的车道。默认情况下,车道为黄色。

XPoints = 3:30;figure sensor = bevSensor.birdsEyeConfig.Sensor;lanesI = insertLaneBoundary(I,边界(1),传感器,XPoints);lanesI = insertLaneBoundary(lanesI,边界(2),传感器,XPoints,“颜色”“绿色”);imshow (lanesI)

图中包含一个轴对象。axis对象包含一个image类型的对象。

在鸟瞰图中查看车道。

figure BEconfig = bevSensor.birdsEyeConfig;lanesBEI = insertLaneBoundary(birdsEyeImage,boundaries(1),BEconfig,XPoints);lanesBEI = insertLaneBoundary(lanesBEI,boundaries(2),BEconfig,XPoints,“颜色”“绿色”);imshow (lanesBEI)

图中包含一个轴对象。axis对象包含一个image类型的对象。

输入参数

全部折叠

候选边界点,指定为(x, y)矢量在车辆坐标中。获取a中各点的车辆坐标birdsEyeView图像,使用imageToVehicle函数将鸟瞰图像坐标转换为车辆坐标。

近似边界宽度,以世界单位的实标量表示。宽度是水平的y设在测量。

名称-值参数

的可选逗号分隔对名称,值参数。的名字参数名称和价值对应的值。的名字必须出现在引号内。您可以以任意顺序指定多个名称和值对参数Name1, Value1,…,的家

例子:“MaxSamplingAttempts”,200年

函数试图查找的车道边界的最大数目,指定为逗号分隔的对,由“MaxNumBoundaries”一个正整数。

函数来验证边界模型,该模型指定为逗号分隔的对,由“ValidateBoundaryFcn”和一个函数句柄。指定的函数返回逻辑的1(true)如果边界模型被接受且符合逻辑0(false)。使用此函数拒绝无效边界。函数的形式必须是:

isValid = validateBoundaryFcn(参数)

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

默认的验证函数总是返回1(真正的)。

寻找产生有效抛物线边界的点样本的最大尝试次数,指定为由逗号分隔的对组成“MaxSamplingAttempts”和一个函数句柄。findParabolicLaneBoundaries使用fitPolynomialRANSAC函数从边界点集合中采样并拟合抛物线边界。

输出参数

全部折叠

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

财产 描述
参数

这种形式的抛物线模型的系数y斧头2+Bx+C,指定为形式的实值向量[a b c]

BoundaryType

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

  • 没有标记的

  • 固体

  • BottsDots

  • DoubleSolid

车道边界对象总是返回BoundaryType类型固体.更新这些类型以匹配正在安装的车道类型。要更新车道边界类型,请使用LaneBoundaryType。BoundaryType语法。例如,这个代码示例展示了如何将第一个输出车道边界更新为typeBottsDots

边界(1)= LaneBoundaryType.BottsDots;

强度

边界模型的强度,指定为实标量。强度数的比值是唯一的吗x属性指定的边界长度的-轴位置XExtent财产。没有任何断口的实线比沿边界全长有断口的虚线强度更高。

XExtent

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

的单元格数组返回的Inlier边界点(x, y)值。单元格数组中的每个元素都对应于数组中的相同元素parabolicLaneBoundary对象。

提示

  • 若要将单个边界模型拟合到双车道标记,请设置approxBoundaryWidth参数设置为足够大,以包括跨越两个车道标记的宽度。

算法

  • 此函数使用fitPolynomialRANSAC找到抛物线模型。由于该算法使用随机抽样,因此每次运行输出都会有所不同。

  • maxDistance参数的fitPolynomialRANSAC属性中指定的宽度的一半approxBoundaryWidth论点。如果点在边界宽度内,则认为它们是内线。该函数使用最小二乘拟合插值点得到最终边界模型。

扩展功能

在R2017a中引入