monoCamera

Сконфигурируйте монокулярный датчик камеры

Описание

The 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-градусный тангаж к земле. Заключайте каждое имя свойства в кавычки.

Свойства

расширить все

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

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

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

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

Pitch использует конвенцию ISO для вращения с положительным углом по часовой стрелке при взгляде в положительном направлении оси < reservedrangesplaceholder0 > V транспортного средства.

Для получения дополнительной информации смотрите Угловые направления.

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

Yaw использует конвенцию ISO для вращения с положительным углом по часовой стрелке при взгляде в положительном направлении оси < reservedrangesplaceholder0 > V транспортного средства.

Для получения дополнительной информации смотрите Угловые направления.

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

Roll использует конвенцию ISO для вращения с положительным углом по часовой стрелке при взгляде в положительном направлении оси < reservedrangesplaceholder0 > V транспортного средства.

Для получения дополнительной информации смотрите Угловые направления.

Расположение центра датчика камеры, заданное как двухэлементный вектор вида [x y] . Используйте это свойство для изменения расположения камеры. Модули находятся в системе координат транспортного средства (X V, Y V, Z V).

По умолчанию датчик камеры расположен в начале координат (X V, Y V), на высоте, заданной 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++ с помощью Coder™ MATLAB ®

.
Введенный в R2017a