Геопривязка

Геопривязка по опорным точкам используется для создания карты из снимка, добавления в него геопроекции и исправления искажений, полученных при съемке. После завершения геопривязки можно для каждого пикселя файла вычислить его географические координаты (и наоборот).

После геопривязки можно объединять несколько файлов в одну карту с помощью мозаики (не поддерживается в текущей версии).

Для геопривязки по опорным точкам нужно два документа: привязываемый — снимок, к которому применяется преобразование; референсный — карта с геопроекцией, которая берется за основу. Результат геопривязки имеет ту же проекцию, что и референсный документ. Привязываемый документ должен быть растром или изображением (если выбран растр, то геопривязка будет применяться к изображению по этому растру, а не к целому растру). Референсный документ может иметь любой тип.

Если нужно сделать геопривязку нескольких снимков для последующего составления мозаики или другой совместной обработки, то необходимо использовать один и тот же референсный снимок, либо референсные снимки с одинаковой проекцией.

В программе поддерживается два режима геопривязки:

  • Полиномиальный — классический метод, при котором ищется двумерное полиномиальное преобразование, которое наилучшим образом переводит опорные точки на снимке в их прообразы на референсном файле.
  • Экспериментальный — метод, применимый для привязки треков, полученных путем аэросъемки. Сейчас находится в разработке.

Далее описывается только полиномиальный метод.

Для успешной геопривязки необходимо не менее (t+1)\cdot(t+2) пар точек, где t — порядок используемого полиномиального преобразования. Если добавить больше точек, расчет преобразования производится с учетом всех введенных точек, ошибка минимизируется по методу наименьших квадратов.

Использование интерфейса

Начало и возобновление

Чтобы начать геопривязку, откройте в разных окнах просмотра привязываемый и референсный документы. Затем в контекстном меню привязываемого растра или изображения выберите пункт Начать геопривязку и укажите в появившемся окне окно с референсным документом.

Чтобы возобновить сохраненную ранее процедуру геопривязки, откройте в разных окнах просмотра привязываемый и референсный документы. Затем в контекстном меню результата геопривязки выберите пункт Возобновить геопривязку и проверьте в появившемся окне автоматически определенные установки окон. При возобновлении геопривязки окна с проекцией, не соответствующей исходному референсному или привязываемому документам, исключаются из списков окон.

Выбранные окна просмотра будут отображены в окне программы рядом. Заголовки окон установятся в соответствии с их ролью. Появится окно геопривязки.

При перезапуске программы состояние интерфейса геопривязки сохраняется.

При закрытии окна геопривязки процесс геопривязки завершается без сохранения результатов. Опорные точки удаляются из окон просмотра. Примененные изменения остаются в проекте.

Если привязываемый документ уже имеет проекцию (например, полученную из данных GPS или фотограмметрии), причем проекции привязываемого и референсного документов поддерживают преобразование в широту и долготу, то при запуске геопривязки будут автоматически добавлены 4 опорные точки по углам снимка на основе этих данных. Если эти опорные точки окажутся за пределами референсного документа, то они будут удалены, а программа выдаст предупреждение.

Установка точек

Чтобы добавить опорную точку, сделайте щелчок средней кнопкой мыши в нужном месте изображения. Созданной точке будет присвоен порядковый номер. Координаты точки появятся в таблице точек. По умолчанию точка добавляется в последнюю строку таблицы, а если в последней строке уже заняты соответствующие ячейки, то создается новая строка. Таким образом, если добавлять точки в окна по очереди и в таблице нет выделенных ячеек, то они будут группироваться в пары. Если в таблице выделена ячейка, программа попытается добавить новую точку в нее.

Пользователь может перетаскивать точку с помощью мыши, как обычную область интереса. Для точной установки точек рекомендуется использовать специальное масштабирование кнопкой Z (см. Окно просмотра). Также можно редактировать координаты точки в таблице. Единицы измерения координат соответствуют единицам, которые указываются в параметрах соответствующего окна просмотра и используются для отображения координат точки при наведении мыши.

При выделении ячеек в таблице соответствующие точки выделяются и центрируются в окнах просмотра. Точка считается выделенной, если в таблице выделена ее X- или Y-координата. Чтобы выделить пару точек, можно щелкнуть по надписи «GCP x» в левой части таблицы. Чтобы удалить одну или несколько точек, выделите их в таблице и нажмите кнопку Delete на клавиатуре, либо кнопку Удалить выделенные точки в окне геопривязки. Чтобы добавить точку в пустое место таблицы, выделите пустую X- или Y-ячейку, а затем добавьте точку в нужное место щелчком средней кнопки мыши по соответствующему окну просмотра.

Предсказание точек: если указано достаточно точек, то при добавлении новой точки на другом документе автоматически добавляется парная ей точка. Положение этой точки рассчитывается автоматически на основе текущего преобразования. Пользователь может изменить положение этой точки, как обычно. Предсказание точек работает, только если включена галочка Предсказание точек в окне геопривязки.

Ошибки привязки

Ошибка привязки — это расстояние между опорной точкой на референсном документе и вычисленным положением на референсном документе образа парной точки, заданной на привязываемом документе. Это расстояние выражено в единицах проекции референсного документа.

Ошибка привязки отображается в правом столбце таблицы. Ошибка отображается только для строк, в которых указаны обе точки (если одна из точек не указана, то такая строка не используется при вычислении преобразования). Если преобразование не построено, значения ошибок исчезают. Преобразование автоматически обновляется после изменения точек.

Пространственное разрешение

Количество пикселей в геопривязанном изображении обратно пропорционально разрешению. Пользователь может установить значение разрешения в окне геопривязки. Если разрешение не указано (оба поля пустые), то при применении геопривязки будет автоматически использовано разрешение текущего растра референсного окна. Если пиксели в результате геопривязки слишком крупные, уменьшите разрешение, и наоборот. Однако если поставить слишком маленькое разрешение, то результат получится очень большой и его вычисление займет много времени, поэтому изменять разрешение нужно с осторожностью. Если поставить слишком большое разрешение, то результат получится слишком маленький и его нельзя будет увидеть в окне просмотра.

Ограничение размера

Размер результата геопривязки может меняться непредсказуемо, особенно при работе с преобразованиями порядка выше 2. Если преобразование получилось растянутым, результат будет слишком большим и замедлит работу программы. Чтобы этого не случалось, укажите положительное значение в поле Ограничение размера. Если высота или ширина результата превышает указанное значение, процедура расчета будет прервана с соответствующим сообщением. После этого рекомендуется скорректировать положение точек и попробовать снова. Нулевое значение в этом поле означает отсутствие ограничения.

Ограничение расчета видимой областью

Если включена галочка Вычислять только видимую область, будет вычисляться только фрагмент результата геопривязки, видимый в референсном окне. Это может ускорить обновление результата, что может быть полезно при проверке локальных изменений точек. Перед завершением геопривязки рекомендуется снять галочку и применить преобразование снова, чтобы вычислить полный результат.

Применение геопривязки

Чтобы применить геопривязку, нажмите кнопку Применить. После выполнения процедуры ее результат будет добавлен в референсное окно просмотра. Для него автоматически включается панель шторки. В дереве проекта отображается процедура построения изображения и процедура применения преобразования к этому изображению. При последующем применении геопривязки эта процедура редактируется, новых процедур не создается. Если геопривязка была возобновлена, то при применении геопривязки также будет редактироваться одна и та же процедура. При закрытии окна геопривязки созданная процедура не удаляется.

Результатом геопривязки является блок трансформации, который используется в процедуре применения трансформации, а также может быть автоматически применен к любому блоку с соответствующей проекцией. См. Применение трансформации. Блок трансформации не отображается в дереве, но может быть виден в качестве параметра процедуры применения преобразования.

Отмена действий

Пользователь может отменить изменения точек (включая создание, перемещение, удаление) с помощью кнопки Отменить в окне геопривязки. Доступно не более 10 шагов отмены. Если после отмены пользователь не редактировал точки, то отмену можно отменить с помощью кнопки Вернуть. При перезапуске программы или при закрытии окна геопривязки история редактирования точек не сохраняется.

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

Описание преобразования

В параметрах процедуры хранятся порядок преобразования, определение проекции референсного и привязываемого документов, а также набор опорных точек.

Используемое полиномиальное преобразование задается формулами:

(1)\begin{cases}
  x_{ref} = \sum_{p=0}^t \sum_{q=0}^p a_i x_{src}^{p-q} y_{src}^q
\\
  y_{ref} = \sum_{p=0}^t \sum_{q=0}^p b_i x_{src}^{p-q} y_{src}^q
\end{cases}

i=p^2+p+q

Нахождение преобразования методом наименьших квадратов

Для нахождения преобразования достаточно найти a_k и b_k. Они находятся из следующих линейных систем:

M_{ij} \times a_i = c_j

M_{ij} \times b_i = d_j

i=[1..m], j=[1..n], где n — количество заданных опорных точек, m=(t+1)(t+2)/2 — количество коэффициентов a (или b), t — порядок преобразования. c_j и d_j — координаты соответственно по x и y опорных точек на reference. Каждый элемент матрицы M_{ij} находится как сумма

M_{ij} = \sum_{\substack{
0<=p<=t \\
0<=q<=p \\
p^2+p+q=i
}} x_j^{p-q} y_j^q

, где x_j и y_j — координаты соответственно по x и y опорных точек на source.

Если пользователь задал больше опорных точек, чем необходимо, используется метод наименьших квадратов. Выразим ошибку j-й точки:

XR_j=\sum_{i=1}^m M_{ij} a_i - c_j

YR_j=\sum_{i=1}^m M_{ij} b_i - d_j

E = \sum_{j=1}^n (XR_j^2+YR_j^2)

E — величина, пропорциональная общей ошибке. Чтобы минимизировать ее, найдем и приравняем к нулю ее частные производные:

\frac{\partial(XR_j)}{\partial a_k} = M_{kj}

\frac{\partial(XR_j^2)}{\partial a_k} = 2 M_{kj} ( \sum_{i=1}^m M_{ij} a_i - c_j )

\frac{\partial E}{\partial a_k} =
              \sum_{j=1}^n 2 M_{kj} ( \sum_{i=1}^m M_{ij} a_i - c_j ) = 0

\sum_{j=1}^n M_{kj} \sum_{i=1}^m M_{ij} a_i = \sum_{j=1}^n M_{kj} c_j

Получаем линейную систему из m уравнений с m неизвестными:

P_{ik} a_i = Q_k

Члены матрицы P и столбца Q:

P_{ik} = \sum_{j=1}^n M_{kj} M_{ij}

Q_k = \sum_{j=1}^n M_{kj} c_j

Решаем эту систему программно, получаем коэффициенты a. Коэффиенты b получаем из аналогичной системы (вместо c_j подставляем d_j).

Расчет ошибок для точек

После нахождения преобразования нужно оценить ошибку RMS для каждой точки. Для этого подставляем введенные пользователем координаты точки на source (x_{src} и y_{src}) в уравнения (1) и вычисляем ошибку по формуле

E_j = \sqrt{ (x_{ref}-x_{inp})^2+(y_{ref}-y_{inp})^2 }

, где x_{inp} и y_{inp} — введенные пользователем координаты точки на reference. Общая ошибка RMS вычисляется по формуле

E = \sqrt{ \frac{1}{n} \sum_{j=1}^n E_j^2 }

Предсказание точек

При вводе новой точки производится предсказание положения точки на другом документе (GCP prediction), если для этого достаточно данных. Если точка введена на source документе, подставляем x_{src} и y_{src} в уравнения (1) и отмечаем полученные значения x_{ref} и y_{ref} на reference.

Если точка введена на reference документе, то происходит поиск такого пикселя на source, что преобразование переводит его в точку, наиболее близкую к указанной.

Растеризация

На первом этапе преобразование применяется к каждому пикселю source, а затем находится прямоугольник, описывающий все полученные точки. Попутно вычисляется статистика расстояний между соседними по вертикали или горизонтали парами пикселей в единицах проекции. На основе этой статистики определяется максимально допустимое расстояние между пикселями в единицах проекции, равное среднему расстоянию + 3 стандартных отклонения.

В случае, если разрешение результата не задано, оно определяется автоматически на основе предполагаемого размера результата в пикселях. Затем на основе описывающего прямоугольника (в единицах проекции) и разрешения определяется размер результата в пикселях и координаты каждого пикселя.

На втором этапе для каждого пикселя результата происходит поиск такого пикселя на source, что преобразование переводит его в точку, наиболее близкую к координате пикселя. Если достигнутое расстояние превышает максимально допустимое, считается, что точка находится за пределами снимка, и пиксель становится прозрачным. Иначе используется значение в найденном пикселе.