Постройте камеру в 3-D координатах
cam = plotCamera()
cam = plotCamera(cameraTable)
cam = plotCamera(Name,Value)
cam = plotCamera()
создает объект визуализации камеры, представленный в текущей системе координат.
cam = plotCamera(
возвращает массив объектов визуализации камеры, представленных в текущей системе координат.cameraTable
)
cam = plotCamera(
создает объект визуализации камеры со значениями свойств, заданными одним или несколькими аргументами пары Name,Value
)Name,Value
.
Постройте камеру, указывающую вдоль оси Y.
R = [1 0 0; 0 0 -1; 0 1 0];
Обнулите непрозрачность камеры для более быстрой анимации.
cam = plotCamera('Location',[10 0 20],'Orientation',R,'Opacity',0);
Установите свойства представления.
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.Orientation = T * R; cam.Location = [10 * cos(theta),10 * sin(theta),20]; drawnow(); end
Создайте набор калибровочных изображений.
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');
Не исказите изображение.
im = undistortImage(imOrig,cameraParams);
Найдите ссылочный объект в новом изображении.
[imagePoints,boardSize] = detectCheckerboardPoints(im);
Вычислите новый extrinsics.
[rotationMatrix,translationVector] = extrinsics(imagePoints,...
worldPoints,cameraParams);
Постройте мировые точки.
figure; plot3(worldPoints(:,1),worldPoints(:,2),zeros(size(worldPoints, 1),1),'*'); hold on
Отметьте источник.
plot3(0,0,0,'g*');
Вычислите местоположение камеры и ориентацию.
orientation = rotationMatrix'; location = -translationVector * orientation;
Постройте камеру.
cam = plotCamera('Location',location,'Orientation',orientation,'Size',20);
Сделайте z - точка оси вниз.
set(gca,'CameraUpVector',[0 0 -1]);
Установите параметры представления.
camorbit(gca,-110,60,'data',[0 0 1]); axis equal grid on
Включите 3-D вращение.
cameratoolbar('SetMode','orbit');
Подпишите оси.
xlabel('X (mm)'); ylabel('Y (mm)'); zlabel('Z (mm)');
cameraTable
— Свойства объектов визуализации камерыСвойства объектов визуализации камеры, заданные как таблица. Столбцы содержат свойства Name,Value
объекта визуализации камеры за исключением Parent
, который задает оси для отображения. Если таблица содержит столбец 'ViewId'
, то представление IDs используется в качестве меток камеры.
Укажите необязательные аргументы в виде пар ""имя, значение"", разделенных запятыми.
Имя (Name) — это имя аргумента, а значение (Value) — соответствующее значение.
Name
должен появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: Name1, Value1, ..., NameN, ValueN.
'Location'
, [0,0,0]
местоположение
Координаты местоположения камеры[0,0,0]
(значение по умолчанию) | трехэлементный векторКоординаты местоположения камеры, заданные как пара, разделенная запятой, состоящая из 'Location
' и трехэлементного вектора. [x, y, z] координаты заданы в модулях данных родительских осей.
'Orientation'
— Матричная ориентацияeye(3)
(значение по умолчанию) | 3х3 3-D матрица вращенияМатричная ориентация, заданная как пара, разделенная запятой, состоящая из 'Orientation
' и 3х3 3-D матрицы вращения.
размер
Ширина базы камеры1
| скалярШирина базы камеры, заданная как пара, разделенная запятой, состоящая из 'Size
' и скаляра.
'Label'
— Camera''
(значение по умолчанию) | вектор символовМетка Camera, заданная как пара, разделенная запятой, состоящая из 'Label
' и вектора символов.
'Color'
— Цвет камеры[1 0 0]
(значение по умолчанию) | вектор символов | трехэлементный векторЦвет камеры, заданный как пара, разделенная запятой, состоящая из 'Color
' и вектора символов или трехэлементного вектора значений RGB в области значений [0 1]. Смотрите colorspec
для получения дополнительной информации о том, как задать цвет RGB.
'Opacity'
— Непрозрачность камеры0.2
| скаляр в области значений [0 1]Непрозрачность камеры, заданная как пара, разделенная запятой, состоящая из 'Opacity
' и скаляра в области значений [0 1].
'Visible'
— Видимость камерыtrue
(значение по умолчанию) | false
Видимость камеры, заданная как пара, разделенная запятой, состоящая из 'Visible
' и логического true
или false
.
'AxesVisible'
— Видимость осей камерыfalse
(значение по умолчанию) | true
Видимость осей камеры, заданная как пара, разделенная запятой, состоящая из 'AxesVisible
' и логического true
или false
.
'ButtonDownFcn'
Функция обратного вызова''
| имя функцииФункция обратного вызова, заданная как пара, разделенная запятой, состоящая из 'ButtonDownFcn
' и имени функции, которое выполняется, когда вы кликаете по камере.
'Parent'
— Выведите осиgca
Выведите оси, заданные как пара, разделенная запятой, состоящая из 'Parent
' и указателя осей. Значение по умолчанию установлено в указатель текущей системы координат, gca
.
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.