Коллеги добрый день! Подскажите программу которая может перепроецировать растровые данные из СК в СК по параметрам полиномиального преобразования, например полиномы 3-5 порядка. У меня кроме Трансформа ничего в голову не лезет....
Почему порядок такой странный? Обычно либо конформное 1го порядка (т.е "плоскость"->"плоскость"), либо 3D Хельмерта. Но идея неплохая. Взять FreeImage (https://freeimage.sourceforge.io/ ), взять слайды @stout ( https://github.com/Geo-Linux-Calculations/geodesist.ru-attach/tree/main/threads/12174 ) и навять преобразователь с билинейной доводкой. Звучит достаточно просто. PS: Замечу. Так как без хотя бы билинейной интерполяции результирующее изображение будет "так себе", то для работы понадобятся параметры обратного преобразования. Это будет проблемой? Хотя по идее можно обойтись и только прямыми. PS2: А менее плохо, выложите ссылки на "параметры" и подразумеваемые формулы пересчёта. А то явное недопонимание намечается. Оптимальным вариантом конечно будут формулы со слайдов @stout , так как параметры будут приведены к центрам изображений.
zvezdochiot, поищите здесь - есть программа по поиску ключа @stout с полиномами, вторая известная мне программа Транскор --- Сообщения объединены, 21 мар 2021, Оригинальное время сообщения: 21 мар 2021 --- поймете почему порядок такой странный - для полинома 3 порядка необходимо минимум 10 точек, для 5 - 21
Хде здесь?! Здеся "Поиск..." совсем-совсем плохой! А на слайды @stout я сам ссылку выдал без всякого "поиска". Чо то я не понял! Вы хотите применить к изображению известные параметры или получить их с двух изображений? Недопонимание явно нарастает.
Так желательно подтверждение получить, что формулы именно те, что на слайдах. PS: Не смущает, что помимо параметров, нужно будет задавать координаты как минимум 2х углов исходного изображения и соотнешиние пиксель/метр для результирующего?
Нашёл таки: https://geodesist.ru/resources/cplanelite-programma-pereschjota-koordinat-po-obschim-tochkam.147/ . Только она параметры не отдаёт! Да и с моими таблицами ( https://github.com/Geo-Linux-Calculations/gnumeric-ols/tree/master/spreadsheets/conformaltrans ) уже на 2-ой степени расхождения по дельтам наблюдаются. Так что хз чему верить ни на что смотреть!
Как в QGIS сетку "выпрямлять" знаю ( https://geodesist.ru/threads/sko-orientirovanija-po-karte.85251/page-2#post-968853 ). А как параметры координатного преобразования не очень, совсем не очень. Не подскажешь? Или надо @ErnieBoyd кастовать?
Я QGIS пользовался но 3-5 порядок надо очень много точек равномерно распределенных. Иначе могут быть большие искажения А вот интересно в фотоскане и меташейпе какие преобразования?
Не подскажешь, такие вот параметры: Код: -p 100,100,0.95,0.1 в какую сторону крутить изображение должны? По часовой или против? А то у меня прям ступор какой то.
Зачем нужны полиномы? Любая ГИС при сохранении растра из одной СК в другую просто интерполирует значение/цвет каждого пикселя. Или не понимаю чего-то в постановке задачи? Чаще всего использую gdalwarp в командной строке.
Оффтоп (Move your mouse to the spoiler area to reveal the content) Запустите программку с любым параметром. Появиться папка DEBUG с параметрами типа Код: FORMULA: ================================================== I^2 = -1; Zout = (Xout+I*Yout); Z = [(X+I*Y)-(XSo+I*YSo)]*scale; G[k] = (C[2*k+1]+I*C[2*k+2]); Zout = sum(G[k]*Z^k,k=0..Degree)/scale + (XTo+I*YTo) CODE: ===================================================== U := (X - XSo)*scale; V := (Y - YSo)*scale; P[0] := 1; Q[0] := 0; P[1] := U; Q[1] := V; for j := 2 to Degree do begin P[j] := U*P[j - 1] - V*Q[j - 1]; Q[j] := U*Q[j - 1] + V*P[j - 1]; end; Xout := 0; Yout := 0; for k := Degree downto 0 do begin Xout := Xout + (C[2*k + 1]*P[k] - C[2*k + 2]*Q[k]); Yout := Yout + (C[2*k + 1]*Q[k] + C[2*k + 2]*P[k]); end; Xout := Xout/scale + XTo; Yout := Yout/scale + YTo; =========================================================== XSo = 6 214 276.706260000 YSo = 281 891.327550000 XTo = 6 209 000.000000000 YTo = 656 000.000000000 scale = 9.22752555962756E-005 CurrentOrder = 3 C[ 1] = -4.96919330745076E-011 C[ 2] = -4.09917720205858E-010 C[ 3] = 9.95547868640085E-001 C[ 4] = -8.66805993391449E-002 C[ 5] = -6.09153980342143E-006 C[ 6] = -4.92515001753110E-005 C[ 7] = 5.66440042646683E-009 C[ 8] = 4.13513595379127E-008 Для конформного преобразования первые два коэффициента теоретически должны равняться нулю. По хорошему их на следующем этапе нужно было не включать в неизвестные. Но исходники вместе с другим содержимым HDD отправились на силиконовые облака в места вечной охоты за битом чётности, а восстанавливать лень, т.к. сам алгоритм занимает процентов 20 программы, остальное – гуй.
Оффтоп (Move your mouse to the spoiler area to reveal the content) Да. Это я уже видел и делал. Спасибо. Интересует только, делается для этих параметров децентрализация или нет? По цифирям вроде как нет, но точно сказать можете только Вы. Под децентрализацией подразумевается переход от XY2=A*UV1 к XY2=B*XY1. PS: Я у себя ( https://github.com/Geo-Linux-Calculations/gnumeric-ols/ ) децентрализацию делаю. Но учитывая большие степени преобразования - это очень даже может стать проблемой. Для нормального результата нужен человек, разбирающийся в производных полиномах. Сам я для своих таблиц (1-4 степени) ковырялся в wxMaxima, вычленяя эти самые полиномы.