[О сайте.]    [Конференция.]    [Отчеты.]    [Галереи.]
[Наши авто.]    [Заброска-рыбалка.]    [Видео.]    [Статьи.]

Сшивка фрагментов карты в GlobalMapper.

  Расскажу, как соединить два куска карты в целое правильно.
  Правильно, когда куски соединяют не по пикселям, "на глаз", а с учетом свойств карты. Таких как датум и проекция. Мы будем соединять куски привязывая их не друг к другу, а к сетке координат. Смысл действий в выравнивании растра каждого куска карты под его родную проекцию и датум. Когда куски полностью выровнены и привязаны, они автоматически соединяются.
  Понадобятся программы:
- OziExplorer
- Photoshop
- MMAssist
- GlobalMapper не ниже версии 9.01
- Excel
- Word
  Итак, у меня есть два куска карты с именами P-36-080-CD_1.gif, P-36-080-CD_2.gif. Они в низком разрешении, бледные, нерезкие по краям.
  Открываем оба в Photoshop.
  Первое, на что надо обратить внимание - формат файлов GIF, это значит цвета индексированы (их точно не больше 256). В процессе работы карты будут крутиться, растягиваться, сжиматься. При этом, из-за ограниченности количества цветов, прямые линии станут рваными при повороте, буквы потеряют приятную глазу округлость. Это произойдет из-за нехватки цветов для сглаживания краев повернутых линий.
  Поэтому сразу переводим наши куски в многоцвет (пространство RGB).

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

  Увеличиваю контраст. Контраст должен быть разумным. При сильном контрасте могут исчезнуть слабые заливки. Обычно первым исчезает цвет "кусты-вырубки".

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

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

  Показано начало выделения. Тянем за верхний левый край пунктира.
  Обрезаем:

  Результат:

  Запомнили, кусок №1 будем накладывать на кусок №2
  Сохраняем изображения в TIF.

  Важно, обратите внимание: повышение разрешения и увеличение контраста, необязательные операции. Мало того, я впервые в своей практике столкнулся с необходимостью искусственно повысить разрешение. А вот сохранение в многоцветный TIF необходимо практически всегда.
  Создадим файлы привязки для OziExplorer, используя программу MMAssist. Эти привязки – предварительные. От них не требуется высокая точность. И в принципе их можно было сделать в GlobalMapper. Но в MMAssis быстрее и будут исключены ошибки от ручного ввода параметров карты и координат. Для упрощения кладем MMAssis.exe в папку с нашими кусками (прога не требует инсталяции).

  Теперь MMAssis.exe можно удалить, больше она не понадобится.
  Обращаю внимание, мы используем привязку 9 точками, так как у нас половинки карты, а MMAssis генерирует точки которые должны стоять так:

  Точки сгенерированы, но стоят не на месте. Нужные нам точки надо поставить на место, ненужные отключить. Открываем половинку, щелкая по MAP файлу, или так:

  Видим что программная синяя сетка никак не совпадает с нарисованной, т.е. карта не привязана

  Заходим в режим перепривязки

  И не забывая, какие по номеру точки, где должны стоять, ставим 4 точки по углам нашей половинки

  Не забываем снимать галочки напротив тех точек, которые не используем. В результате получаем:

Это для первой половинки. Для второй будет так:

  Синие точки – отключенные.
  Убеждаемся, что синяя сетка близка к нарисованной на карте.

  Итак мы готовы к работе в GlobalMapper.
Открываем первый кусок карты

  Другой путь: запустить GlobalMapper, далее File/Open Data. Обратите внимание, если в OZIExplorer мы открываем файл привязки (MAP), и по нему программа находит файл имиджа, то в GlobalMapper - наоборот.
  Сразу включаем километровую сетку

  Заходим в меню привязки

  Видим такую, непонятную картину

  Сначала смотрим вниз, там наши точки привязки в виде таблицы. Пройдем по одной строке, чтобы понять, где что:

  • - PixelX, PixelY координаты точки привязки в пикселях. Оси X,Y расположены, как учили в школе. Внимание это координаты на картинке!
  • - ProjectedX, ProjectedY координаты точки привязки в метрах, или по другому в метрах по километровой сетке. Внимание, это координаты по земле, т.е. геокоординаты.
  • - Longtitude, Latitude координаты точки привязки в градусной сетке. Это тоже геокоординаты.
  • - EROR ошибка (сдвиг) точки привязки относительно идеального по форме растра.
  Если два раза кликнуть на строке, точка привязки центрируется на экране. Ее параметры появятся в окнах выше. В этих окнах есть возможность вручную подкорректировать параметры. Мы этого делать не будем, информация для справки.
  Полюбопытствуем, какие параметры карты у нас установлены. Жмем "Select Projection"

  Параметры правильные. Их автоматически установила MMAssist. Без неё пришлось бы вводить в это окно вручную.
  Теперь об окнах. Слева мы видим наш имидж целиком, в среднем тот же имидж может масштабироваться. В обоих окнах увеличение делается выделением нужной зоны (левая кнопка зажата, обводим), уменьшение только в среднем окне, правой кнопкой. В среднем окне картинку можно двигать стрелочками, которые появляются, когда маркер у края окна.
  Внимание, термин имидж (картинка, растр) подразумевает, что у него есть только пиксельные координаты!   В правом окне находится опорное изображение. Т.к. мы загрузили один имидж, то видим вроде то же что в среднем окне. Но в правом окне изображение не в пикселях а в геокоординатах!

Создание точек привязки.

Вариант 1

  Находим в среднем окне узел километровой сетки, тыкаем точно середину, в верхних окнах появляются пиксельные координаты точки. Находим геокоординаты этого узла по надписям на полях карты (6534000, 6842000) и вводим их вручную в соответствующие окна. Жмем "Add GCP to List". В списке точек появилась новая точка "Point 5" в ней пиксельные и геокоординаты узла сетки связаны.

  Понятно, что способ трудозатратный и чреват ошибками. Зато четко отражает смысл работы по привязке.

Вариант 2

  Тот же узел. В среднем окне ставим точку. В правом окне находим соответствующий узел геосетки. Вводим геокоординаты, ставя в него точку. Чтобы получить правильные, "круглые" цифры, надо ткнуть очень точно. Но дело в том, что совсем точные цифры не нужны. Учитывая разрешение карты порядка 4м/пикс, вполне допустима ошибка того же порядка.
  Жмем "Add GCP to List". Узлы связаны.

  Теперь работа пошла быстрей.
  В идеале описанную процедуру надо повторить для каждого узла километровой сетки. Затем удалить четыре точки установленные в первоначальной привязке, т.к. они слишком грубые (Выделить строку, "Delete"). Если надо подвинуть пиксельную координату точки, двойной клик на строку, точка центрируется на экране, щелкаем в новое место, "Update Selected GCP".
  Сохраняем точки привязки

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

OK

  Конечно, все равно работа долгая, на этой половинке карты около 250 узлов километровой сетки. Если скан приличного качества, рекомендую поставить точки привязки по периметру куска, потом посмотреть на результат, если осталась нестыковка в середине куска, убрать её локальными точками привязки.
  Описанную процедуру повторяем для второго куска карты. Если у вас слабенький компьютер, изображение первого куска предварительно выгружаем (закрываем), если комп тянет, можно работать сразу с двумя (и более) кускам. Если работаем со вторым куском отдельно, то после его привязки, загружаем первый кусок, загружаем его сохраненные точки привязки, не забываем удалить предварительные точки, "OK".

  Теперь у нас на экране оба куска карты. Относительное положение кусков выбирается так

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

  Выводим исправленное изображение

  Сохраняем с именем готовой карты P-36-080-CD. Формат GEOTIFF тот же TIF, только с привязкой внутри.
  Внимание: если редактировать, пересохранять такой файл в графических редакторах, внутренняя привязка исчезнет.

  Поэтому перво-наперво создаем привязку для OZIExplorer.

  Выбираем P-36-080-CD. MAP файл

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

OK
Карта открывается. Включаем сетку:

Получаем:

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

  Соглашаемся, сохраняем в нашу рабочую папку. Эту папку мы некоторое время будем хранить. Вдруг придется что-то переделать.

  Остался последний шаг, устанавливаем бордеры (ограничители). Они нужны для того чтобы OZIExplorer и родные ему программы типа "Map Merge Utility for OziExplorer", понимали где находится граница изображения. Переходя такую границу, программы будут искать и подгружать другие карты. При сшивке нескольких карт именно по этой границе будут убраны ненужные поля. Так что рекомендую поставить бордеры максимально точно.

Жмем на кнопку с красным уголком

Двигаем уголок примерно на место

И так для всех углов
Сохраняем
Увеличиваем масштаб до предельного

Снова в меню перепривязки. Ставим уголки точно

Сохраняем.
Все карта готова.

Повышение производительности труда

  Оба описанных ниже способа сводятся к предварительной генерации точек привязки, лежащих в узлах геосетки. Т.к. узлы геосетки находятся не очень далеко от нарисованной на имидже, остается только немного их подвинуть. Так работать существенно быстрей и имеется меньше поводов для ошибок.
  Я не программист и слабенько знаю математику, задачу решил в Excel. Конечно, это не очень удобно. Буду весьма благодарен, если кто-то может решить такую задачу для четырехточечной привязки, и (или) создаст готовую программу.

Вариант 1

  Основан на том, что геосетка имеет вполне конкретный шаг. Для 500м/км шаг равен 1 км. Поэтому если поставить точки привязки грубо, а потом округлить геокоординаты до километра, мы получим точные значений геокоординат узлов.
  Итак, мы в окне привязки GlobalMapper. Ставим одинаковый масштаб в среднем и правом окнах. Для этого выделяем в каждом одни и те же три-четыре квадрата сетки.
  Ставим грубо, как можем попасть, точки по всему видимому полю. Обращаю внимание: в среднее окно надо тыкать поточней, т.к. расстояние от точки до узла ограничивает увеличение при дальнейшей работе. В правом окне достаточно поставить точку ближе к нужному месту, чем к соседним узлам. После заполнения видимого поля точками, двигаем изображения в обоих окнах одинаково и вновь заполняем пространство точками привязки.
  Сохраняем точки привязки в файл. Открываем его блокнотом

  Здесь видны (слева-направо) две пиксельные координаты, две геокоординаты, имя точки.
Разделители данных - запятые, десятичные разделители - точки.
Мы будем считать в Excel, причем в русской настройке. Для русского Excel надо чтобы разделителем данных был пробел, а десятичным разделителем запятые.
Копируем текстовые данные, вставляем их в Excel

Данные вставились в один столбец

Разделяем данные по столбцам, признак-запятая

  Жмем Готово. Данные разделились. Выделяем все столбцы с данными, жмем "правка"

меняем точки на запятые, "заменить все"
  В ячейках справа первой строки (F, G, H, I, J) пишем формулы, по порядку ячеек:
=ОКРУГЛ(A1;0), =ОКРУГЛ(B1;0), =ОКРУГЛ(C1/1000;0)*1000, =ОКРУГЛ(D1/1000;0)*1000, =E1
Теперь выделяем и протягиваем строку с формулами, получилось

  Здесь красные цифры те же данные, только пиксельные координаты округлены до целого, геокоординаты округлены до километра. Создаем в рабочей папке текстовый файл, Копируем данные красного цвета из Excel, вставляем в тестовый файл, сохраняем. Excel файл тоже сохраняем. Если Excel не закрывать, то следующие новые данные разложатся по столбцам сами. Но точки на запятые менять все равно придется.
  Теперь наша проблема в том, что данные в текстовом файле имеют неправильные разделители. Для приведения файла к нужному виду, сделаем замены, используя Word. Т.к. эти замены одинаковы для разных карт, достаточно сделать один раз, записывая Макрос. Для следующих замен мы просто запустим этот Макрос и сразу получим результат.

  Открываем текстовый файл Word-ом. Включаем запись макроса

Жмем Правка/Заменить/Больше. Заменяем

Записываем Макрос.
Результат:

  Т.е. то, что надо. Осталось дать текстовому файлу понятное имя, чтоб ничего не перепутать. В дальнейшем для такой трансформации текста, достаточно нажать Сервис/макросы/выбрать макрос/выполнить.
  Вышеописанный путь кажется сложным. Однако на третий раз все эти процедуры займут пару минут. При количестве точек привязки порядка сотни, такой путь предпочтительнее ручной работы.

Открываем файл карты в GlobalMapper. Заходим в меню привязки, Открываем файл точек созданный выше. Устанавливаем удобный масштаб в среднем окне, в правом окне надо выбрать масштаб погрубее, чтобы видеть пошире. Сразу удаляем предварительные точки привязки. Два раза щелкаем по строке точки, точка центрируется, ставим её куда надо, жмем Alt,R точка закреплена. Жмем Alt,Z центрируется следующая точка и т.д. Шаг назад по списку делается кнопками Alt,Q

Вариант 2

  Смысл его в том, что в Exel созданы формулы, которые по двум точкам привязки генерируют полный список точек для пространства определенного этими двумя точками привязки.
  Почему по двум точкам? Потому что мне не хватает знания математики для написания генератора под четыре точки. Ограничение "двух точек" позволяет получить мало сдвинутую сетку только для правильно повернутого изображения (километровая сетка должна быть параллельно XY).
  Поэтому карту, привязанную по четырем точкам, открываем в GlobalMapper и сразу экспортируем в GEOTIFF. Это новое изображение повернуто правильно. Теперь открываем его в GlobalMapper, заходим в меню привязки и сохраняем его две точки привязки в файл. Для сужения площади сгенерированных точек, можно поставить еще пару точек в других местах (просто в одинаковые пиксели изображения), старые удалить и сохранить в файл новые. Это имеет смысл при больших полях карты. Ведь ненужные точки придется удалять вручную каждую!
  Затем эту пару точек нужно, аналогично предыдущему примеру, скопировать в Excel "генератор точек", и он сгенерирует предварительные точки привязки для каждого узла геосетки.
  "Танцы" с заменой запятых и др. те же что в предыдущем примере.
  Формулы в Excel "генераторе точек" достаточно сложные, поэтому описывать их не буду, проще прислать файл.
  При сшивке предварительно повернутых изображений есть одна особенность. У них от поворота появятся поля. Поля в GlobalMapper по умолчанию имеют нежно желтый цвет. Поэтому перед окончательным экспортом необходимо сделать этот цвет прозрачным, по крайней мере, для карты, которая сверху

  В заключение немного о правке чужих, неправильно сшитых карт.
Такие карты попадаются двух видов.
Первые – на глаз все нормально, стыки не видны, но OZI сетка ложиться криво. Эти карты скорей всего результат сшивки по пикселям в программах типа PanaVue Image Assembler.
Такую карту надо просто открыть в GlobalMapper и привязать по каждому узлу километровой сетки.

  Второй тип, когда сетка визуально не стыкуется на границе фрагментов. Эти карты - результат дилетантской сшивки в Фотошоп. С ними труднее. К тому же хочется не только прилично привязать, но и убрать мозолящие глаз нестыковки сетки. Единственный путь - разобрать карту на части и склеить заново. Разобрать трудно, т.к. границы сшивки обычно не ортогональны и вообще могут иметь замысловатую форму.
  Я делаю так:
В Фотошоп, инструментом Polygonal Lasso выделяю один из фрагментов, потом инвертирую выделение (Select / Inverse). Закрашиваю выделенную область в цвет, которого нет на карте. Обычно это чисто красный (RGB 255;0;0), потом повторяю процедуру, сохраняя в отдельные файлы картинки, где один фрагмент оставлен нетронутым, остальные окрашены. Т.о. получаю 2; 3; 4 файла совершенно одинакового размера, но разных названий. Беру OZI привязку начального имиджа, меняю в ней внутренние ссылки на вновь созданные файлы и сохраняю с соответствующими этим файлам именами. Имеем (на примере 4-х частей) 4 файла имиджа и четыре Map файла. Все файлы привязки содержат одинаковую привязку, все файлы имиджа одинаковы по размеру.
  Открываем все четыре файла в GlobalMapper, привязываем каждый отдельно, потом делаем красный прозрачным для каждого фрагмента. Готово.
  Единственный недостаток такого метода: при вращении фрагментов, на границе красного создаются оттенки красного, которые не становятся прозрачными. Т.е. остается тонкая красноватая линия на границе сшивки. Ее убираю вручную.

Новиков Сергей
17.06.2008

Вспомогательные файлы.

Генератор.
Округлитель.


[О сайте.]    [Конференция.]    [Отчеты.]    [Галереи.]
[Наши авто.]    [Заброска-рыбалка.]    [Видео.]    [Статьи.]