这个例子演示了如何将鱼眼相机模型转换成针孔模型,并构造相应的单目相机传感器仿真。在本例中,您将了解如何校准鱼眼相机并配置amonoCamera
宾语。
要模拟安装在车辆上的单目摄像机传感器,请遵循以下步骤:
通过使用棋盘校准镜头估计的内在相机参数。内在参数描述鱼眼相机本身的性能。
使用与前一步相同的棋盘格,通过再次校准相机来估计相机的外部参数。外部参数描述了鱼眼相机在车辆坐标系中的安装位置。
通过将鱼眼相机的内部物理转换为针孔相机的内部物理来消除图像失真。这些本征描述了一种合成针孔相机,它可以假设地生成不失真的图像。
使用固有的针孔摄像机参数和外部参数配置模拟单眼相机传感器。然后,您可以使用该传感器来检测对象和车道边界。
要估计内在参数,使用棋盘格相机校准。或者,为了更好地可视化结果,可以使用相机校准器应用程序。对于鱼眼相机,它放置棋盘靠近相机,以便捕捉大明显的失真图像中是非常有用的。
收集一套校准图像。图像= imageDatastore (fullfile (toolboxdir (“愿景”),“visiondata”,...“校准”,'GOPRO'));imageFileNames = images.Files;%检测校准图案。[imagePoints, boardSize] = detectCheckerboardPoints(imageFileNames);生成方块角落的世界坐标。squareSize = 0.029;平方尺寸(以米为单位)worldPoints = generateCheckerboardPoints(boardSize, squareSize);校准照相机。I = readimage(图像,1);imageSize = [size(I, 1), size(I, 2)];params = estimateFisheyeParameters(imagePoints, worldPoints, imageSize);
为了估计外部参数,使用相同的棋盘格来估计相机在车辆坐标系中的安装位置。下面的步骤从一张图像中估计参数。您还可以使用多个棋盘图像来获得多个估计,并对结果进行平均。
载入同一棋盘格的不同图像,其中有棋盘格%被放置在平坦的地面上。其X轴指向的权,其y轴指向摄像机。图片中包含%明显的失真,例如沿着旁边的棋盘的壁。映像文件名称=完整文件(toolboxdir(“开车”),'drivingdata',“checkerboard.png”);I = imread(映像文件名称);imshow(I)称号(“扭曲棋盘图像”);
[imagePoints, boardSize] = detectCheckerboardPoints(I);生成正方形各角的坐标。squareSize = 0.029;平方尺寸(以米为单位)worldPoints = generateCheckerboardPoints(boardSize, squareSize);%估算用于配置monoCamera对象的参数。这里棋盘格的高度为0,因为模式是0%直接放在地上。originHeight = 0;[俯仰,偏航,横摇,高度]...imagePoints,worldPoints,originHeight);
%Undistort图像并提取合成的针孔相机内函数。[J1,camIntrinsics] = undistortFisheyeImage(I,params.Intrinsics,“输出”,'充分');imshow (j - 1)标题(“无畸变的图像”);
%设置monoCamera与合成针孔相机内部函数。请注意,合成相机已经消除了失真。传感器=单摄像机(camIntrinsics, height,'沥青',沥青,“偏航”偏航,“滚”、卷);
现在可以验证monoCamera
绘制鸟瞰图。
%定义鸟瞰图变换参数distAheadOfSensor = 6;%在米spaceToOneSide = 2.5;%看向右边2.5米,左边2.5米bottomOffset = 0.2;%在传感器前方0.2米处观察outView = [bottomOffset,distAheadOfSensor,-spaceToOneSide,spaceToOneSide];outImageSize = [NaN时,1000];输出图像宽度(以像素为单位)birdsEyeConfig = birdsEyeView(传感器,outView,outImageSize);将输入图像转换为鸟瞰图并显示出来B = transformImage(birdsEyeConfig, J1);在传感器前方2米的地方做鸟瞰标记imagePoint0 = vehicle - toimage (birdsEyeConfig, [2,0]);抵消= 5;%从文本标签偏移标记5像素注释B = insertMarker(B, imagePoint0 -偏移量);注释b = insertText(注释b, imagePoint0,2米的);图imshow(annotatedB)标题(“鸟”眼中的看法”)
上面显示该地块相机精确测量距离。现在你可以使用单眼相机对象和车道边界检测。查看使用单目摄像机进行视觉感知例。
detectCheckerboardPoints
|estimateFisheyeParameters
|estimateMonoCameraParameters
|generateCheckerboardPoints
|undistortFisheyeImage