roboforum.ru

Технический форум по робототехнике.

Совмещение двух изображений

Сообщение =DeaD= » 24 авг 2007, 14:01

Degun писал(а):Такое ускорение конечно хорошо, но всё же полный перебор остаётся. А не в курсе есть ли такие алгоритмы, которые позволяют сопоставлять объекты на двух изображениях после их обработки как я уже написал выше?

Если изображения какие-то особые, то может да, иначе - науке общие алгоритмы без полного перебора неизвестны, даже, наверное, если бы вы исключили масштабирование. Фактически мой подход тоже опирается на то, что изображения какие-то особые, особенность, которую я использую и предполагаю заключается в том, что средние цвета будут отличаться по всему изображению и дадут нам отсечь значительный объем сравнений, хотя даже в таких случаях какой-то перебор останется.
Аватара пользователя
=DeaD=
 
Сообщения: 24218
Зарегистрирован: 06 окт 2004, 18:01
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов

Сообщение GraphD » 28 авг 2007, 23:28

Degun писал(а):Меня вообще-то интересует следующее. Допустим я уже нашёл на одном и на другом изображениях особые области... [skip]


Очень подходящий под вашу задачу и изначально масштабно-ориентированный способ - это использовать механизмы scale-space (у меня диплом на эту тему был :shock: ). Особенно, если присутствуют еще и повороты...

Конкретно... Можно почитать (для введения) статью David.G.Lowe о SIFT-алгоритме, который использует механизмы SS.

http://www.cs.ubc.ca/~lowe/papers/ijcv04.pdf

Лоуи удовлетворительно (в нек. смысле) решил задачу поиска изображения в БД по образцу (в разных конечно масштабах и ориентациях). Вобщем, там изначально особые точки масштабно-независимы.
Реально по этой статье воспроизвести данный способ. Делал стереоалгоритм на нем основанный. У меня правда была засада, участок кода, который будет отжирать почти все время - это сглаживание по гауссу. Т.е. эту фигню нужно делать каким-либо быстрым алгоритмом, т.к. через свертку - медленно, я помню искал - так внятных статей и не нашел (м.б. просто плохо искал...)
GraphD
 
Сообщения: 157
Зарегистрирован: 01 окт 2005, 00:56
Откуда: С.-Петербург

Сообщение =DeaD= » 30 авг 2007, 15:59

GraphD писал(а):Очень подходящий под вашу задачу и изначально масштабно-ориентированный способ - это использовать механизмы scale-space (у меня диплом на эту тему был :shock: ). Особенно, если присутствуют еще и повороты...

Конкретно... Можно почитать (для введения) статью David.G.Lowe о SIFT-алгоритме, который использует механизмы SS.

http://www.cs.ubc.ca/~lowe/papers/ijcv04.pdf

Лоуи удовлетворительно (в нек. смысле) решил задачу поиска изображения в БД по образцу (в разных конечно масштабах и ориентациях). Вобщем, там изначально особые точки масштабно-независимы.
Реально по этой статье воспроизвести данный способ. Делал стереоалгоритм на нем основанный. У меня правда была засада, участок кода, который будет отжирать почти все время - это сглаживание по гауссу. Т.е. эту фигню нужно делать каким-либо быстрым алгоритмом, т.к. через свертку - медленно, я помню искал - так внятных статей и не нашел (м.б. просто плохо искал...)

А можно в двух словах что за функция вычисления контрольных точек? Или это в двух словах не объяснить и проще прочитать весь трактат?
Аватара пользователя
=DeaD=
 
Сообщения: 24218
Зарегистрирован: 06 окт 2004, 18:01
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов

Сообщение GraphD » 30 авг 2007, 20:59

=DeaD= писал(а):А можно в двух словах что за функция вычисления контрольных точек? Или это в двух словах не объяснить и проще прочитать весь трактат?


В двух словах можно.
Вычисляем гаусс-сглаженные копии исходного изображения для разных "сигм".
Сигмы для одной октавы такие:
[s0; s0*k; s0*k^2 ... s0*k^(n-1)]
s0 > 1;
2*s0 = s0*k^n;
соответственно, k = КОРЕНЬ_n_СТЕПЕНИ (2)
Каждая следующая октава сглаженных копий вычисляется уже над уменьшенным вдвое изображением.
В итоге получим набор изображений I[0], I[1], ... , I[N-1], где N=OctavesAmount*n;

Потом ищем ф-ию для вычисления контрольных точек, DoG (Difference of Gaussian изображения), т.е. просто вычитаем:
G[0]=I[1]-I[0];
G[1]=I[2]-I[1];
G[N-2]=I[N-1]-I[N-2];

Находим экстремумы этого набора изображений. Т.е. локальные макс. (мин.). Это делается поиском среди всех пикселей изображения G[i] такого пикселя, который больше (меньше) всех восьми своих соседей, а также больше (меньше) 18-ти соседей сверху и снизу из G[i-1] и G[i+1] соответственно.

На этом можно было бы закончить поиск, но все эти экстремумы пока полагаются неустойчивыми и неточными (т.к. изображения следующей октавы у нас уменьшаются вдвое для всех октав). А как потом оперировать с этими точками - у него в конце статьи.
GraphD
 
Сообщения: 157
Зарегистрирован: 01 окт 2005, 00:56
Откуда: С.-Петербург

Сообщение Degun » 01 сен 2007, 11:43

GraphD писал(а):
=DeaD= писал(а):А можно в двух словах что за функция вычисления контрольных точек? Или это в двух словах не объяснить и проще прочитать весь трактат?

В двух словах можно....

Мне похоже удалось сделать функцию определения масштаба и смещения без полного перебора на основе разбиения изображения на непересекающиеся области и определения эквивалентных областей на одном и другом изображении. В скором времени, возможно, выложу код на C++ для критики.
Degun
 
Сообщения: 9
Зарегистрирован: 21 авг 2007, 16:10
Откуда: Москва

Сообщение Виталий » 01 сен 2007, 13:52

Конечно выкладывайте, а еще лучше код и описание алгоритма.
Все новости о моих проектах http://savethebest.ru
Аватара пользователя
Виталий
 
Сообщения: 2114
Зарегистрирован: 08 окт 2004, 16:43
Откуда: St. Petersburg
Skype: quark-bot
ФИО: Клебан Виталий

Re: Совмещение двух изображений

Сообщение Николай_Алексеевич » 16 окт 2007, 15:48

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

На данных принципах я много чего успевал делать :)
Николай_Алексеевич
 
Сообщения: 44
Зарегистрирован: 11 дек 2006, 17:18
Откуда: Тольятти

Re: Совмещение двух изображений

Сообщение Degun » 28 ноя 2007, 16:08

Кто сталкивался с алгоритмом совмещения двух изображений, когда одно является смещённой и повёрнутой копией другого (без масштабирования)?
Есть ли такие алгоритмы в OpenCV?
Degun
 
Сообщения: 9
Зарегистрирован: 21 авг 2007, 16:10
Откуда: Москва

Пред.

Вернуться в Алгоритмы

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 5