Сконфигурируйте монокулярную камеру подозрительного взгляда

Этот пример показывает, как преобразовать модель камеры подозрительного взгляда в модель крошечного отверстия и создать соответствующую монокулярную симуляцию датчика камеры. В этом примере вы изучаете, как калибровать камеру подозрительного взгляда и сконфигурировать объект monoCamera.

Обзор

Чтобы моделировать монокулярный датчик камеры, смонтированный в автомобиле, выполните эти шаги:

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

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

  3. Удалите искажение изображения путем преобразования камеры подозрительного взгляда intrinsics к камере с точечной диафрагмой intrinsics. Эти intrinsics описывают синтетическую камеру с точечной диафрагмой, которая может гипотетически сгенерировать неискаженные изображения.

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

Оцените камеру подозрительного взгляда Intrinsics

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

 % Gather a set of calibration images.
images = imageDatastore(fullfile(toolboxdir('vision'), 'visiondata', ...
      'calibration', 'gopro'));
imageFileNames = images.Files;
 
% Detect calibration pattern.
[imagePoints, boardSize] = detectCheckerboardPoints(imageFileNames);

% Generate world coordinates of the corners of the squares.
squareSize = 0.029; % Square size in meters
worldPoints = generateCheckerboardPoints(boardSize, squareSize);

% Calibrate the camera.
I = readimage(images, 1); 
imageSize = [size(I, 1), size(I, 2)];
params = estimateFisheyeParameters(imagePoints, worldPoints, imageSize);

Оцените камеру подозрительного взгляда Extrinsics

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

% Load a different image of the same checkerboard, where the checkerboard 
% is placed on the flat ground. Its X-axis is pointing to the right of the 
% vehicle, and its Y-axis is pointing to the camera. The image includes 
% noticeable distortion, such as along the wall next to the checkerboard.

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

[imagePoints, boardSize] = detectCheckerboardPoints(I);
 
% Generate coordinates of the corners of the squares.
squareSize = 0.029; % Square size in meters
worldPoints = generateCheckerboardPoints(boardSize, squareSize);
 
% Estimate the parameters for configuring the monoCamera object. 
% Height of the checkerboard is zero here, since the pattern is 
% directly on the ground.
originHeight = 0;
[pitch, yaw, roll, height] = estimateMonoCameraParameters(params.Intrinsics, ...
                               imagePoints, worldPoints, originHeight);
                           

Создайте синтетическую камеру с точечной диафрагмой для неискаженного изображения

% Undistort the image and extract the synthetic pinhole camera intrinsics.
[J1, camIntrinsics] = undistortFisheyeImage(I, params.Intrinsics, 'Output', 'full');
imshow(J1)
title('Undistorted Image');

% Set up monoCamera with the synthetic pinhole camera intrinsics. 
% Note that the synthetic camera has removed the distortion.
sensor = monoCamera(camIntrinsics, height, 'pitch', pitch, 'yaw', yaw, 'roll', roll);

Постройте вид с высоты птичьего полета

Теперь можно подтвердить monoCamera путем графического вывода вида с высоты птичьего полета.

% Define bird's-eye-view transformation parameters
distAheadOfSensor = 6; % in meters
spaceToOneSide = 2.5;  % look 2.5 meters to the right and 2.5 meters to the left
bottomOffset = 0.2;  % look 0.2 meters ahead of the sensor
outView = [bottomOffset, distAheadOfSensor, -spaceToOneSide, spaceToOneSide];
outImageSize = [NaN,1000]; % output image width in pixels

birdsEyeConfig = birdsEyeView(sensor, outView, outImageSize);

% Transform input image to bird's-eye-view image and display it
B = transformImage(birdsEyeConfig, J1);

% Place a 2-meter marker ahead of the sensor in bird's-eye view
imagePoint0 = vehicleToImage(birdsEyeConfig, [2, 0]);
offset = 5; % offset marker from text label by 5 pixels
annotatedB = insertMarker(B, imagePoint0 - offset);
annotatedB = insertText(annotatedB, imagePoint0, '2 meters');

figure
imshow(annotatedB)
title('Bird''s-Eye View')

График выше показов, что камера измеряет расстояния точно. Теперь можно использовать монокулярную камеру для объекта и обнаружения контура маршрута. Смотрите, что Визуальное Восприятие Использует Монокулярный пример Камеры.

Смотрите также

Приложения

Функции

Объекты

Похожие темы