exponenta event banner

монокамера

Настройка датчика монокулярной камеры

Описание

monoCamera объект содержит информацию о конфигурации датчика монокулярной камеры. Информация о конфигурации включает в себя характеристики камеры, внешние характеристики камеры, такие как ее ориентация (как описано по тангажу, рысканию и крену), и местоположение камеры в транспортном средстве. Для оценки внутренних и внешних параметров камеры см. раздел Калибровка монокулярной камеры.

Для изображений, захваченных камерой, можно использовать imageToVehicle и vehicleToImage функции преобразования местоположений точек между координатами изображения и координатами транспортного средства. В этих функциях применяются проективные преобразования (гомография), позволяющие оценить расстояния от камеры, установленной на транспортном средстве, до мест на плоской поверхности дороги.

Создание

Описание

sensor = monoCamera(intrinsics,height) создает monoCamera объект, содержащий конфигурацию датчика монокулярной камеры, учитывая собственные параметры камеры и высоту камеры над землей. intrinsics и height установите Intrinsics и Height свойства камеры.

пример

sensor = monoCamera(intrinsics,height,Name,Value) задает свойства, используя одну или несколько пар имя-значение. Например, monoCamera(intrinsics,1.5,'Pitch',1) создает монокулярный датчик камеры, который находится на высоте 1,5 метра над землей и имеет шаг 1 градус к земле. Заключите каждое имя свойства в кавычки.

Свойства

развернуть все

Внутренние параметры камеры, указанные как cameraIntrinsics или cameraParameters объект. Внутренние параметры камеры включают фокусное расстояние и оптический центр камеры, а также размер изображения, создаваемого камерой.

Это свойство можно задать при создании объекта. После создания объекта это свойство доступно только для чтения.

Высота от поверхности дороги до датчика камеры, заданная как реальный скаляр. Высота - это перпендикулярное расстояние от земли до фокальной точки камеры. Укажите высоту в мировых единицах измерения, например метрах. Чтобы оценить это значение, используйте estimateMonoCameraParameters функция.

Угол наклона между горизонтальной плоскостью транспортного средства и оптической осью камеры, определяемый как действительный скаляр в градусах. Чтобы оценить это значение, используйте estimateMonoCameraParameters функция.

Pitch для поворота используется соглашение ISO с направлением положительного угла по часовой стрелке при взгляде в положительном направлении оси YV транспортного средства.

Дополнительные сведения см. в разделе Направления углов.

Угол рыскания между осью XV транспортного средства и оптической осью камеры, определяемый как действительный скаляр в градусах. Чтобы оценить это значение, используйте estimateMonoCameraParameters функция.

Yaw для поворота используется стандарт ISO с направлением положительного угла по часовой стрелке при взгляде в положительном направлении оси ZV транспортного средства.

Дополнительные сведения см. в разделе Направления углов.

Угол крена камеры вокруг ее оптической оси, возвращаемый как действительный скаляр в градусах. Чтобы оценить это значение, используйте estimateMonoCameraParameters функция.

Roll для поворота используется соглашение ISO с направлением положительного угла по часовой стрелке при взгляде в положительном направлении по оси XV транспортного средства.

Дополнительные сведения см. в разделе Направления углов.

Расположение центра датчика камеры, заданного как двухэлементный вектор формы [x y]. Это свойство используется для изменения расположения камеры. Блоки находятся в системе координат транспортного средства (XV, YV, ZV).

По умолчанию датчик камеры расположен в начале координат (XV, YV), на высоте, указанной Height.

Единицы мировой системы координат, заданные как вектор символа или скаляр строки. Это свойство сохраняет только тип единицы измерения и не влияет ни на какие вычисления. Любой текст действителен.

Это свойство можно задать при создании объекта. После создания объекта это свойство доступно только для чтения.

Функции объекта

imageToVehicleПреобразование координат изображения в координаты транспортного средства
vehicleToImageПреобразование координат транспортного средства в координаты изображения

Примеры

свернуть все

Создайте обращенный вперед датчик монокулярной камеры, установленный на эго-автомобиле. Просмотр изображения, снятого с камеры, и определение местоположения в пределах изображения как в координатах транспортного средства, так и в координатах изображения.

Задайте внутренние параметры камеры. Укажите фокусное расстояние, главную точку плоскости изображения и размер выходного изображения. Единицы измерения выражены в пикселях. Сохранение внутренних характеристик в виде cameraIntrinsics объект.

focalLength = [800 800];
principalPoint = [320 240];
imageSize = [480 640];

intrinsics = cameraIntrinsics(focalLength,principalPoint,imageSize);

Укажите положение камеры. Установите камеру на высоте 2,18 метра над землей с шагом 14 градусов по направлению к земле.

height = 2.18;
pitch = 14;

Определите датчик монокулярной камеры, используя собственные параметры камеры и положение камеры. Загрузите изображение с камеры.

sensor = monoCamera(intrinsics,height,'Pitch',pitch);

Ioriginal = imread('road.png');
figure
imshow(Ioriginal)
title('Original Image')

Figure contains an axes. The axes with title Original Image contains an object of type image.

Определите координаты точки в 10 метрах непосредственно перед камерой. Ось X указывает вперед от камеры, а ось Y - влево.

xyVehicleLoc1 = [10 0];
xyImageLoc1 = vehicleToImage(sensor,xyVehicleLoc1)
xyImageLoc1 = 1×2

  320.0000  216.2296

Отображение точки на изображении.

IvehicleToImage = insertMarker(Ioriginal,xyImageLoc1);
IvehicleToImage = insertText(IvehicleToImage,xyImageLoc1 + 5,'10 meters');
figure
imshow(IvehicleToImage)
title('Vehicle-to-Image Point')

Figure contains an axes. The axes with title Vehicle-to-Image Point contains an object of type image.

Определите координаты транспортного средства точки, лежащей на поверхности дороги на изображении.

xyImageLoc2 = [300 300];
xyVehicleLoc2 = imageToVehicle(sensor,xyImageLoc2)
xyVehicleLoc2 = 1×2

    6.5959    0.1732

Точка находится примерно в 6,6 метрах перед транспортным средством и примерно в 0,17 метрах слева от центра транспортного средства.

Отображение координат транспортного средства точки на изображении.

IimageToVehicle = insertMarker(Ioriginal,xyImageLoc2);
displayText = sprintf('(%.2f m, %.2f m)',xyVehicleLoc2);
IimageToVehicle = insertText(IimageToVehicle,xyImageLoc2 + 5,displayText);

figure
imshow(IimageToVehicle)
title('Image-to-Vehicle Point')

Figure contains an axes. The axes with title Image-to-Vehicle Point contains an object of type image.

Создайте датчик зрения, используя конфигурацию монокулярной камеры, и создайте сигналы обнаружения от этого датчика.

Укажите внутренние параметры камеры и создайте monoCamera объект из этих параметров. Камера установлена поверх эго-автомобиля на высоте 1,5 метра над землей и с шагом 1 градус к земле.

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

height = 1.5;
pitch = 1;
monoCamConfig = monoCamera(intrinsics,height,'Pitch',pitch);

Создайте генератор обнаружения видения с использованием конфигурации монокулярной камеры.

visionSensor = visionDetectionGenerator(monoCamConfig);

Создайте сценарий вождения с использованием эго-транспортного средства и двух целевых автомобилей. Разместите первый целевой автомобиль на 30 метров прямо перед эго-автомобилем. Расположите второй целевой автомобиль на 20 метров перед эго-транспортным средством, но смещенный влево на 3 метра.

scenario = drivingScenario;
egoVehicle = vehicle(scenario,'ClassID',1);
targetCar1 = vehicle(scenario,'ClassID',1,'Position',[30 0 0]);
targetCar2 = vehicle(scenario,'ClassID',1,'Position',[20 3 0]);

Используйте график «птичий глаз» для отображения контуров транспортного средства и зоны действия датчика.

figure
bep = birdsEyePlot('XLim',[0 50],'YLim',[-20 20]);

olPlotter = outlinePlotter(bep);
[position,yaw,length,width,originOffset,color] = targetOutlines(egoVehicle);
plotOutline(olPlotter,position,yaw,length,width);

caPlotter = coverageAreaPlotter(bep,'DisplayName','Coverage area','FaceColor','blue');
plotCoverageArea(caPlotter,visionSensor.SensorLocation,visionSensor.MaxRange, ...
    visionSensor.Yaw,visionSensor.FieldOfView(1))

Figure contains an axes. The axes contains an object of type patch. This object represents Coverage area.

Получите позы целевых автомобилей с точки зрения эго-транспортного средства. Используйте эти позы для генерации обнаружений от датчика.

poses = targetPoses(egoVehicle);
[dets,numValidDets] = visionSensor(poses,scenario.SimulationTime);

Отображение позиций (X, Y) допустимых обнаружений. Для каждого обнаружения положения (X, Y) являются первыми двумя значениями Measurement поле.

for i = 1:numValidDets
    XY = dets{i}.Measurement(1:2);
    detXY = sprintf('Detection %d: X = %.2f meters, Y = %.2f meters',i,XY);
    disp(detXY)
end
Detection 1: X = 19.09 meters, Y = 2.79 meters
Detection 2: X = 27.81 meters, Y = 0.08 meters

Подробнее

развернуть все

Вопросы совместимости

развернуть все

В R2018a изменилось поведение

Расширенные возможности

Создание кода C/C + +
Создайте код C и C++ с помощью MATLAB ® Coder™

.
Представлен в R2017a