Выполнение извлечения дамб из DEM?

14

У меня есть DEM 1x1 метра и оригинальное облако точек LiDAR в .las, из которого сделана DEM. Мне нужно извлечь речные дайки (самые высокие точки дамб) для векторного объекта (точка, полилиния).

Любая идея для алгоритма или существующего инструмента?

Дайки на первом изображении светло-серые, а ниже - изображение облака точек для примера области с дамбами. Центральная линия реки синим цветом.

Дайки светло-серые

Облако точек с дамбами

Любой инструмент для извлечения линейных объектов из матрицы высот?

Я считаю, что мне нужно что-то вроде модуля извлечения пространственных характеристик ENVI (стр. 7), но без участия ENVI, поскольку я не могу себе этого позволить :)

Томек
источник
1
Какую ГИС-систему вы используете?
Хорнбидд
Коммерческая-ArcInfo 10 (SA, 3D, Геостатистические расширения). Открытый исходный код - любой.
Томек
1
Я думал о некоторой идее, предполагая, что у вас есть векторная осевая линия для вашей реки, чтобы вы могли буферизовать это и использовать это для маскирования матрицы высот и пороговых значений. Это предполагает, что дамба проходит параллельно руслу реки. Так что, какая бы логика вы ни использовали, она должна быть достаточно умной, чтобы захватывать дайки, когда они «отступают» от реки.
Хорнбидд
К сожалению, дайки не всегда идут параллельно руслу реки и довольно часто находятся далеко от русла реки. Я думал, что будет какой-то алгоритм как скелетонизация? Для извлечения линейного объекта (ов) из матрицы высот, с помощью такого объекта я мог бы получить самые высокие точки в облаке точек.
Томек
2
Я наткнулся на этот документ, может быть, поможет? asprs.org/a/publications/pers/2004journal/de December/…
Хорнбидд

Ответы:

8

Все зависит от того, где вы проводите линию. Несмотря на это, эта проблема выглядит так, как будто ее легко решить, используя морфологические функции, доступные в Spatial Analyst, особенно пороговое значение (выполняется с помощью локальных операций «<» и «>») и «RegionGroup» для идентификации и извлечения компонентов.

Хотя у меня нет доступа к ЦМР для иллюстрации, первое изображение почти достаточно для выполнения работы. Например, вот последовательность версий красной полосы по регионам (со значениями, масштабированными от 0,0 = черный до 1,0 = белый), начиная с порога 0 и двигаясь слева направо, сверху вниз, с шагом 0,02:

Плотины

(Эти изображения были сокращены для воспроизведения здесь: весь анализ проводился с разрешением исходного изображения.)

Дайки появляются вокруг границы черной области к началу второго ряда (порог = 0,08). В начале третьей строки (порог = 0,16) дайки образуют свои собственные компоненты (синим цветом), и в этот момент их можно легко извлечь в виде отдельных сеток или многоугольников (а их границы можно извлечь в виде полилиний после этапа обнаружения ребер) ). К последнему ряду остаются только самые широкие дайки (порог = 0,24 и выше). Вам нужно будет выбрать соответствующий порог , чтобы получить именно то, что вы хотите.

В оригинальной ЦМР повышение уровня играет роль интенсивности, поэтому эти процедуры должны быть одинаково эффективны с самой ЦМР. Если матрица высот имеет большую протяженность (включая объекты, удаленные от реки или дамб), соответствующие объекты можно выбрать в качестве объектов, смежных с компонентом, в котором находится объект реки.

Тонкие нежелательные области, обнаруженные RegionGroup, могут быть устранены путем применения небольшой эрозии (отрицательный буфер) с последующей эквивалентной дилатацией (положительный буфер). Небольшие нежелательные области могут быть исключены по критерию размера (общее количество клеток или площадь). Самые высокие точки на каждой дамбе (если это то, что действительно нужно) можно найти, сравнив матрицу высот с зональными максимальными сетками (используя дамбы в качестве зон).


Кстати, эта последовательность изображений была создана в Mathematica 8. Вот команды для тех, кто, возможно, пожелает воспользоваться этой опцией.

original = Import["http://i.stack.imgur.com/gV7Du.jpg"];
{r, g, b} = ColorSeparate[original];
frames = ParallelTable[Colorize[MorphologicalComponents[Binarize[r, t/100]], 
                       ColorFunction -> "ThermometerColors"], {t, 0, 30, 2}];
Rasterize @ TableForm[Partition[frames, 4]]

Общее время на часах (после импорта изображения) составило 0,94 секунды, из которых половина была необходима для сжатия и экспорта всех 16 изображений: морфологические операции обычно бывают быстрыми (что хорошо, потому что LIDAR DEMs могут быть огромными).

Whuber
источник
В целом концепция звучит нормально, но я не понимаю части "... thresholding (выполняется с" <"и"> "локальными операциями)". Как этого добиться с помощью набора инструментов Generalization (SA)?
Томек
@ Томек Один нет. Смотрите логический набор инструментов .
whuber
9

Я читал о различных алгоритмах для работы (то есть по ссылке @Hornbydds ).

Я испробовал несколько парочек, и лучшие результаты в моем случае дают стандартный анализ местности от SAGA. Вот что я сделал и почему:

Дайки, как правило, являются самой высокой характеристикой вблизи русла реки, поэтому я превратил их в каналы, щелкнув DEM (MapAlgebra DEM * -1 или для преувеличения склонов -10). С этого момента я мог использовать любой из гидрологических наборов инструментов (ArcHydro, HEC-GeoRas или SAGA hydro tools). Я выбрал SAGA / Анализ рельефа-составной анализ / Стандартный анализ рельефа, так как он производит Речную сеть за пару кликов. Речная сеть - это то, чего я хотел достичь, поскольку она производит полилинии, которые указывают лучший маршрут для потока воды, который в случае перевернутых дамб - дает их наивысшую точку.

Полученный файл формы немного запутан (многие из небольших полилиний), но после некоторой настройки результаты удовлетворительные. Еще одна неприятность в том, что 1 дамба состоит из 300 коротких полилиний, но я думаю, что найду способ справиться с этим.

Вот пример результатов:

введите описание изображения здесь

Конечно, это довольно грубое решение, и я, вероятно, продолжу исследовать проблему, но я подумал, что стоит поделиться.

Томек
источник
5

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

  • Resample, затем Neighborhood -> Filter: High Pass
  • Поверхность -> Кривизна
  • Соседство -> Фокальная статистика: стандартное отклонение
  • «Относительная высота» = (Пиксель) - (Соседство -> Фокальная статистика: Медиана)
  • Invert, Resample, затем Neighborhood -> Focal Flow

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

Вот учебник по извлечению векторных реберных линий из растровой матрицы высот с использованием Spatial Analyst, который должен быть очень применим:

MappingTomorrow
источник
Я посмотрю на комбинацию инструментов - может дать хорошие результаты. Благодарю. Как я вижу, учебник ESRI описывает процесс +/-, как я сделал :) Круто. Благодарю.
Томек
0

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

данго
источник