LINUX.ORG.RU
ФорумTalks

А может кто-нибудь простыми словами для чайников описать основные алгоритмы поиска общих фрагментов на разных изображениях?


1

2

Используются в программах автоматического склеивания изображений (stitching). Может кто-нибудь описать простыми словами основные принципы работы и основные существующие практически применяемые алгоритмы? Желательно совсем без «матанных» терминов.

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

ansky ★★★★★
()

Теория - ЦОИ (161.02 MB), практика - Hugin.

Желательно совсем без «матанных» терминов.

Краткое содержание: двигаешь и изменяешь похожие фрагменты пока не получится «как надо» :)

quickquest ★★★★★
()

описать простыми словами основные принципы работы

Простыми словами: задача сравнения изображений в общем виде -
очень сложная, я не смог решить её до конца даже в упрощённом
случае (задавал такую задачку в конце 90-х научрук).
Короче, либо перебор, либо аппроксимация (приближение).

pacify ★★★★★
()
Последнее исправление: pacify (всего исправлений: 1)
Ответ на: комментарий от ansky

Да, вот что-то в этом духе. Можно конкретный пример матрицы? Матрица создаётся для 1 пикселя и описывает, как он отличается от других пикселей, соответствующих разным элементам матрицы?

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

Дайте ссылку на какую-нибудь статью/главу (-;

kiverattes ★☆
() автор топика
Ответ на: комментарий от ansky

двачую, без матана никак, иначе быдлопэтэушныекодеры уже хлеб бы отобрали

Lee_Noox ★★★
()
Ответ на: комментарий от pacify

аппоксимация, приведение к норме, матрица и развесовка коэффициентов

Lee_Noox ★★★
()
Ответ на: комментарий от kiverattes

Погугли «SzeliskiBook».

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

И так для каждого пиксела. Чем думаешь процессоры видеокарт занимаются?

ansky ★★★★★
()

Обычно регистрация ихображений делается следующим способом:

I Задаем класс пространственных трансформаций

II Задаем метрику «похожести изображений»

III Алгоритм, который минимизирует заданную метрику в данном классе трансформаций(метод оптимизации)

Неполный список комбинаций:

I пункт обычно может быть следующим:

-Rigid(Смещение+вращение)

-Rigig + scale(similarity measure)

-Афинное преобразование(задается матрица 4x3 соответсвенно 11 степеней свободы/настраиваемых параметров)

-Нелинейные преобразования(deformable):

###сплайны(FFM)

###RBF

###displacement fields.

---------------------------

II Метрики:

-попиксельные(Iconic)

### sum( (X_i-Yi)^2 ) - среднеквадратичное отклонение по всем пикселям изображения X и Y

### кросс-корреляция

### MUtual information(когда разные модальности картинок)

-Между особыми точками(Geometric): ### по сути ищутся на обоих изображениях особые точки(SIFT, SURF, etc) и потом совмещаются эти облака точек. Облака могут быть с заданным сопоставлением точек или без.

-Совмещенные (Geometric + Rigid) записывается забавный функционал.

--------------------------

III Методы оптимизации(функционал то у нас не выпуклый, поэтому это очень сложно) -Smooth optimization, всякие градинтные методы

-Discrete optimization. Записываются парные потенциалы. Работает хорошо, допилили только недавно через dual decomposition и линейное программирование, люркай статьи Komadakis et al.

-Генетические алгоритмы и прочее мракобесие с эвристиками. В научных кругах используется редко.

Примеры: RIgid преобразования + точки — для этого есть closed form solution через SVD(проскрутово ложе) Affine + точки — недавно предложили очень быстрый алгоритм, основанный на комплексных числах. На практике вроде есть проблемы с его применением.

Что можно юзать из библиотек: OpenCV, ITK(уклон сильно в медицину), ну и миллион реализаций разных методов, например очень популярны Demons Registration, еще есть SIFT flow но это не совсем регистрация изображений. Еще надо отметить, что DemonsRegistration достаточно криво вписывается в эту схему, тк там считается оптический поток и выписывается дифур, который «настраивает» displacement field.

В реале задача решается в много шагов: сначала регистрицруется RIGID потом на этом результате дорегистрируется афинно, потом только фигачат deformable registration. Естественно каждый из этих шагов тоже делается иерархически на разных пирамидах изображений: сначала изображение уменьшается в 5 раз и регистрируется, потом в 2 раза и опять перерегистрируется.

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

maggotroot
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.