монокамера

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

Описание

Объект monoCamera содержит информацию о настройке монокулярного датчика камеры. Конфигурационная информация включает камеру intrinsics, камеру extrinsics, такую как ее ориентация (как описано подачей, отклонением от курса и списком), и местоположение камеры в автомобиле. Чтобы оценить внутренние и внешние параметры камеры, смотрите, Калибруют Монокулярную Камеру.

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

Создание

Синтаксис

sensor = monoCamera(intrinsics,height)
sensor = monoCamera(intrinsics,height,Name,Value)

Описание

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 для вращения с по часовой стрелке положительным угловым направлением при взгляде в положительном направлении Y автомобиля V осей.

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

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

Yaw использует соглашение ISO для вращения с по часовой стрелке положительным угловым направлением при взгляде в положительном направлении Z автомобиля V осей.

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

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

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

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

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

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

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

Можно установить это свойство, когда вы создаете объект. После того, как вы создадите объект, это свойство только для чтения.

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

imageToVehicleПреобразуйте координаты изображений, чтобы транспортировать координаты
vehicleToImageПреобразуйте координаты автомобиля, чтобы отобразить координаты

Примеры

свернуть все

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

Установите внутренние параметры камеры. Задайте фокусное расстояние, основную точку плоскости изображения и размер выходного изображения. Модули находятся в пикселях. Сохраните intrinsics как объект 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')

Определите координаты изображений точки 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')

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

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')

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

Задайте внутренние параметры камеры и создайте объект 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);
targetCar1 = vehicle(scenario,'Position',[30 0 0]);
targetCar2 = vehicle(scenario,'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))

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

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

Для просмотра документации необходимо авторизоваться на сайте