exponenta event banner

estimateCameraMatrix

Оценка матрицы проекции камеры из соответствий между точками изображения

Описание

camMatrix = estimateCameraMatrix(imagePoints,worldPoints) возвращает матрицу проекции камеры, определенную из известных мировых точек и соответствующих им проекций изображения с использованием подхода прямого линейного преобразования (DLT).

пример

[camMatrix,reprojectionErrors] = estimateCameraMatrix(imagePoints,worldPoints) также возвращает ошибку репроекции, которая количественно определяет точность координат проецируемого изображения.

Примеры

свернуть все

Загрузите данные облака точек 3-D, полученные датчиком RGB-D, в рабочую область.

ld = load('object3d.mat');
ptCloud = ld.ptCloud;

Удалить точки с помощью Inf или NaN координаты из облака точек.

[validPtCloud,validIndices] = removeInvalidPoints(ptCloud);

Прочтите действительные координаты мировых точек. Каждая запись задает координаты x, y, z точки в облаке точек.

worldPoints = validPtCloud.Location;

Определите соответствующие координаты точек изображения как ортогональную проекцию данных облака точек на плоскость yz.

indices = 1:ptCloud.Count;
[y,z] = ind2sub([size(ptCloud.Location,1),size(ptCloud.Location,2)],indices);
imagePoints = [y(validIndices)' z(validIndices)'];

Создайте проекцию 2-D изображения, используя координаты точек изображения и их значения цвета.

projImage = zeros(max(imagePoints(:,1)),max(imagePoints(:,2)),3);
rgb = validPtCloud.Color;
for j = 1:length(rgb)
projImage(imagePoints(j,1),imagePoints(j,2),:) = rgb(j,:);
end

Отображение данных облака точек и соответствующей проекции 2-D изображения.

figure
subplot(1,2,1)
pcshow(ptCloud)
xlabel('X');
ylabel('Y');
zlabel('Z');
title('Point Cloud Data','Color',[1 1 1])
subplot(1,2,2)
imshow(uint8(projImage))
title('2-D Image Projection','Color',[1 1 1])

Figure contains 2 axes. Axes 1 with title Point Cloud Data contains an object of type scatter. Axes 2 with title 2-D Image Projection contains an object of type image.

Оцените матрицу проекции камеры и ошибку репроекции, используя известные точки мира и точки изображения.

[camMatrix,reprojectionErrors] = estimateCameraMatrix(imagePoints,worldPoints);

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

point = [0.4 0.3 0.2];  % Specify the query point
K = 50;    % Specify the number of nearest neighbors to be determined
[indices,dists] = findNearestNeighbors(ptCloud,point,K,camMatrix);  % Get the indices and distances of nearest neighbors

Используйте select для получения данных облака точек ближайших соседей.

ptCloudB = select(ptCloud,indices); 

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

figure,
pcshow(ptCloud)
hold on
pcshow(ptCloudB.Location,'ob')
hold off
legend('Point Cloud','Nearest Neighbors','Location','southoutside','Color',[1 1 1])

Figure contains an axes. The axes contains 2 objects of type scatter. These objects represent Point Cloud, Nearest Neighbors.

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

свернуть все

Координаты точек проекции изображения, заданные в виде матрицы M-by-2 координат (x, y). M - количество точек, которое должно быть больше или равно 6.

Примечание

  • Входные точки изображения должны соответствовать неискаженной плоскости изображения.

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

3D мировые пункты, определенные как матрица M-3 (x, y, z) координаты. M - количество точек, которое должно быть больше или равно 6.

Примечание

  • Координаты мира ввода должны быть некомпланарными точками.

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

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

свернуть все

Проекционная матрица камеры, возвращаемая как матрица 4 на 3. Матрица отображает точки мира 3-D в однородных координатах на 2-D координаты изображения проекций на плоскость изображения.

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

Ошибки повторного впрыска, возвращаемые в виде вектора M-by-1. Ошибка повторного проецирования - это ошибка между точками повторного проецирования изображения и точками входного изображения. Дополнительные сведения об вычислении ошибок повторного впрыска см. в разделе Алгоритмы.

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

Совет

Вы можете использовать estimateCameraMatrix функция для оценки матрицы проекции камеры:

  • Если соответствия точек «мир-изображение» известны, а внутренние и внешние параметры камеры неизвестны, можно использовать cameraMatrix функция.

  • Чтобы вычислить 2-е пункты изображения из 3D мировых пунктов, обратитесь к уравнениям в camMatrix.

  • Для использования с findNearestNeighbors объектная функция pointCloud объект. Использование матрицы проекции камеры ускоряет поиск ближайших соседей в облаке точек, генерируемом сенсором RGB-D, таким как Microsoft ® Kinect ®.

Алгоритмы

Учитывая мировые точки X и точки изображения x, матрица проекции камеры C получается решением уравнения

λ x = CX.

Уравнение решается с использованием подхода прямого линейного преобразования (DLT) [1]. Этот подход формулирует однородную линейную систему уравнений, и решение получается путём обобщённого разложения собственных значений.

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

  1. Нормализуйте координаты точки входного изображения с помощью преобразования T.

  2. Оценка матрицы CN проекции камеры по нормализованным точкам входного изображения.

  3. Вычислите денормализованную матрицу проекции камеры C, как CNT-1.

  4. Вычислите повторно спроецированные координаты точки изображения xE как CX.

  5. Вычислить ошибки повторного впрыска как

    reprojateErrors = | x xE |.

Ссылки

[1] Ричард, Х. и А. Зиссерман. Геометрия нескольких видов в компьютерном видении. Кембридж: Cambridge University Press, 2000.

Представлен в R2019a