exponenta event banner

segmentGroundSMRF

Заземление сегмента из лидарных данных по алгоритму SMRF

Описание

пример

groundPtsIdx = segmentGroundSMRF(ptCloud) сегментация облака входных точек, ptCloud в наземные и ненулевые точки и возвращает логическую матрицу или вектор groundPtsIdx. Функция устанавливает индексы точек заземления в значение true и true для негерметичных точек.

groundPtsIdx = segmentGroundSMRF(ptCloud,gridResolution) дополнительно задает размер элемента сетки.

[groundPtsIdx,nonGroundPtCloud,groundPtCloud] = segmentGroundSMRF(___) дополнительно возвращает точки земли и точки, не являющиеся точками земли, как отдельные pointCloud объекты. Используйте этот синтаксис с любой из комбинаций входных аргументов в предыдущих синтаксисах.

пример

[___] = segmentGroundSMRF(___,Name,Value) указывает параметры, использующие один или несколько аргументов значения имени. Например, 'ElevationThreshold',0.4 устанавливает порог отметки для идентификации точек, не являющихся точками грунта, равным 0,4.

Примеры

свернуть все

Сегментируйте землю в неорганизованном облаке воздушных точек.

Создать lasFileReader объект для доступа к данным файла LAS.

fileName = fullfile(toolboxdir('lidar'), 'lidardata', 'las', ...
    'aerialLidarData2.las');
lasReader = lasFileReader(fileName);

Считывание данных облака точек из файла LAS с помощью readPointCloud функция.

ptCloud = readPointCloud(lasReader);

Данные основания сегмента из облака точек.

[groundPtsIdx,nonGroundPtCloud,groundPtCloud] = segmentGroundSMRF(ptCloud);

Визуализация точек заземления и точек, не являющихся точками заземления.

figure
pcshowpair(groundPtCloud, nonGroundPtCloud)

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

Сегментация грунта в организованном облаке точек. Облако точек было захвачено в сценарии шоссе.

Загрузите данные облака точек в рабочее пространство.

ld = load('drivingLidarPoints.mat');

Данные основания сегмента из облака точек.

[~,nonGroundPtCloud,groundPtCloud] = segmentGroundSMRF(...,
  ld.ptCloud,'ElevationThreshold',0.1,'ElevationScale',0.25);

Визуализация точек заземления и точек, не являющихся точками заземления.

figure
pcshowpair(groundPtCloud,nonGroundPtCloud)
xlim([-60 60])
ylim([-50 50])

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

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

свернуть все

Данные облака точек, указанные как pointCloud объект.

Размер каждого элемента сетки, заданный как положительный скаляр.

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

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

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

Пример: 'ElevationThreshold',0.4 устанавливает порог отметки для определения точек, не являющихся точками грунта, равным 0,4.

Максимальный радиус дискообразного структурирующего элемента в операции морфологического вскрытия, определяемый как положительный скаляр. Увеличение этого значения для сегментации больших зданий как не наземных за счет дополнительных вычислений.

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Пороговое значение уклона для определения элементов сетки, не относящихся к земле, на карте поверхности минимальной отметки, указанное как неотрицательный скаляр. Функция классифицирует элемент сетки как незамкнутый, если его наклон больше, чем SlopeThreshold. Увеличьте это значение, чтобы классифицировать крутые откосы как грунт.

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Пороговое значение отметки для определения точек, не относящихся к земле, указанное как неотрицательный скаляр. Функция классифицирует точку как негерметичную, если разность отметок между точкой и расчетной поверхностью грунта больше, чем ElevationThreshold. Увеличьте это значение, чтобы охватить больше точек из ухабистой земли.

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Коэффициент масштабирования порогового значения отметки относительно наклона расчетной поверхности грунта, заданный как неотрицательный скаляр. Увеличьте это значение, чтобы определить точки основания на крутых уклонах.

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

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

свернуть все

Двоичная карта сегментированного облака точек, возвращаемая как логическая матрица для организованных облаков точек и как логический вектор для неорганизованных облаков точек. Функция устанавливает местоположения точек заземления в матрице как true и негерметичные точки false.

Облако точек для точек, не являющихся наземными, возвращенное в виде pointCloud объект.

Облако точек точек земли, возвращенное как pointCloud объект.

Алгоритмы

Алгоритм простого морфологического фильтра (SMRF) [1] сегментирует данные облака точек на наземные и не наземные точки. Алгоритм разделен на три этапа:

  1. Создайте поверхность минимальной отметки на основе данных облака точек.

  2. Сегментируйте поверхность на наземные и неназначенные элементы сетки.

  3. Сегментировать исходные данные облака точек.

Минимальное создание поверхности

  1. Разделите данные облака точек на сетку вдоль размера xy (вид с высоты птичьего полета). Укажите размер элемента сетки с помощью gridResolution.

  2. Найдите значение наименьшей отметки (Zmin) для каждого элемента сетки (пикселя).

  3. Объединение всех значений Zmin в матрицу 2-D (растровое изображение) для создания карты поверхности минимальной отметки.

Сегментация карты поверхности

  1. Примените операцию морфологического вскрытия к карте минимальной поверхности. Дополнительные сведения о морфологическом открытии см. в разделе Типы морфологических операций.

  2. Используйте дискообразный структурный элемент с радиусом 1 пиксел. Дополнительные сведения см. в разделе Структурирование элементов.

  3. Рассчитайте уклон между картами минимальной поверхности и открытой поверхности в каждом элементе сетки. Если разница превышает пороговое значение отметки, классифицируйте пиксель как не заземленный.

  4. Выполните шаги с 1 по 3 итеративно. Увеличьте радиус структурного элемента на 1 пиксел в каждой итерации, пока он не достигнет максимального радиуса, заданного MaxWindowRadius.

  5. Конечным результатом процесса итерации является двоичная маска, где каждый пиксель классифицируется как заземленный или не заземленный.

Сегментация облака точек

  1. Примените двоичную маску на исходной карте минимальных поверхностей, чтобы исключить нетронутые сетки.

  2. Заполните незаполненные сетки с помощью методов интерполяции изображений для создания расчетной модели фасада.

  3. Рассчитайте разность отметок между каждой точкой в исходном облаке точек и расчетной моделью отметок. Если разница больше, чем ElevationThreshold, классифицируйте пиксель как не заземленный.

Ссылки

[1] Пингел, Томас Дж., Кит К. Кларк и Уильям А. Макбрайд. «Усовершенствованный простой морфологический фильтр для классификации местности воздушных данных LIDAR». Журнал фотограмметрии и дистанционного зондирования 77 (март 2013 года): 21-30. https://www.sciencedirect.com/science/article/abs/pii/S0924271613000026? via%3Dihub.

См. также

Функции

Объекты

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