Оцените твердое преобразование из датчика лидара в камеру
оценивает преобразование между датчиком лидара и камерой, используя функции шахматного калибровочного шаблона, извлеченные из каждого датчика.tform = estimateLidarCameraTransform(ptCloudPlanes,imageCorners3d)
[___] = estimateLidarCameraTransform(___, задает опции, использующие один или несколько аргументы пары "имя-значение" в дополнение к любой комбинации аргументов в предыдущих синтаксисах. Для примера, Name,Value)'Verbose',true устанавливает функцию для отображения прогресса.
Оцените твердое преобразование из датчика лидара в камеру с помощью данных, полученных с датчика лидара и параметров калибровки камеры. Используйте следующие три шага:
Загрузите данные в рабочую область.
Извлеките необходимые функции из изображений и данных облака точек.
Оцените твердое преобразование, используя извлечённые функции.
Загрузка данных
Загрузите изображения и данные облака точек в рабочую область.
imageDataPath = fullfile(toolboxdir('lidar'),'lidardata',... 'lcc','vlp16','images'); imds = imageDatastore(imageDataPath); imageFileNames = imds.Files; ptCloudFilePath = fullfile(toolboxdir('lidar'),'lidardata',... 'lcc','vlp16','pointCloud'); pcds = fileDatastore(ptCloudFilePath,'ReadFcn',@pcread); pcFileNames = pcds.Files;
Загрузите файлы калибровки камеры в рабочую область.
cameraIntrinsicFile = fullfile(imageDataPath,'calibration.mat');
intrinsic = load(cameraIntrinsicFile);Редукция данных
Задайте размер шахматных квадратов в миллиметрах.
squareSize = 81;
Оцените координаты угла шахматной доски для изображений.
[imageCorners3d,planeDimension,imagesUsed] = estimateCheckerboardCorners3d( ...
imageFileNames,intrinsic.cameraParams,squareSize);Фильтрация облаков точек на основе используемых изображений.
pcFileNames = pcFileNames(imagesUsed);
Обнаружите шахматные плоскости в отфильтрованных облаках точек с помощью параметров плоскости planeDimension.
[lidarCheckerboardPlanes,framesUsed] = detectRectangularPlanePoints( ... pcFileNames,planeDimension,'RemoveGround',true);
Извлеките изображения, шахматные углы и облака точек, в которых вы обнаружили признаки.
imagFileNames = imageFileNames(imagesUsed); imageFileNames = imageFileNames(framesUsed); pcFileNames = pcFileNames(framesUsed); imageCorners3d = imageCorners3d(:,:,framesUsed);
Оценка преобразования
Оцените преобразование с помощью шахматных плоскостей из облаков точек и 3-D угловых точек шахматного поля с изображений.
[tform,errors] = estimateLidarCameraTransform(lidarCheckerboardPlanes, ... imageCorners3d,'CameraIntrinsic',intrinsic.cameraParams);
Отобразите ошибки перемещения, поворота и репроекции как гистограммы.
figure bar(errors.TranslationError) xlabel('Frame Number') title('Translation Error (meters)')

figure bar(errors.RotationError) xlabel('Frame Number') title('Rotation Error (degrees)')

figure bar(errors.ReprojectionError) xlabel('Frame Number') title('Reprojection Error (pixels)')

ptCloudPlanes - Сегментированные шахматные плоскостиpointCloud объектыСегментированные шахматные плоскости, заданные как pointCloud объект или P -by-1 массив pointCloud объекты. P - количество облаков точек. Каждый pointCloud объект должен содержать точки, представляющие шахматную (прямоугольную) плоскость.
P должны быть равны для обоих ptCloudPlanes и imageCorners3d аргументы. Это означает, что количество облаков точек и количество изображений, используемых для обнаружения, также должны быть равными.
imageCorners3d - 3-D координаты шахматных углов3-D координаты шахматных углов, заданные как матрица 4 на 3 или массив 4 на 3 P. P представляет количество изображений камеры, используемых для обнаружения. Каждая строка канала содержит координаты 3-D, в виде [x, y, z], шахматного угла в метрах, извлеченных из соответствующего изображения камеры. P должны быть равны для обоих ptCloudPlanes и imageCorners3d аргументы. Это означает, что количество облаков точек и количество изображений, используемых для обнаружения, также должны быть равными.
Типы данных: single | double
Задайте необязательные разделенные разделенными запятой парами Name,Value аргументы. Name - имя аргумента и Value - соответствующее значение. Name должны находиться внутри кавычек. Можно задать несколько аргументов в виде пар имен и значений в любом порядке Name1,Value1,...,NameN,ValueN.
'Verbose',true устанавливает функцию для отображения прогресса.'Lidar3DCorners' - Шахматные углы в лидарной системе координатШахматные углы в лидарной системе координат, заданные как разделенная разделенными запятой парами, состоящая из 'Lidar3DCorners' и массив 4 на 3 байта P, где P количество облаков точек.
Если пользователь задает шахматные углы в лидар системы координат, то функция не вычисляет их внутренне.
Типы данных: single | double
'InitialTransform' - Начальное твердое преобразованиеrigid3d объект (по умолчанию) | rigid3d объектНачальное твердое преобразование, заданное как разделенная разделенными запятой парами, состоящая из 'InitialTransform' и a rigid3d объект.
Функция принимает угол поворота между датчиком лидара и камерой в области значений [-45 45] вдоль каждой оси. Для любой другой области значений угла поворота используйте эту пару "имя-значение", чтобы задать начальное преобразование, чтобы улучшить точность функции.
'CameraIntrinsic' - Внутренние параметры камерыcameraIntrinsics | объекта cameraParameters объектВнутренние параметры камеры, заданные как разделенная разделенными запятой парами, состоящая из 'CameraIntrinsic' и a cameraIntrinsics объект или cameraParameters объект.
'Verbose' - Отобразите прогресс функцииfalse или 0
(по умолчанию) | true или 1Отобразите прогресс функции, заданный как разделенная разделенными запятой парами, состоящая из 'Verbose' и логический 0 (false) или логический 1 (true).
Типы данных: logical
tform - Твердое преобразование лидара к камереrigid3d объектЛидар к камере твердое преобразование, возвращенное как rigid3d объект. Возвращенный объект регистрирует данные облака точек от датчика лидара до координатной системы координат камеры.
errors - Неточность оценки матрицы преобразованияНеточность оценки матрицы преобразования, возвращенная как структура. Структура содержит эти поля.
RotationError - Разница между нормальными углами, заданными шахматными плоскостями в облаках точек (лидарная система координат), и углами на изображениях (кадр камеры). Функция оценивает плоскость в изображении с помощью шахматных угловых координат. Функция возвращает значения ошибок в степенях как P -элементный числовой массив. P - количество облаков точек.
TranslationError - Разница между центроидными координатами шахматных плоскостей в облаках точек и координатами на изображениях. Функция возвращает значения ошибки в метрах как P числовой массив -элемент. P - количество облаков точек.
Если вы задаете внутренние параметры камеры для функции, используя 'CameraIntrinsic' Пара "имя-значение" структура содержит это дополнительное поле.
ReprojectionError - Разница между проецируемыми (преобразованными) центроидными координатами шахматных плоскостей от облаков точек и координатами на изображениях. Функция возвращает значения ошибок в пикселях как P -элементный числовой массив. P - количество облаков точек.
Типы данных: struct
У вас есть измененная версия этого примера. Вы хотите открыть этот пример с вашими правками?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.