Как сравнить две матрицы высот и показать их разницу?

10

Я хочу сравнить свои ЦМР друг с другом (ASTER GDEM2 и SRTM4.1). Я знаю, что в GDEM есть «дыры» с неправильными отметками (я нашел 3 из них в моей рабочей зоне). Теперь мне нужно знать, есть ли еще их, чтобы в конечном итоге исправить их с помощью SRTM. Я использую SAGA, GRASS и QGIS.

КАРТА
источник
сравнить их с чем? друг с другом? один у вас базовый, а другой неисправен?
Никв
правильно! Я просто хочу провести различие между ними.
КАРТА

Ответы:

5

Допустим, Raster1 является правильным, а Raster2 - тот, который, как вы подозреваете, имеет ошибки.

Они также находятся в одинаковых единицах (поскольку вы говорите, что оба растра являются матрицами высот, значение z должно быть в метрах - я полагаю, что мы правы, и мы сравниваем одни и те же вещи)

Вы можете использовать rast calc из любого пакета (qgis, grass, saga) для сравнения, например:

deviation_rast  = abs( (raster1 - raster2) / raster1 * 100 ) 

каждая ячейка полученного растра будет отображать процент отклонения растра2 от растра1.

После этого вы можете реклассифицировать deviation_rast в зависимости от ваших потребностей: например,

red -> deviation_rast_value > 75
orange -> deviation_rast_value > 50
yellow ->  deviation_rast_value > 25
green -> deviation_rast_value  > 0

определить проблемные области - и выбрать, хотите ли вы вмешаться или нет

nickves
источник
8
Это соотношение не очень хорошая идея для ЦМР с возвышениями вблизи уровня моря: вы получите много фиктивных результатов и совершенно неопределенные результаты везде, где растр2 == 0. Для всех ЦМР правильный подход - просто вычесть один растр из другого и отобразить на экране для выбросов (что может быть сделано многими, многими способами: обратитесь к stats.stackexchange.com для некоторых методов).
whuber
11

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

RK
источник
5
Точно, просто вычтите одну матрицу высот из другой. Затем я представлял бы это в QGIS или даже реклассифицировал его, используя некоторую терпимость в отношении нуля. Что-то вроде If -5m <Result <5m, тогда учтите, что матрицы высот имеют одинаковое значение в этой конкретной ячейке.
Александр Нето
6
(+1) Это хорошее начало - и тоже простое. Ошибки в ЦМР немного сложнее: они являются результатом ошибок высот и позиционных ошибок. Если нет позиционной ошибки, то обычно экран, основанный на постоянном допуске, хорош - но он не обязательно должен быть около нуля, потому что одна матрица высот может иметь (небольшой) постоянный вертикальный сдвиг относительно другого. Вместо этого используйте допуск вокруг среднего значения. В холмистой местности позиционная ошибка добавляет больше вариаций, когда уклоны круче, поэтому допуск необходимо увеличить примерно пропорционально тангенсу уклона.
whuber
У меня похожая проблема, но мои растры перекрываются только частично (растр B охватывает только часть растра A), и инструмент «Разница сетки» не будет работать. Есть идеи, что я могу сделать?
Х. Винер