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-на-2 матрица (x, y) координат. M - число точек, и он должен быть больше или равен 6.

Примечание

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

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

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

Примечание

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

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

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

свернуть все

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

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

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

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

Совет

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

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

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

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

Алгоритмы

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

.r x = C X.

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

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

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

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

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

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

  5. Вычислите ошибки репроекции как

    reprojectionErrors = |<reservedrangesplaceholder0>− xE|.

Ссылки

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

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