monoCamera

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

Описание

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

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

Создание

Описание

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Преобразуйте координаты транспортного средства, чтобы отобразить координаты

Примеры

свернуть все

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

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