Билинейная интерполяция

Ответить
Аватара пользователя
Svility
Участник
Сообщения: 55
Зарегистрирован: 24 окт 2017, 19:41
Репутация: 5
Откуда: 32637

Билинейная интерполяция

Сообщение Svility » 28 янв 2020, 22:51

Добрый день.
Есть ли уже реализованный алгоритм билинейной интерполяции на Postgre/Postgis?
Собственно необходим алгоритм, который вернет высотную отметку с растра (загруженного в PG) по входным данным - X,Y.
Алгоритм: https://ru.wikipedia.org/wiki/Билинейная_интерполяция
Спойлер
ST_Value(rastr, geom) - отбирает высоты по методу "ближайший сосед" - быстро, но не точно (целые значения).

Аватара пользователя
oldbay
Участник
Сообщения: 53
Зарегистрирован: 14 июл 2015, 11:46
Репутация: 19
Откуда: Санкт-Петербург
Контактная информация:

Re: Билинейная интерполяция

Сообщение oldbay » 01 фев 2020, 14:35

Посмотрите в сторону SAGA GIS http://www.saga-gis.org
В качестве источника там можно использовать postgis - а в инструментах посмотрите на "Shapes" -> "Grid Tools"

Аватара пользователя
Svility
Участник
Сообщения: 55
Зарегистрирован: 24 окт 2017, 19:41
Репутация: 5
Откуда: 32637

Re: Билинейная интерполяция

Сообщение Svility » 19 фев 2020, 22:42

Модуль rasterinterpolation выполняет билинейную и бикубическую интерполяцию... А вот как бы функцию описать на pg?

Аватара пользователя
antonv
Активный участник
Сообщения: 229
Зарегистрирован: 29 ноя 2016, 10:44
Репутация: 114
Откуда: Санкт-Петербург

Re: Билинейная интерполяция

Сообщение antonv » 20 фев 2020, 11:57

Svility, для билинейной интерполяции нужны значения четырёх пикселей, верно? Функция ST_Value умеет не только по координатам точки возвращать значение, но и по номеру столбца и строки ячейки в растре. Верните себе четыре значения вокруг точки и проинтерполируйте сами формулой из Википедии:)

MBG
Активный участник
Сообщения: 123
Зарегистрирован: 02 июн 2012, 12:02
Репутация: 35

Re: Билинейная интерполяция

Сообщение MBG » 14 мар 2020, 21:10

См. https://postgis.net/docs/RT_ST_Resample.html - интерполирует целый растр, в том числе билинейная интерполяция поддерживается. Если определить новый растр из одной точки, получите требуемое.

Аватара пользователя
Svility
Участник
Сообщения: 55
Зарегистрирован: 24 окт 2017, 19:41
Репутация: 5
Откуда: 32637

Re: Билинейная интерполяция

Сообщение Svility » 18 июн 2020, 22:51

antonv писал(а):
20 фев 2020, 11:57
Svility, для билинейной интерполяции нужны значения четырёх пикселей, верно? Функция ST_Value умеет не только по координатам точки возвращать значение, но и по номеру столбца и строки ячейки в растре. Верните себе четыре значения вокруг точки и проинтерполируйте сами формулой из Википедии:)
А нет справки никакой или примера. Теория стала понятной, но с реализацией беда.

Аватара пользователя
Svility
Участник
Сообщения: 55
Зарегистрирован: 24 окт 2017, 19:41
Репутация: 5
Откуда: 32637

Re: Билинейная интерполяция

Сообщение Svility » 28 фев 2021, 20:59

Ну вот определяю я границы пикселя, вокруг искомой точки, но что то не пойму что дальше нужно сделать.. как то пиксель изменить или с границами пикселя какую то операцию провести нужно...
Кто подскажет в каком направлении дальше двигаться?

Код: Выделить всё

SELECT rid, ST_AsText(ST_Envelope(rast)) As geom, ST_Value(rast, ST_SetSRID(ST_POINT(40.074284, 44.702956),4326)) As z, '219.061719108487' z_RI /*эталон*/
FROM dem b
where ST_Intersects(ST_SetSRID(ST_POINT(40.074284, 44.702956),4326), b.rast)
Снимок экрана (60).png
Снимок экрана (60).png (12.93 КБ) 6991 просмотр

Ответить

Вернуться в «PostGIS/PostgreSQL»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 5 гостей