主要内容

monoCamera

配置单目摄像传感器

描述

monoCamera对象保存有关单目相机传感器配置的信息。配置信息包括相机的固有特性、相机的外部特性,如其方向(由俯仰、偏航和滚转描述),以及相机在车辆中的位置。要估计内部和外部相机参数,请参见校准单目摄像机

对于相机捕获的图像,可以使用imageToVehicle而且vehicleToImage函数转换图像坐标和车辆坐标之间的点位置。这些函数应用投影变换(单应性),使您能够估计从安装在车辆上的摄像头到平坦路面位置的距离。

创建

描述

传感器=单摄像机(intrinsic高度创建一个monoCamera对象,该对象包含单目相机传感器的配置,给定相机的内在参数和相机离地面的高度。intrinsic而且高度设置intrinsic而且高度相机的属性。

例子

传感器= monoCamera (intrinsic、身高、名称,值属性使用一个或多个名称-值对。例如,monoCamera (intrinsic, 1.5,“球场”,1)创建一个单目摄像机传感器,该传感器距离地面1.5米,朝向地面的倾角为1度。将每个属性名用引号括起来。

属性

全部展开

相机的固有参数,指定为cameraIntrinsicscameraParameters对象。相机的固有参数包括相机的焦距和光学中心,以及相机产生的图像的大小。

您可以在创建对象时设置此属性。创建对象后,此属性为只读。

从路面到相机传感器的高度,指定为实标量。高度是从地面到相机焦点的垂直距离。以世界单位指定高度,例如米。要估计此值,请使用estimateMonoCameraParameters函数。

俯仰角:车辆的水平面与相机光轴之间的俯仰角,以度为单位指定为实标量要估计此值,请使用estimateMonoCameraParameters函数。

球场使用ISO公约旋转,与顺时针正角度方向时,在车辆的正方向YV轴。

带有Xv、Yv和Zv轴标记的相机的并排图像。在第一张图中,相机是直的。在第二幅图中,相机向下倾斜以表示俯仰角的变化。

详情请参见角方向

偏航角之间XV车辆的轴和相机的光轴,指定为以度为单位的实标量。要估计此值,请使用estimateMonoCameraParameters函数。

偏航使用ISO公约旋转,与顺时针正角度方向时,在车辆的正方向ZV轴。

带有Xv、Yv和Zv轴标记的相机的并排图像。在第一张图片中,相机是面向前方的。在第二张图中,相机向左旋转以表示偏航角度的变化。

详情请参见角方向

相机围绕其光轴的滚转角度,返回为以度为单位的实标量。要估计此值,请使用estimateMonoCameraParameters函数。

使用ISO公约旋转,与顺时针正角度方向时,在车辆的正方向XV轴。

带有Xv、Yv和Zv轴标记的相机的并排图像。在第一张图中,相机是直的。在第二幅图像中,相机围绕其轴旋转以指示俯仰角的变化。

详情请参见角方向

相机传感器的中心位置,指定为二维矢量的形式xy.使用此属性可更改相机的位置。单位位于车辆坐标系统(XVYVZV).

默认情况下,相机传感器位于(XVYV)的起点,位于高度

车辆与前置摄像头和xv轴,yv轴,和zv轴标记

世界坐标系统单位,指定为字符向量或字符串标量。此属性仅存储单位类型,不影响任何计算。任何文本都是有效的。

您可以在创建对象时设置此属性。创建对象后,此属性为只读。

对象的功能

imageToVehicle 将图像坐标转换为车辆坐标
vehicleToImage 将车辆坐标转换为图像坐标

例子

全部折叠

创建一个前向单目相机传感器安装在自我车辆。检查从相机捕获的图像,并确定图像在车辆和图像坐标中的位置。

设置相机的内在参数。指定焦距、图像平面的主点和输出图像大小。单位是像素。将这些intrinsic保存为cameraIntrinsics对象。

focalLength = [800 800];principalPoint = [320 240];imageSize = [480 640];intrinsic = cameraIntrinsics(focalLength,principalPoint,imageSize);

指定相机的位置。将摄像机放置在距离地面2.18米的位置,朝向地面倾斜14度。

身高= 2.18;Pitch = 14;

利用相机的固有参数和相机的位置定义一个单目相机传感器。从相机中加载图像。

传感器= monoCamera(intrinsic,height,“节”、沥青);Ioriginal = imread(“road.png”);图imshow(Ioriginal)标题(原始图像的

图中包含一个轴对象。标题为Original Image的axes对象包含一个Image类型的对象。

确定摄像机正前方10米处的图像坐标。的X-轴指向摄像机和Y-轴指向左边。

xyVehicleLoc1 = [10 0];xyImageLoc1 = vehicleToImage(传感器,xyImageLoc1)
xyImageLoc1 =1×2320.0000 - 216.2296

显示图像上的点。

IvehicleToImage = insertMarker(Ioriginal,xyImageLoc1);IvehicleToImage = insertText(IvehicleToImage,xyImageLoc1 + 5,10米的);图imshow(IvehicleToImage)“Vehicle-to-Image点”

图中包含一个轴对象。标题为Vehicle-to-Image Point的axis对象包含一个image类型的对象。

确定图像中位于路面上的点的车辆坐标。

xyImageLoc2 = [300 300];xyImageLoc2 = imageToVehicle(传感器,xyImageLoc2)
xyVehicleLoc2 =1×26.5959 - 0.1732

该点位于车辆前方约6.6米,车辆中心左侧约0.17米。

显示图像上该点的车辆坐标。

IimageToVehicle = insertMarker(Ioriginal,xyImageLoc2);displayText = sprintf(”(%。2f m, %。2 f m) ', xyVehicleLoc2);IimageToVehicle = insertText(IimageToVehicle,xyImageLoc2 + 5,displayText);图imshow(IimageToVehicle)“Image-to-Vehicle点”

图中包含一个轴对象。标题为image -to- vehicle Point的axes对象包含一个image类型的对象。

通过使用单目摄像机配置创建一个视觉传感器,并从该传感器生成检测。

指定相机的内在参数并创建一个monoCamera对象。摄像机安装在距离地面1.5米,倾角为1度的车载顶部。

focalLength = [800 800];principalPoint = [320 240];imageSize = [480 640];intrinsic = cameraIntrinsics(focalLength,principalPoint,imageSize);高度= 1.5;Pitch = 1;monoCamConfig = monoCamera(intrinsic,height,“节”、沥青);

使用单目摄像机配置创建一个视觉检测生成器。

visionSensor = visionDetectionGenerator(monoCamConfig);

用一辆自我车辆和两辆目标车辆生成一个驾驶场景。将第一辆目标车放置在自我车辆正前方30米处。将第二辆目标车放置在第一辆车前方20米处,但向左偏移3米。

scenario = drivingScenario;egoVehicle =车辆(场景,“ClassID”1);targetCar1 =车辆(场景,“ClassID”, 1“位置”,[30 0 0]);targetCar2 =车辆(场景,“ClassID”, 1“位置”,[20 3 0]);

使用鸟瞰图显示车辆轮廓和传感器覆盖区域。

图bep = birdsEyePlot(“XLim”, 50 [0],“YLim”20 [-20]);olPlotter = outlinePlotter(bep);[位置,偏航,长度,宽度,originOffset,color] = targetOutlines(egoVehicle);plotOutline (olPlotter、位置、偏航、长度、宽度);caPlotter = coverageAreaPlotter(bep,“DisplayName的”“覆盖范围”“FaceColor”“蓝”);plotCoverageArea (caPlotter visionSensor.SensorLocation visionSensor.MaxRange,...visionSensor.Yaw visionSensor.FieldOfView (1))

图中包含一个轴对象。axis对象包含一个patch类型的对象。该对象表示覆盖区域。

从自我车辆的角度获得目标车辆的姿态。使用这些姿势从传感器生成检测。

姿态= targetpose (egoVehicle);[dets,numValidDets] = visionSensor(pose,scenario.SimulationTime);

显示(XY)有效检测的位置。对于每个检测,(XY的前两个值测量字段。

i = 1:numValidDets XY = dets{i}.Measurement(1:2);detXY = sprintf('检测%d: X = %。2f米,Y = %。2 f米”,我,XY);disp (detXY)结束
探测1:X = 19.09米,Y = 2.79米探测2:X = 27.81米,Y = 0.08米

更多关于

全部展开

扩展功能

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

版本历史

在R2017a中引入

全部展开

R2018a的行为发生了变化