此示例显示如何将鱼眼相机模型转换为针孔模型并构建相应的单目相机传感器仿真。在此示例中,您了解如何校准鱼眼相机并配置a单纸巾
对象。
要模拟安装在车辆中的单眼摄像头传感器,请按照下列步骤操作:
通过使用棋盘式标定相机来估计相机的固有参数。本征参数描述了鱼眼相机本身的特性。
再次校准相机,使用前一步骤使用相同的棋盘来估算外部摄像机参数。外部参数描述了Fisheye相机在车辆坐标系中的安装位置。
通过将Fisheye摄像头固定器转换为针孔照相机固有内部,通过将鱼眼摄像头固定器转换为图像失真。这些内在机构描述了一种可以假设未置换图像的合成针孔摄像头。
利用针孔摄像机的固有参数和外部参数对单目摄像机传感器进行仿真。然后您可以使用这个传感器来检测物体和车道边界。
要估算内在参数,请使用棋盘进行相机校准。或者,为了更好地可视化结果,使用相机校准器对于鱼眼相机,它是有用的地方棋盘接近相机,以捕捉大的明显失真的图像。
%收集一组校准图像。images = imagedataStore(fullfile(toolboxdir('愿景'),'VisionData'那......“校准”那“还装有”));imagefilenames = images.files;检测校准模式。[ImagePoints,BoardSize] =侦探校验erboardPoints(ImageFileNames);%生成了正方形角的世界坐标。Squaresize = 0.029;%方形尺寸为米WorldPoints = GenerateCheckerboards(BoardSize,Squarize);%校准相机。i = ReadImage(图像,1);图像zize = [size(i,1),size(i,2)];params = estissfisheyearmeters(图像点,worldpoints,图像化);
为了估计外部参数,使用相同的棋盘估计在车辆坐标系中相机的安装位置。以下步骤估计来自一个图像的参数。您还可以采用多个棋盘图像来获取多个估计,并平均结果。
%加载相同棋盘的不同图像,棋盘%放在平坦的地面上。它的x轴指向%车辆,其Y轴指向相机。图像包括明显失真,如沿墙旁边的棋盘。。imageFileName = fullfile (toolboxdir ('驾驶'),“drivingdata”那'checkerboard.png');I = imread (imageFileName);imshow (I)标题(“扭曲的棋盘图像”);
[imagepoints,boardsize] = detectcheckerboard点(i);%生成正方形角落的坐标。Squaresize = 0.029;%方形尺寸为米WorldPoints = GenerateCheckerboards(BoardSize,Squarize);估计moncamera对象配置的参数。棋盘的%高度在此处为零,因为模式是%直接在地面上。originHeight = 0;[俯仰,偏航,横摇,高度]= estimatemonocamerparameters (params。intrinsic。......imagePoints、worldPoints originHeight);
不失真的图像和提取合成针孔相机的本质。[J1, camIntrinsics] = undistortion fishheyeimage (I, params。intrinsic。“输出”那“全部”);imshow(J1)标题(“无畸变的图像”);
用合成针孔相机的固有特性设置单相机。%介绍合成摄像机已删除失真。传感器=单纸(Camintrinsics,高度,“节”球场上,'yaw',偏航,'卷',卷);
现在你可以验证单纸巾
通过绘制鸟瞰图。
定义鸟瞰图转换参数distaheadofsensor = 6;%在米spaceToOneSide = 2.5;%看2.5米到右侧,左边2.5米bottomofoffset = 0.2;%在传感器之前看0.2米outView = [bottomOffset, distAheadOfSensor, -spaceToOneSide, spaceToOneSide]; / /查看全局outImageSize =(南,1000年);%输出图像宽度,以像素为单位birdseeconfig = birdsEyeView(sensor, outView, outImageSize);%将输入图像转换为鸟瞰图图像并显示它b =变形体(Birdseyeconfig,J1);%在鸟瞰图中将2米的标记放在传感器之前imagePoint0 = vemicletoImage(birdseyeconfig,[2,0]);offset = 5;%偏移标记从文本标签5像素AnnotatedB = InsertMarker(B,ImagePoint0 - 偏移);AnnotatedB = InsertText(AnnotatedB,ImagePoint0,'2米');图imshow (annotatedB)标题('鸟瞰'')
上图显示,相机可以准确地测量距离。现在你可以使用单目摄像机进行物体和车道边界检测。看到使用单眼相机的视觉感知的例子。
侦探校验erboardpoints.
|estismsfisheyearameters.
|估算MANEMERAPARAMETERS.
|generateCheckerboardPoints
|undistortFisheyeImage