estimateMonoCameraParameters

Оцените внешние монокулярные параметры камеры с помощью шахматной доски

Описание

пример

[pitch,yaw,roll,height] = estimateMonoCameraParameters(intrinsics,imagePoints,worldPoints,patternOriginHeight) оценивает внешние параметры монокулярной камеры при помощи внутренних параметров камеры и калибровочного шаблона шахматной доски. Возвращенные внешние параметры задают рыскание, тангаж, и прокручивают углы поворота между системой координат камеры и осями системы координат транспортного средства. Функция также возвращает высоту камеры над землей. Задайте внутренние параметры, изображение и мировые координаты угловых точек шахматной доски и высоту источника шаблона шахматной доски над землей.

По умолчанию функция принимает, что камера стоит вперед и что шаблон шахматной доски параллелен с землей. Для всей возможной камеры и размещений шахматной доски, смотрите, Калибруют Монокулярную Камеру.

[pitch,yaw,roll,height] = estimateMonoCameraParameters(___,Name,Value) задает опции с помощью одной или нескольких пар "имя-значение", в дополнение к вводам и выводам от предыдущего синтаксиса. Например, можно задать ориентацию или положение шаблона шахматной доски.

Примеры

свернуть все

Сконфигурируйте монокулярную fisheye-камеру путем удаления искажения объектива и затем оценки внешних параметров камеры. Используйте изображение шахматной доски как калибровочный шаблон. Для более подробного взгляда на то, как сконфигурировать монокулярную камеру, которая имеет линзу подозрительного взгляда, смотрите Сконфигурировать Монокулярный пример Fisheye-камеры.

Загрузите внутренние параметры монокулярной камеры, которая имеет линзу подозрительного взгляда. intrinsics fisheyeIntrinsics объект.

ld = load('fisheyeCameraIntrinsics');
intrinsics = ld.intrinsics;

Загрузите изображение шаблона шахматной доски, который помещается плоский на земле. Это изображение в иллюстративных целях и не было взято из камеры, смонтированной к транспортному средству. В камере, смонтированной к транспортному средству, Ось X точек шаблона справа от транспортного средства и Ось Y шаблона указывают на камеру. Отобразите изображение.

imageFileName = fullfile(toolboxdir('driving'),'drivingdata','checkerboard.png');
I = imread(imageFileName);
imshow(I)

Figure contains an axes object. The axes object contains an object of type image.

Обнаружьте координаты углов шахматной доски в изображении.

[imagePoints,boardSize] = detectCheckerboardPoints(I);

Сгенерируйте соответствующие мировые координаты углов.

squareSize = 0.029; % Square size in meters
worldPoints = generateCheckerboardPoints(boardSize,squareSize);

Оцените внешние параметры, требуемые сконфигурировать monoCamera объект. Поскольку шаблон шахматной доски находится непосредственно на земле, установите высоту источника шаблона к 0.

patternOriginHeight = 0;
[pitch,yaw,roll,height] = estimateMonoCameraParameters(intrinsics, ...
                             imagePoints,worldPoints,patternOriginHeight);

Поскольку monoCamera не принимает fisheyeIntrinsics объекты, удалите искажение из изображения и вычислите новые внутренние параметры из неискаженного изображения. camIntrinsics cameraIntrinsics объект. Отобразите изображение, чтобы подтвердить, что искажение удалено.

[undistortedI,camIntrinsics] = undistortFisheyeImage(I,intrinsics,'Output','full');
imshow(undistortedI)

Figure contains an axes object. The axes object contains an object of type image.

Сконфигурируйте монокулярную камеру с помощью предполагаемых параметров.

monoCam = monoCamera(camIntrinsics,height,'Pitch',pitch,'Yaw',yaw,'Roll',roll)
monoCam = 
  monoCamera with properties:

        Intrinsics: [1x1 cameraIntrinsics]
        WorldUnits: 'meters'
            Height: 0.4447
             Pitch: 21.8459
               Yaw: -3.6130
              Roll: -3.1707
    SensorLocation: [0 0]

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

Загрузите внутренние параметры монокулярной камеры. intrinsics cameraIntrinsics объект.

ld = load('IRCameraIntrinsics');
intrinsics = ld.intrinsics;

Загрузите изображение асимметричного кругового шаблона сетки, который помещается параллельный земле, помещенной в высоту. Это изображение в иллюстративных целях и не было взято из камеры, смонтированной к транспортному средству. В камере, смонтированной к транспортному средству, Ось X точек шаблона справа от транспортного средства и Ось Y шаблона указывают на камеру. Отобразите изображение.

imageFileName = fullfile(toolboxdir('vision'),'visiondata', ...
    'calibration','circleGrid','stereo','left','left07.jpg');
I = imread(imageFileName);
imshow(I)

Figure contains an axes object. The axes object contains an object of type image.

Задайте круговые размерности шаблона сетки и обнаружьте центры кругов в изображении.

patternDims = [4 11];
imagePoints = detectCircleGridPoints(I,patternDims);

Сгенерируйте соответствующие мировые координаты углов.

centerDistance = 0.0365; % Center-to-center distance in meters
worldPoints = generateCircleGridPoints(patternDims,centerDistance);

Оцените внешние параметры, требуемые сконфигурировать monoCamera объект. Поскольку шаблон шахматной доски помещается в высоту 1,2 м от земли, установите высоту источника шаблона к 1,2 м.

patternOriginHeight = 1.2;
[pitch,yaw,roll,height] = estimateMonoCameraParameters(intrinsics, ...
                             imagePoints,worldPoints,patternOriginHeight);

Сконфигурируйте монокулярную камеру с помощью предполагаемых параметров.

monoCam = monoCamera(intrinsics,height,'Pitch',pitch,'Yaw',yaw,'Roll',roll)
monoCam = 
  monoCamera with properties:

        Intrinsics: [1x1 cameraIntrinsics]
        WorldUnits: 'meters'
            Height: 1.3869
             Pitch: 60.2886
               Yaw: -26.5963
              Roll: -45.7440
    SensorLocation: [0 0]

Задайте область перед камерой, которую вы хотите преобразовать в вид с высоты птичьего полета. Установите область от 0 до 2,5 метров перед камерой с 1,75 метрами любой стороне камеры.

bottomOffset = 0;
distAhead = 2.5;
spaceToOneSide = 1.75;

outView = [bottomOffset,distAhead,-spaceToOneSide,spaceToOneSide];

Установите ширину выходного изображения на 250 пикселей. Вычислите продолжительность выхода автоматически из ширины путем установки длины на NaN.

outImageSize = [NaN,250];

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

birdsEye = birdsEyeView(monoCam,outView,outImageSize);

Преобразуйте входное изображение в вид с высоты птичьего полета, отображают и отображают результат.

BEV = transformImage(birdsEye,I);
imshow(BEV)

Figure contains an axes object. The axes object contains an object of type image.

Входные параметры

свернуть все

Внутренние параметры камеры в виде cameraIntrinsics или fisheyeIntrinsics объект.

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

Отобразите координаты угловых точек шахматной доски в виде M-by-2 матрица количества M [x y] векторы. Эти моменты должны наступить от изображения, полученного монокулярной камерой. Чтобы обнаружить эти точки в изображении, используйте detectCheckerboardPoints функция.

estimateMonoCameraParameters принимает что все точки в worldPoints находятся в (X P, Y P) плоскость и которого M больше или равен 4. Задавать высоту (X P, Y P) плоскость над землей, patternOriginHeight использования.

Типы данных: single | double

Мировые координаты угловых точек в шахматной доске в виде M-by-2 матрица количества M [x y] векторы.

estimateMonoCameraParameters принимает что все точки в worldPoints находятся в (X P, Y P) плоскость и которого M больше или равен 4. Задавать высоту (X P, Y P) плоскость над землей, patternOriginHeight использования.

Точка (0,0) соответствует нижнему правому углу верхнего левого квадрата шахматной доски.

Типы данных: single | double

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

Измерение patternOriginHeight зависит от ориентации шаблона шахматной доски, как показано в этих схемах.

Горизонтальная ориентацияВертикальная ориентация

Чтобы задать ориентацию шаблона, используйте 'PatternOrientation' пара "имя-значение". Если вы устанавливаете 'PatternOrientation' к 'horizontal' (значение по умолчанию) и шаблон находятся на земле, затем устанавливают patternOriginHeight к 0.

Типы данных: single | double

Аргументы name-value

Задайте дополнительные разделенные запятой пары Name,Value аргументы. Name имя аргумента и Value соответствующее значение. Name должен появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: Name1, Value1, ..., NameN, ValueN.

Пример: 'PatternOrientation','vertical','PatternPosition','right'

Ориентация шаблона шахматной доски относительно земли в виде разделенной запятой пары, состоящей из 'PatternOrientation' и одно из следующего:

  • 'horizontal' — Шаблон шахматной доски параллелен земле.

  • 'vertical' — Шаблон шахматной доски перпендикулярен земле.

Положение шаблона шахматной доски относительно земли в виде разделенной запятой пары, состоящей из 'PatternPosition' и одно из следующего:

  • 'front' — Шаблон шахматной доски перед транспортным средством.

  • 'back' — Шаблон шахматной доски находится позади транспортного средства.

  • 'left' — Шаблон шахматной доски слева от транспортного средства.

  • 'right' — Шаблон шахматной доски справа от транспортного средства.

Выходные аргументы

свернуть все

Передайте угол между горизонтальной плоскостью транспортного средства и оптической осью камеры, возвращенной как действительный скаляр в градусах. pitch использует соглашение ISO для вращения, с по часовой стрелке положительным угловым направлением при взгляде в положительном направлении V-оси Y транспортного средства.

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

Угол рыскания между V-осью X транспортного средства и оптической осью камеры, возвращенной как действительный скаляр в градусах. yaw использует соглашение ISO для вращения, с по часовой стрелке положительным угловым направлением при взгляде в положительном направлении V-оси Z транспортного средства.

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

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

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

Перпендикулярная высота от земли до центра камеры, возвращенной как неотрицательный действительный скаляр в мировых единицах измерения, таких как метры.

Больше о

свернуть все

Система координат транспортного средства

В системе координат транспортного средства (X V, Y V, Z V) заданный monoCamera объект:

  • V-ось X указывает вперед от транспортного средства.

  • V-ось Y указывает налево, как просматривается при направлении вперед.

  • V-ось Z подчеркивает от земли, чтобы обеспечить правую систему координат.

По умолчанию источник этой системы координат находится на дорожном покрытии, непосредственно ниже центра камеры (центр камеры).

Получить более надежные результаты estimateMonoCameraParameters, шаблон шахматной доски должен быть помещен в точные местоположения относительно этой системы координат. Для получения дополнительной информации смотрите, Калибруют Монокулярную Камеру.

Угловые направления

Монокулярный датчик камеры использует по часовой стрелке положительные угловые направления при взгляде в положительном направлении Z - Y - и X - оси, соответственно.

Введенный в R2018b