exponenta event banner

plotCamera

Печать камеры в 3-D координатах

Описание

пример

cam = plotCamera отображает камеру по умолчанию в 3-D координатах в текущих осях. Функция возвращает cam, a Camera объект, содержащий свойства печатаемой камеры.

пример

cam = plotCamera(cameraTable) отображает одну или несколько камер, указанных cameraTable.

пример

cam = plotCamera(Name,Value) указывает параметры, использующие один или несколько аргументов пары имя-значение. Например, 'Opacity',0.4 устанавливает непрозрачность печатаемой камеры на 0.4.

Аргументы пары имя-значение задают связанные свойства объекта визуализации камеры на графике.

Примеры

свернуть все

Создать rigid3d объект.

R = [1 0 0; 0 0 -1;0 1 0];
t = [10 0 20];
pose = rigid3d(R,t);

Постройте график камеры с нулевой непрозрачностью и абсолютной позой на основе созданного rigid3d объект.

cam = plotCamera('AbsolutePose',pose,'Opacity',0)
cam = 
  Camera with properties:

           Parent: [1x1 Axes]
             Size: 1
     AbsolutePose: [1x1 rigid3d]
          Visible: 1
      AxesVisible: 0
    ButtonDownFcn: ''
            Color: [1 0 0]
          Opacity: 0
            Label: ''

Задайте свойства просмотра для текущих осей.

grid on
axis equal
axis manual

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

xlim([-15 20]);
ylim([-15 20]);
zlim([15 25]);

Поверните камеру вокруг оси Y.

for theta = 0:pi/64:10*pi
    T = [cos(theta) 0 sin(theta);0 1 0;-sin(theta) 0 cos(theta)];
    cam.AbsolutePose = rigid3d(T * R, [10 * cos(theta), 10 * sin(theta), 20]);
    drawnow();
end

Figure contains an axes. The axes contains 10 objects of type line, text, patch.

Создайте набор калибровочных изображений.

images = imageSet(fullfile(toolboxdir('vision'),'visiondata','calibration','slr'));

Определите шашечные углы на изображениях.

[imagePoints,boardSize] = detectCheckerboardPoints(images.ImageLocation);

Создайте мировые координаты шашечных углов в системе координат, ориентированной на массив, с верхним левым углом (0,0). Задайте размер квадрата 29 мм.

squareSize = 29;
worldPoints = generateCheckerboardPoints(boardSize,squareSize);

Откалибруйте камеру.

cameraParams = estimateCameraParameters(imagePoints,worldPoints);

Загрузите изображение в новое расположение.

imOrig = imread(fullfile(toolboxdir('vision'),'visiondata','calibration','slr','image9.jpg'));
figure; imshow(imOrig,'InitialMagnification',50);
title('Input Image');

Figure contains an axes. The axes with title Input Image contains an object of type image.

Отмена искажения изображения.

im = undistortImage(imOrig,cameraParams);

Найдите ссылочный объект на новом изображении.

[imagePoints,boardSize] = detectCheckerboardPoints(im);

Вычислите новые внешние элементы.

[rotationMatrix,translationVector] = extrinsics(imagePoints,worldPoints,cameraParams);

Постройте мировые точки.

figure;
plot3(worldPoints(:,1),worldPoints(:,2),zeros(size(worldPoints, 1),1),'*');
hold on

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

Отметьте начало координат.

plot3(0,0,0,'g*');

Figure contains an axes. The axes contains 2 objects of type line.

Вычислите местоположение и ориентацию камеры.

orientation = rotationMatrix';
location = -translationVector * orientation;

Постройте график камеры.

absPose = rigid3d(orientation,location);
cam = plotCamera('AbsolutePose',absPose,'Size',20);

Figure contains an axes. The axes contains 12 objects of type line, text, patch.

Сделайте ось Z точкой вниз.

set(gca,'CameraUpVector',[0 0 -1]);

Figure contains an axes. The axes contains 12 objects of type line, text, patch.

Задайте параметры вида.

camorbit(gca,-110,60,'data',[0 0 1]);
axis equal
grid on

Figure contains an axes. The axes contains 12 objects of type line, text, patch.

Включите вращение 3-D.

cameratoolbar('SetMode','orbit');

Figure contains an axes. The axes contains 12 objects of type line, text, patch.

Маркировать оси.

xlabel('X (mm)');
ylabel('Y (mm)');
zlabel('Z (mm)');

Figure contains an axes. The axes contains 12 objects of type line, text, patch.

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

свернуть все

Свойства камер для визуализации, заданные в виде таблицы. Каждая строка представляет одну камеру. Заголовок каждого столбца должен соответствовать части имени аргумента пары имя-значение. Значения n-ой строки задают свойства n-го элемента cam. Нельзя указать значения для 'Parent'. Если таблица содержит 'ViewId' , то идентификаторы ракурсов используются для установки 'Label' значения камер.

Аргументы пары «имя-значение»

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

Пример: 'Size',0.3 задает базовую ширину камеры как 0.3.

Абсолютная поза камеры в мировой системе координат, определяемая как разделенная запятыми пара, состоящая из 'AbsolutePose' a rigid3d объект.

Базовая ширина камеры, заданная как разделенная запятыми пара, состоящая из 'Size' и положительное реальное число.

Метка камеры, указанная как разделенная запятыми пара, состоящая из 'Label«и вектор символов или строковый скаляр».

Цвет камеры, указанный как разделенная запятыми пара, состоящая из 'Colorи триплет RGB. Триплет RGB - это трехэлементный вектор строки, элементы которого задают интенсивности красной, зеленой и синей составляющих цвета. Интенсивности должны находиться в диапазоне [0, 1].

Непрозрачность камеры, указанная как разделенная запятыми пара, состоящая из 'Opacity'и скаляр в диапазоне [0,1].

Видимость камеры, указанная как разделенная запятыми пара, состоящая из 'Visible«и числовой или логический» 1 (true) или 0 (false).

Видимость осей камеры, заданная как разделенная запятыми пара, состоящая из 'AxesVisible«и числовой или логический» 1 (true) или 0 (false).

Функция обратного вызова, заданная как разделенная запятыми пара, состоящая из 'ButtonDownFcnи дескриптор функции, который выполняется при щелчке камеры.

Выходные оси, указанные как разделенная запятыми пара, состоящая из 'Parentи дескриптор осей. По умолчанию plotCamera использует маркер перемещения текущих осей. Для возврата текущих осей используйте gca функция.

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

свернуть все

Объект визуализации камеры, возвращаемый в качестве одной из этих опций.

  • Объект камеры - функция возвращает этот параметр при печати одной камеры. Аргументы пары «имя-значение» или cameraTable входные элементы устанавливают соответствующие Camera свойства объекта.

  • Вектор строк объектов Camera - функция возвращает этот параметр при печати нескольких камер. n-я строка значений cameraTable ввод задает свойства для n-го Camera объект в этом векторе.

Объекты камеры создаются с помощью vision.graphics.Camera класс.

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