Я участвовал в нескольких проектах по созданию бесшовных мозаик изображений. Есть несколько других факторов, которые вы могли бы рассмотреть:
Flatfielding. Сделайте снимок белой карточки с помощью объектива и настройки освещения, а затем используйте ее, чтобы сгладить яркость изображения. Я не знаю, есть ли у GM что-то для этого, @ fmw42 будет знать. Изображение с ровным полем зависит от настроек освещения, диафрагмы объектива, фокуса и масштаба, поэтому после съемки необходимо заблокировать фокусировку / диафрагму / увеличение. Вам нужно будет сделать эту коррекцию в линейном свете.
Искажение линзы. Некоторые объективы, особенно широкоугольные, вносят значительные геометрические искажения. Сделайте снимок листа миллиметровки и убедитесь, что все линии параллельны. Можно использовать снимок из миллиметровки для автоматической генерации модели объектива, которую можно использовать для устранения геометрических ошибок, но проще выбрать объектив с низким уровнем искажений.
Scatter. Вы перемещаете объект или камеру? Освещение движется тоже? У вас могут возникнуть проблемы с рассеиванием, если вы смещаете объект: яркие части объекта рассеивают свет в темных областях, когда они движутся под действием света. Вам нужно смоделировать и удалить это, или вы увидите швы в темных областях.
Rotation. Вы можете получить небольшое количество вращения, в зависимости от того, как работает ваш этап перевода и насколько тщательно вы настроили камеру. Вы также можете изменить фокусировку по полю. Возможно, вам также придется исправить это.
libvips имеет пакет функций для создания бесшовных мозаик изображений, включая все вышеперечисленные функции. Я сделал для вас пример: с этими исходными изображениями (вблизи ИК-изображений рисунка с подрисовкой):
Ввод:
$ vips mosaic cd1.1.jpg cd1.2.jpg join.jpg horizontal 531 0 100 0
Создает горизонтальное соединение с файлом join.jpg
. Числа дают предполагаемое перекрытие в 100 пикселей - программа-мозаика выполнит поиск и найдет для вас точную позицию. Затем он выполняет соединение с перьями, используя приподнятый косинус, чтобы сделать:
Несмотря на то, что изображения были плоскими, вы можете увидеть соединение. Это связано с тем, что чувствительность камеры изменилась при перемещении объекта. Операция libvips globalbalance
автоматически разберет мозаику, вычислит набор весов для каждого кадра, который минимизирует среднюю ошибку соединения, и соберет ее.
За эту пару я получаю:
nip2 , графический интерфейс libvips, имеет все это с интерфейсом GUI. В руководстве есть глава (нажмите F1 для просмотра) о сборке мозаики большого изображения:
https://github.com/jcupitt/nip2/releases
Глобальный баланс не будет работать с CLI, к сожалению, но он будет работать с любыми привязками языка libvips (C #, Python, Ruby, JavaScript, C, C ++, Go, Rust, PHP и т. Д. И т. Д.). Например, в pyvips вы можете написать:
import pyvips
left = pyvips.Image.new_from_file("cd1.1.jpg")
right = pyvips.Image.new_from_file("cd1.2.jpg")
join = left.mosaic(right, "horizontal", 531, 0, 100, 0)
balance = join.globalbalance()
balance.write_to_file("x.jpg")