estimateCameraMatrix

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

Синтаксис

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

Описание

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)'];

Сгенерируйте 2D проекцию изображений при помощи координат точки изображений и их значений цвета.

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

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

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])

Оцените матрицу проекции камеры и ошибку перепроекции при помощи известных мировых точек и точек изображений.

[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])

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

свернуть все

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

Примечание

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

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

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

Примечание

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

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

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

свернуть все

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

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

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

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

Советы

Можно использовать функцию estimateCameraMatrix, чтобы оценить матрицу проекции камеры:

  • Если соответствия точки мира к изображению известны, и камера intrinsics и extrinsics параметры не известны.

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

Алгоритмы

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

λx = C X.

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

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

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

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

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

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

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

    reprojectionErrors = |x− xE |.

Ссылки

[1] Ричард, H. и А. Зиссермен. Несколько просматривают геометрию в компьютерном зрении. Кембридж: Издательство Кембриджского университета, 2000.

Введенный в R2019a