Выравнивание нескольких изображений в одно изображение?

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

Adobe Photoshop может сделать это с помощью функции «Photomerge».

Как я могу сделать это программно? Есть ли приложение с открытым исходным кодом, которое делает это?


person gak    schedule 07.04.2010    source источник


Ответы (2)


Вы хотите найти image stitching или image registration, так как это имена, под которыми он также известен. Эта статья в Википедии содержит некоторую полезную информацию. Но я знаю только коммерческие библиотеки, которые это делают, а не библиотеки с открытым исходным кодом.

Основная схема процесса (в известной мне коммерческой библиотеке) такова:

  1. Initially you have to specify the rough alignment of the images, i.e.
    • Image A is to the left of image B and they overlap by less that 10%.
    • Изображение C находится справа от изображения B, и они перекрываются на 10-20% и т. д.
  2. На основе параметров в 1) алгоритм попытается найти уникальный «шаблон» в перекрывающихся областях. Затем он использует метод сопоставления шаблонов, чтобы найти шаблон в каждом из двух перекрывающихся изображений.
  3. Пункт 2) можно повторить несколько раз, чтобы получить ряд совпадающих местоположений, которые затем можно использовать для обеспечения точной подгонки.

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

Существует запрос функции на добавление этой функции в библиотека AForge, но на данный момент это не сделано и текущий статус мне неизвестен.

person Matt Warren    schedule 07.04.2010

Обновляя ответ Мэтта Уоррена, есть статья о CodeProject, в которой объясняется, как можно выполнить автоматическое сшивание изображений с помощью Accord.NET. Это также объясняет некоторые теории, лежащие в основе процесса.

Accord.NET Framework — это платформа, написанная на C#, которая расширяет исходную платформу AForge.NET Framework новыми инструментами и библиотеками.

person Cesar    schedule 05.08.2010