Страница 1 из 1

Интерполяция углов при варпинге

Добавлено: 14 апр 2015, 08:33
wowka1319
Нужно спроецировать растр в некоторую проекцию. Как это сделать я знаю.
Проблема в том, что каждый пиксель растра содержит значение угла [0, 360), и при интерполяции возникнут неверные значения в целевом геотифе.

Например, допустим значение пикселя целевого растра интерполируется исходя из значений двух пикселей исходного растра. Если их значения 359 и 1, то целевой пиксель будет равен ~180 (если веса равные), хотя должен быть равен 0, ибо это градусы.

Как решить эту проблему?

Re: Интерполяция углов при варпинге

Добавлено: 14 апр 2015, 11:50
gamm
wowka1319 писал(а):Как решить эту проблему?
как обычно:
1) берем синус, интерполируем -> dy
2) берем косинус, интерполируем ->dx
3) восстанавливаем угол как atan2(dy,dx)
4) если хочется поизвращаться с гладкостью, берем кватернионы (если умеем с ними работать).

Re: Интерполяция углов при варпинге

Добавлено: 15 апр 2015, 01:05
wowka1319
Вроде бы понял, но почему-то не выходит:

например у нас два угла для целевого пикселя:
187гр с весом 0.3 и 53гр с весом 0.7.
Итоговый пиксель будет равен 53 + (187-53)*0.3 = 93.2 градусов
Но по вашему алгоритму получается 76.7 градусов:

dy_1 = sin(187) = -0,12186934340514748111289391923153
dx_1 = cos(187) = -0,99254615164132203498006158933058
dy_2 = sin(53) = 0,79863551004729284628400080406894
dy_2 = cos(53) = 0,60181502315204827991797700044149

target_dy = dy_1 * 0.3 + dy_2 * 0.7 = 0,5224840540115607480649323870788
target_dx = dx_1 * 0.3 + dx_2 * 0.7 = 0,12350667071403718544856542350987

atan2(target_dy, target_dx) = 1.33867356501 радиан = 76.7 градусов

что не так?

Re: Интерполяция углов при варпинге

Добавлено: 15 апр 2015, 07:42
gamm
wowka1319 писал(а):что не так?
все так - при больших перепадах углов будет большая ошибка. Но обычно такие перепады (на 130 градусов, как у вас) в реальных данных отсутствуют, если не интерполировать что-то типа ориентации склонов.

P.S. а если у вас всего 2 значения, так и интерполируйте на круге, по малой дуге. Описанный метод используют, если данных много, и строится общий сплайн или подобное.

Re: Интерполяция углов при варпинге

Добавлено: 15 апр 2015, 08:46
wowka1319
Я просто использую gdalwarp, а он не умеет интерполировать по дуге - там просто нет такого функционала, чтобы указать, что данные это градусы.
Поэтому нужно сначала преобразовать растр углов в растр(ы) таких величин, чтобы после интерполяции gdalwarp-ом можно было получить углы обратно.
Ваш вариант с двумя растрами с sin и cos не плох и должен подойти для моей задачи (я интерполирую направления ветра).
Однако, хотелось бы использовать более точное решение. Буду рад если подскажите. А вообще, спасибо за ответ.