@jul правильно, что «вам нужно вычислить поверхность тренда, а затем вычесть ее из исходной матрицы высот, чтобы получить« отклоненную »», но в этом случае кажется, что для «сохранения провалов» требуются более простые процедуры. Если «трендовая поверхность» слишком близко следует исходной ЦМР, то остатки не сохранят локальные характеристики поверхности. Таким образом, среди методов, которых следует избегать , все локальные (сплайны, фильтры и - особенно - кригинг) и те, которые предпочитают, являются глобальными.
Простой, надежный, прямой подход заключается в установке самолета на ЦМР в непосредственной близости от реки. Это не требует какой-либо сложной технологии или сложных вычислений, потому что (согласно Евклиду) плоскость определяется тремя (неколлинеарными) точками в пространстве. Соответственно, выберите одну точку (x1 ', y1', z1 ') = (координаты, высота) в верховьях реки, другую точку (x2', y2 ', z2') в нижнем течении и третью точку в (x0 ', y0', z0 ') по вашему выбору вдали от отрезка, соединяющего первые две точки. (Эти координаты обозначены простыми числами, потому что мы скоро их изменим.) Эта последняя точка недолжны соответствовать точке на поверхности земли или даже рядом с ней! Фактически, хорошим начальным выбором может быть установка его возвышения на среднее значение возвышений вверх и вниз по течению, z0 '= (z1' + z2 ') / 2.
Расчеты облегчаются путем принятия точки (x0 ', y0', z0 ') в качестве источника локальной системы координат. В этих координатах две другие точки находятся в
(x1,y1,z1) = (x1'-x0',y1'-y0',z1'-z0')
(x2,y2,z2) = (x2'-x0',y2'-y0',z2'-z0').
Любое произвольное местоположение в точке (x ', y') в исходной системе координат имеет координаты (x, y) = (x'-x0 ', y'-y0') в этой новой системе. Поскольку любая плоскость, проходящая через начало координат (0,0,0), должна иметь уравнение вида z = a * x + b * y, это сводит проблему к следующему:
Найти уравнение в виде z = a * x + b * y для плоскости, проходящей через точки (0,0,0), (x1, y1, z1) и (x2, y2, z2).
Уникальное решение состоит в том, чтобы вычислить
u = z1 y2 - z2 y1
v = x1 z2 - x2 z1
w = x1 y2 - x2 y1
в какие сроки
a = u/w, b = v/w.
Найдя эти два числа a и b и вспомнив две исходные координаты x0 'и y0', получим растровый расчет вида
[DEM] - a * ([X'] - x0') - b * ([Y'] - y0')
снимает «наклон» от DEM . В этом выражении [X '] относится к координатной сетке x в исходных координатах, а [Y'] относится к исходной координатной сетке y. Результирующая ЦМР гарантированно будет иметь одинаковую высоту (а именно, z0 ') в каждой из трех точек, которые вы изначально выбрали; что он делает в другом месте, зависит от самой DEM!
(Я надеюсь, что некоторые читатели оценят, как этот подход избегает любых ссылок на тригонометрию или наименьшие квадраты. :-)