Оцените твердое преобразование с датчика лидара на камеру
оценивает преобразование между датчиком лидара и камерой, использующей калибровочные функции шаблона шахматной доски, извлеченные из каждого датчика.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'
и rigid3d
объект.
Функция принимает, что угол поворота между датчиком лидара и камерой находится в области значений [-45 45] вдоль каждой оси. Для любой другой области значений угла поворота используйте эту пару "имя-значение", чтобы задать начальное преобразование, чтобы улучшить функциональную точность.
CameraIntrinsic
— Параметры внутреннего параметра камерыcameraIntrinsics
возразите | cameraParameters
объектПараметры внутреннего параметра камеры в виде разделенной запятой пары, состоящей из 'CameraIntrinsic'
и cameraIntrinsics
объект или cameraParameters
объект.
Verbose
— Отобразите функциональный прогрессfalse
или 0
(значение по умолчанию) | true
или 1
Отобразите функциональный прогресс в виде разделенной запятой пары, состоящей из 'Verbose'
и логический 0
ложь
) или логический 1
TRUE
).
Типы данных: логический
tform
— Лоцируйте к камере твердое преобразованиеrigid3d
объектЛоцируйте к камере твердое преобразование, возвращенное как rigid3d
объект. Возвращенный объект указывает данные об облаке точек от датчика лидара до координатной системы координат камеры.
errors
— Погрешность оценки матрицы преобразованияПогрешность оценки матрицы преобразования, возвращенной как структура. Структура содержит эти поля.
RotationError
— Различие между нормальными углами, заданными плоскостями шахматной доски в облаках точек (лоцируют систему координат), и те в изображениях (система координат камеры). Функция оценивает плоскость в изображении с помощью угловых координат шахматной доски. Функция возвращает ошибочные значения в градусах как P - числовой массив элемента. P является количеством облаков точек.
TranslationError
— Различие между центроидными координатами плоскостей шахматной доски в облаках точек и тех в изображениях. Функция возвращает ошибочные значения в метрах как P - числовой массив элемента. P является количеством облаков точек.
Если вы задаете параметры внутреннего параметра камеры к функции с помощью 'CameraIntrinsic'
пара "имя-значение", затем структура содержит это дополнительное поле.
ReprojectionError
— Различие между спроектированными (преобразованными) центроидными координатами плоскостей шахматной доски от облаков точек и тех в изображениях. Функция возвращает ошибочные значения в пикселях как P - числовой массив элемента. P является количеством облаков точек.
Типы данных: struct
У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
Вы щелкнули по ссылке, которая соответствует команде MATLAB:
Выполните эту команду, введя её в командном окне MATLAB.
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.