pc2dem

Создайте цифровую модель вертикального изменения (DEM) данных об облаке точек

Описание

пример

elevModel = pc2dem(ptCloudIn) создает и возвращает цифровую модель вертикального изменения (DEM) elevModel для облака точки ввода. Выходная матрица содержит обобщенную информацию о вертикальном изменении облака точки ввода. Для получения дополнительной информации см. Алгоритмы.

elevModel = pc2dem(ptCloudIn,gridResolution) дополнительно задает размерности элемента сетки.

[elevModel,xlimits,ylimits] = pc2dem(___) дополнительно возвращает x - и y - пределы DEM, с помощью любой комбинации входных параметров от предыдущих синтаксисов.

пример

[___] = pc2dem(___,Name,Value) задает опции с помощью одних или нескольких аргументов name-value. Например, 'CornerFillMethod','min' задает для функции, чтобы вычислить обобщенные значения вертикального изменения для углов сетки в DEM как минимальное вертикальное изменение в поисковом радиусе по умолчанию каждого угла сетки.

Примеры

свернуть все

Создайте lasFileReader возразите, чтобы считать данные об облаке точек, хранимые в aerialLidarData.laz.

 fileName = fullfile(toolboxdir("lidar"),"lidardata","las", ...
            "aerialLidarData.laz");
lasReader = lasFileReader(fileName);

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

ptCloud = readPointCloud(lasReader);

Визуализируйте данные об облаке точек.

figure
pcshow(ptCloud.Location)
title("Point Cloud")

Figure contains an axes object. The axes object with title Point Cloud contains an object of type scatter.

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

groundPtsIdx = segmentGroundSMRF(ptCloud);

Извлеките наземные точки.

ptCloudWithGround = select(ptCloud,groundPtsIdx);

Визуализируйте наземные точки.

figure
pcshow(ptCloudWithGround.Location)
title("Ground Points")

Figure contains an axes object. The axes object with title Ground Points contains an object of type scatter.

Создайте цифровую модель ландшафта (DTM) из сегментированных наземных точек.

terrainModel = pc2dem(ptCloudWithGround);

Визуализируйте DTM.

figure
imagesc(terrainModel)
colormap(gray)
title("Digital Terrain Model")

Figure contains an axes object. The axes object with title Digital Terrain Model contains an object of type image.

Создайте lasFileReader возразите, чтобы считать воздушные данные об облаке точек из "aerialLidarData.laz".

fileName = fullfile(toolboxdir("lidar"),"lidardata","las", ...
          "aerialLidarData.laz");
lasReader = lasFileReader(fileName);

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

ptCloud = readPointCloud(lasReader,"LaserReturns",1);

Создайте цифровую поверхностную модель (DSM) облака точек с разрешением элемента сетки 1,1 метров.

gridRes = 1.1;
surfaceModel = pc2dem(ptCloud,gridRes,"CornerFillMethod","max");

Задайте местоположение источника освещения.

azimuthAng = 135;
zenithAng = 45;

Вычислите направленные градиенты DSM использование imgradientxy функция.

[gx,gy] = imgradientxy(surfaceModel,"sobel");

Нормируйте градиенты с помощью разрешения элемента сетки.

gx = gx/(8*gridRes);
gy = gy/(8*gridRes);

Вычислите наклон и аспект DSM.

slopeAngle = atand(sqrt(gx.^2 + gy.^2));
aspectAngle = atan2d(gy,-gx);
aspectAngle(aspectAngle < 0) = aspectAngle(aspectAngle < 0) + 360;

Вычислите hillshade использование алгоритма от Esri®. hillshade является 3-D полутоновым представлением поверхности с относительным положением источника освещения, учтенного при штриховке изображения.

h = 255.0*((cosd(zenithAng).*cosd(slopeAngle)) ...
    + (sind(zenithAng).*sind(slopeAngle).*cosd(azimuthAng - aspectAngle)));
h(h < 0) = 0;

Визуализируйте hillshade DSM.

figure
imagesc(h)
colormap(gray)

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

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

свернуть все

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

Разрешение элемента сетки вдоль xy - оси в виде двухэлементного вектора из формы [x y], или как скаляр для квадратных элементов. Значения для этого аргумента должны быть положительными вещественными числами.

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

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

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

Пример: 'CornerFillMethod','min' выбирает тип метода, чтобы вычислить обобщенные значения вертикального изменения для каждого угла сетки в DEM.

Метод для сетки загоняет обобщенное вычисление значения вертикального изменения в угол в виде вектора символов или строкового скаляра. Список поддерживаемых методов и как они должны быть заданы, следующие:

  • 'min' — Минимальное вертикальное изменение всех точек в поисковом радиусе

  • 'max' — Максимальное вертикальное изменение всех точек в поисковом радиусе

  • 'mean' — Среднее вертикальное изменение всех точек в поисковом радиусе

  • 'idw' — Среднее вертикальное изменение обратного расстояния взвешивается (IDW) всех точек в поисковом радиусе

Типы данных: char | string

Радиус поисковой области вокруг каждого угла сетки в виде положительной скалярной величины.

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

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

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

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

свернуть все

Цифровая модель вертикального изменения, возвращенная как M-by-N матрица вещественных значений. Значения M и N вычисляются на основе пределов облака точек вдоль xy - оси и gridResolution.

x- модели вертикального изменения, возвращенной как двухэлементный вектор с действительным знаком.

y- модели вертикального изменения, возвращенной как двухэлементный вектор с действительным знаком.

Алгоритмы

Функция использует локальный алгоритм раскладывания, чтобы создать цифровую модель вертикального изменения (DEM) данных об облаке точек. Алгоритм принимает, что вертикальное изменение точек приезжает z - ось.

Локальный алгоритм раскладывания:

  • Разделите облако точек на сетку по измерениям xy- (вид с высоты птичьего полета). Задайте размерности сетки с помощью gridResolution аргумент.

  • Используйте информацию о вертикальном изменении всех точек в круговой области вокруг каждого угла сетки, чтобы вычислить обобщенные значения сетки. Можно задать поисковый радиус и метод расчета с помощью 'SearchRadius' и 'CornerFillMethod' аргументы name-value, соответственно.

  • Если нет никаких точек в круговой области, алгоритм не вычисляет значение, и те углы сетки остаются незаполненными. Функция представляет их как NaN. Алгоритм использует интерполяцию обратного расстояния взвешивается (IDW), чтобы заполнить незаполненные углы сетки. Чтобы задать размер фильтра для метода интерполяции IDW, используйте 'FilterSize' аргумент значения имени.

Введенный в R2021b