Перепроецирование растров по ключу СК с полиноминальным преобразованием

Тема в разделе "Программы для работы с растрами", создана пользователем X-Y-H, 21 мар 2021.

  1. X-Y-H

    X-Y-H Администратор Команда форума

    Коллеги добрый день!
    Подскажите программу которая может перепроецировать растровые данные из СК в СК по параметрам полиномиального преобразования, например полиномы 3-5 порядка.

    У меня кроме Трансформа ничего в голову не лезет....
     
  2. zvezdochiot

    zvezdochiot Форумчанин

    Почему порядок такой странный? Обычно либо конформное 1го порядка (т.е "плоскость"->"плоскость"), либо 3D Хельмерта. Но идея неплохая. Взять FreeImage (https://freeimage.sourceforge.io/ ), взять слайды @stout ( https://github.com/Geo-Linux-Calculations/geodesist.ru-attach/tree/main/threads/12174 ) и навять преобразователь с билинейной доводкой. Звучит достаточно просто.

    PS: Замечу. Так как без хотя бы билинейной интерполяции результирующее изображение будет "так себе", то для работы понадобятся параметры обратного преобразования. Это будет проблемой? Хотя по идее можно обойтись и только прямыми.

    PS2: А менее плохо, выложите ссылки на "параметры" и подразумеваемые формулы пересчёта. А то явное недопонимание намечается. Оптимальным вариантом конечно будут формулы со слайдов @stout , так как параметры будут приведены к центрам изображений.
     
    Последнее редактирование: 21 мар 2021
  3. X-Y-H

    X-Y-H Администратор Команда форума

    zvezdochiot, поищите здесь - есть программа по поиску ключа @stout с полиномами, вторая известная мне программа Транскор
    --- Сообщения объединены, 21 мар 2021, Оригинальное время сообщения: 21 мар 2021 ---
    поймете почему порядок такой странный - для полинома 3 порядка необходимо минимум 10 точек, для 5 - 21
     
  4. zvezdochiot

    zvezdochiot Форумчанин

    Хде здесь?! Здеся "Поиск..." совсем-совсем плохой! А на слайды @stout я сам ссылку выдал без всякого "поиска".

    Чо то я не понял! Вы хотите применить к изображению известные параметры или получить их с двух изображений? Недопонимание явно нарастает.
     
  5. X-Y-H

    X-Y-H Администратор Команда форума

    Применить известные параметры
     
    zvezdochiot нравится это.
  6. zvezdochiot

    zvezdochiot Форумчанин

    Так желательно подтверждение получить, что формулы именно те, что на слайдах.

    PS: Не смущает, что помимо параметров, нужно будет задавать координаты как минимум 2х углов исходного изображения и соотнешиние пиксель/метр для результирующего?
     
  7. zvezdochiot

    zvezdochiot Форумчанин

    Нашёл таки: 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-ой степени расхождения по дельтам наблюдаются. Так что хз чему верить ни на что смотреть!
     
  8. cr2

    cr2 Форумчанин

    QGIS ?
     
  9. zvezdochiot

    zvezdochiot Форумчанин

  10. Deleted member 51242

    Deleted member 51242 Только чтение

    Global Mapper (там есть возможность выбрать степень полинома при привязке растра)
     
  11. wolodya

    wolodya Форумчанин

    Я QGIS пользовался но 3-5 порядок надо очень много точек равномерно распределенных. Иначе могут быть большие искажения
    А вот интересно в фотоскане и меташейпе какие преобразования?
     
  12. andrew_klikunov

    andrew_klikunov Форумчанин

    В ArcGIS тоже есть, до 3 порядка вроде. Но есть и сплайн и подгонка...
     
  13. zvezdochiot

    zvezdochiot Форумчанин

    Не подскажешь, такие вот параметры:
    Код:
    -p 100,100,0.95,0.1
    
    в какую сторону крутить изображение должны? По часовой или против? А то у меня прям ступор какой то.
     
  14. ErnieBoyd

    ErnieBoyd Форумчанин

    Зачем нужны полиномы? Любая ГИС при сохранении растра из одной СК в другую просто интерполирует значение/цвет каждого пикселя. Или не понимаю чего-то в постановке задачи?

    Чаще всего использую gdalwarp в командной строке.
     
  15. stout

    stout Форумчанин

    Оффтоп

    Запустите программку с любым параметром. Появиться папка 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 программы, остальное – гуй.
     
    zvezdochiot нравится это.
  16. zvezdochiot

    zvezdochiot Форумчанин

    Оффтоп
    Да. Это я уже видел и делал. Спасибо.

    Интересует только, делается для этих параметров децентрализация или нет? По цифирям вроде как нет, но точно сказать можете только Вы.

    Под децентрализацией подразумевается переход от XY2=A*UV1 к XY2=B*XY1.

    PS: Я у себя ( https://github.com/Geo-Linux-Calculations/gnumeric-ols/ ) децентрализацию делаю. Но учитывая большие степени преобразования - это очень даже может стать проблемой. Для нормального результата нужен человек, разбирающийся в производных полиномах. Сам я для своих таблиц (1-4 степени) ковырялся в wxMaxima, вычленяя эти самые полиномы.
     
  1. Этот сайт использует файлы cookie. Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie.
    Скрыть объявление
  1. Этот сайт использует файлы cookie. Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie.
    Скрыть объявление