bboxCameraToLidar

Оцените 3-D ограничительные рамки в облаке точек от 2D ограничительных рамок в изображении

Описание

bboxesLidar = bboxCameraToLidar(bboxesCamera,ptCloudIn,intrinsics,tform) оценивает 3-D ограничительные рамки в системе координат облака точек, ptCloudIn, от 2D ограничительных рамок в изображении, bboxesCamera. Функция использует параметры внутреннего параметра камеры, intrinsics, и камера, чтобы лоцировать матрицу преобразования, tform, оценить 3-D ограничительные рамки, bboxesLidar.

[bboxesLidar,indices] = bboxCameraToLidar(___) возвращает индексы точек облака точек, которые являются в 3-D ограничительных рамках с помощью входных параметров от предыдущего синтаксиса.

[bboxesLidar,indices,boxesUsed] = bboxCameraToLidar(___) указывает, для какого из заданных 2D ограничительных рамок функция обнаружила соответствующую 3-D ограничительную рамку в облаке точек.

пример

[___] = bboxCameraToLidar(___,Name,Value) задает опции с помощью одного или нескольких аргументов пары "имя-значение" в дополнение к любой из комбинаций аргументов в предыдущих синтаксисах. Например, 'ClusterThreshold',0.5 устанавливает Евклидов порог расстояния для дифференциации кластеров облака точек к 0,5 мировым единицам измерения.

Примеры

свернуть все

Загрузите достоверные данные из MAT-файла в рабочую область. Извлеките изображение, данные об облаке точек и параметры внутреннего параметра камеры от достоверных данных.

dataPath = fullfile(toolboxdir('lidar'),'lidardata','lcc','bboxGT.mat');
gt = load(dataPath);
im = gt.im;
pc = gt.pc;
intrinsics = gt.cameraParams;

Извлеките камеру, чтобы лоцировать матрицу преобразования от достоверных данных.

tform = gt.camToLidar;

Извлеките 2D информацию об ограничительной рамке.

bboxImage = gt.box;

Отобразите 2D ограничительную рамку, наложенную на изображении.

annotatedImage = insertObjectAnnotation(im,'Rectangle',bboxImage,'Vehicle');
figure
imshow(annotatedImage)

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

Оцените ограничительную рамку в облаке точек.

[bboxLidar,indices] = ...
bboxCameraToLidar(bboxImage,pc,intrinsics,tform,'ClusterThreshold',1);

Отобразите 3-D ограничительную рамку, наложенную на облаке точек.

figure
pcshow(pc)
xlim([0 50])
ylim([0 20])
showShape('cuboid',bboxLidar,'Opacity',0.5,'Color','green')

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

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

свернуть все

2D ограничительные рамки в камере структурируют в виде M-by-4 матрицу вещественных значений. Каждая строка матрицы содержит местоположение и размер прямоугольной ограничительной рамки в форме [x y width height]. x и элементы y задают x и координаты y, соответственно, для верхнего левого угла прямоугольника. width и элементы height задают размер прямоугольника. M является количеством ограничительных рамок.

Примечание

Функция принимает, что данные изображения, которые соответствуют 2D ограничительным рамкам и данным об облаке точек, являются синхронизируемым временем.

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

Облако точек в виде pointCloud объект.

Примечание

Функция принимает, что облако точек находится в системе координат транспортного средства, где x - ось указывает вперед от автомобиля, оборудованного датчиком.

Параметры внутреннего параметра камеры в виде cameraIntrinsics объект.

Камера, чтобы лоцировать твердое преобразование в виде rigid3d объект.

Аргументы name-value

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

Пример: 'ClusterThreshold',0.5 устанавливает Евклидов порог расстояния для дифференциации кластеров облака точек к 0,5 мировым единицам измерения.

Кластеризация порога для двух смежных точек в виде разделенной запятой пары, состоящей из 'ClusterThreshold' и положительная скалярная величина. Процесс кластеризации основан на Евклидовом расстоянии между двумя смежными точками. Если расстояние между двумя смежными точками меньше заданного порога кластеризации, то точки принадлежат тому же кластеру. Если функция возвращает 3-D ограничительную рамку, которая меньше, чем ожидалось, попытайтесь задать более высокий 'ClusterThreshold' значение.

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

Область значений обнаружения от датчика лидара в виде разделенной запятой пары, состоящей из 'MaxDetectionRange' и двухэлементный вектор из вещественных значений в области значений (0, Inf]. Первый элемент вектора задает кратчайшее расстояние от датчика, в котором можно искать ограничительные рамки, и второй элемент задает расстояние, на котором функция прекращает искать. Значение Инфа указывает на наиболее удаленные точки облака точек.

Первый элемент должен быть меньшим, чем второй элемент. Задайте обоих в мировых единицах измерения.

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

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

свернуть все

3-D ограничительные рамки в системе координат лидара, возвращенной как N-by-9 матрица вещественных значений. N является количеством обнаруженных 3-D ограничительных рамок. Каждая строка матрицы имеет форму [центр x центр y центр z x len y len z len гниль x гниль y гниль z].

  • Центр x, центр y и центр z — Эти значения задают x - y - и z - координаты оси, соответственно, центра ограничительной рамки кубоида.

  • x len, y len и z len — Эти значения задают длину кубоида вдоль x - y - и z - ось, соответственно, прежде чем это будет вращаться.

  • Гниль x, гниль y и гниль z — Эти значения задают углы поворота кубоида вокруг x - y - и z - ось, соответственно. Эти углы по часовой стрелке положительны при взгляде в прямом направлении их соответствующих осей.

Этот рисунок показывает, как эти значения определяют положение кубоида.

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

Индексы точек в 3-D ограничительных рамках, возвращенных как вектор-столбец или N - массив ячеек элемента.

Если функция обнаруживает только одну 3-D ограничительную рамку в облаке точек, это возвращает вектор-столбец. Каждым элементом вектора является индекс облака точек точки, обнаруженной в 3-D ограничительной рамке.

Если функция обнаруживает несколько 3-D ограничительных рамок, она возвращает N - массив ячеек элемента. N является количеством 3-D ограничительных рамок, обнаруженных в облаке точек, и каждый элемент массива ячеек содержит индексы облака точек точек, обнаруженных в соответствующей 3-D ограничительной рамке.

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

Флаг обнаружения ограничительной рамки, возвращенный как M - вектор-строка элемента из logicals. M является количеством входа 2D ограничительные рамки. Если функция обнаруживает соответствующую 3-D ограничительную рамку в облаке точек, то это возвращает значение true для того входа 2D ограничительная рамка. Если функция не обнаруживает соответствующую 3-D ограничительную рамку, то она возвращает значение false.

Типы данных: логический

Расширенные возможности

Генерация кода C/C++
Генерация кода C и C++ с помощью MATLAB® Coder™.

Введенный в R2020b