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 в 2D матрицу (растровое изображение), чтобы создать минимальную карту поверхности вертикального изменения.

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

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

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

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

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

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

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

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

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

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

Ссылки

[1] Pingel, Томас Дж., Кит К. Кларк и Уильям А. Макбрайд. “Улучшенный Простой Морфологический Фильтр для Классификации Ландшафтов Бортовых Данных о ЛИДАРЕ”. Журнал ISPRS Фотограмметрии и Дистанционного зондирования 77 (март 2013): 21–30. https://www.sciencedirect.com/science/article/abs/pii/S0924271613000026? via%3Dihub.

Смотрите также

Функции

Объекты

Введенный в R2021a