roboforum.ru

Технический форум по робототехнике.
Текущее время: 17 фев 2025, 08:58

Часовой пояс: UTC + 4 часа




Начать новую тему Ответить на тему  [ Сообщений: 23 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: Совмещение двух изображений
СообщениеДобавлено: 21 авг 2007, 16:14 
Не в сети

Зарегистрирован: 21 авг 2007, 16:10
Сообщения: 9
Откуда: Москва
Есть два изображения разных размеров. Одно из изображений (меньшее) является промасштабированным участком другого (большего) изображения. Необходимо найти коэффициент масштабирования и смещение данного участка изображения.
Интересует следующее:
1. как решить данную задачу с помощью библиотеки OpenCV.
2. какие алгоритмы можно применить для решения данной задачи своими средствами.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 22 авг 2007, 07:24 
Не в сети
Аватара пользователя

Зарегистрирован: 06 окт 2004, 18:01
Сообщения: 24218
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов
А. Надеюсь повороты и отражения не использовались? :)

Б. Если масштабирование не сильное, то можно попробовать найти фрагмент по "особым точкам", но если таких точек не будет в масштабированном фрагменте - тогда вы почти гарантированно "попали" на полный перебор.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 22 авг 2007, 09:09 
Не в сети

Зарегистрирован: 21 авг 2007, 16:10
Сообщения: 9
Откуда: Москва
=DeaD= писал(а):
А. Надеюсь повороты и отражения не использовались? :)

Нет.
=DeaD= писал(а):
Б. Если масштабирование не сильное, то можно попробовать найти фрагмент по "особым точкам", но если таких точек не будет в масштабированном фрагменте - тогда вы почти гарантированно "попали" на полный перебор.

1. А какие существуют алгоритмы нахождения "особых точек"? 2. Как можно понять, что особых точек в изображении нет?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 22 авг 2007, 10:19 
Не в сети
Аватара пользователя

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

1. А какие существуют алгоритмы нахождения "особых точек"? 2. Как можно понять, что особых точек в изображении нет?

GoodFeaturesToTrack - как пример функции из OpenCV, отлавливающей отличные точки для совмещения.

Вообще поищите по словам Feature Point Detection


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 22 авг 2007, 11:23 
Не в сети
Аватара пользователя

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

_________________
Все новости о моих проектах http://savethebest.ru


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 22 авг 2007, 15:26 
Не в сети

Зарегистрирован: 21 авг 2007, 16:10
Сообщения: 9
Откуда: Москва
Виталий писал(а):
А еще можно по гистограммам поискать если не нужно особой надежности.

А поподробней можно каким образом искать по гистограммам.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 23 авг 2007, 00:26 
Не в сети
Аватара пользователя

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

_________________
Все новости о моих проектах http://savethebest.ru


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 23 авг 2007, 08:33 
Не в сети
Аватара пользователя

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

Например средние значения R, G, B выцепить и по ним искать.

Оценка производительности - если картинка, в которой ищем, размером N*N, тогда скорость поиска можно улучшить до O(N^4) практически, если очень повезет, вместо O(N^6) при полном переборе.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 23 авг 2007, 09:19 
Не в сети

Зарегистрирован: 21 авг 2007, 16:10
Сообщения: 9
Откуда: Москва
Виталий писал(а):
Поподробней - сравнивать не изображения а их гистограммы.

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 23 авг 2007, 09:35 
Не в сети

Зарегистрирован: 21 авг 2007, 16:10
Сообщения: 9
Откуда: Москва
=DeaD= писал(а):
Degun писал(а):
1. А какие существуют алгоритмы нахождения "особых точек"? 2. Как можно понять, что особых точек в изображении нет?

GoodFeaturesToTrack - как пример функции из OpenCV, отлавливающей отличные точки для совмещения.
Вообще поищите по словам Feature Point Detection

Меня вообще-то интересует следующее. Допустим я уже нашёл на одном и на другом изображениях особые области для сопоставления их друг с другом и пронумеровал их. Делается это путём сегментации с глобальным порогом, который разделяет все пикселы изображения на относящиеся или к фону или к областям (объектам) изображения. Теперь мне необходим алгоритм сопоставления областей этих двух изображений. Т. е. необходим такой алгоритм, который бы нашёл бы, например, что область с номером 3 на первом изображении соответствует области 5 на втором, а область с номером 7 на первом соответствует области 2 на втором и т. д. В принципе достаточно 4 таких сопоставления, чтобы найти параметры оптимального аффинного преобразования (усечённой его версии не поддерживающего вращения), которые и будут ответом на мою задачу.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 23 авг 2007, 09:41 
Не в сети

Зарегистрирован: 21 авг 2007, 16:10
Сообщения: 9
Откуда: Москва
=DeaD= писал(а):
Кстати, да, если изображение не искажено по цветам (а иначе гистограммы тоже не катят), а только масштабированно, то можно ввести оценочные функции, инвариантные относительно масштабирования и легко рассчитываемые по частичным суммам из прямоугольника задаваемом парой "верхний левый угол - точка на картинке", и искать по ним.

Не совсем понял мысль. Можно пояснить как-то более яснее.
=DeaD= писал(а):
Например средние значения R, G, B выцепить и по ним искать.

Допустим для облегчения задачи, что изображения являются полутоновыми серыми.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 23 авг 2007, 10:23 
Не в сети
Аватара пользователя

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

Не совсем понял мысль. Можно пояснить как-то более яснее.

Есть картинка X*Y, сохранённая в массиве pic[x][y][c], x из 0..X-1, y из 0..Y-1, c из 0..2 (две координаты и номер цвета).

Заведём массив picsum[x][y][c] по правилу picsum[x][y][c]=Сумма всех pic[i][j][c] для i из 0..x, j из 0..y.

Тогда среднее значение цвета c на прямоугольнике x1,y1,x2,y2 (x1<x2, y1<y2) вычисляется за 1 ход как (picsum[x2][y2][c]-picsum[x1][y2][c]-picsum[x2][y1][c]+picsum[x1][y1][c])/( (x2-x1+1)*(y2-y1+1) ).

Сравниваем его со средним значением этого цвета на искомом фрагменте и если все 3 компоненты не сильно отклонены, тогда начинаем сверку попиксельную, чем сильно экономим количество вариантов, подвергающееся тупому перебору.

Degun писал(а):
=DeaD= писал(а):
Например средние значения R, G, B выцепить и по ним искать.

Допустим для облегчения задачи, что изображения являются полутоновыми серыми.

Это как раз в вашем случае - усложнение :)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 23 авг 2007, 11:34 
Не в сети
Аватара пользователя

Зарегистрирован: 08 окт 2004, 16:43
Сообщения: 2114
Откуда: St. Petersburg
Skype: quark-bot
ФИО: Клебан Виталий
Цитата:
Сравниваем его со средним значением этого цвета на искомом фрагменте и если все 3 компоненты не сильно отклонены, тогда начинаем сверку попиксельную, чем сильно экономим количество вариантов, подвергающееся тупому перебору.


Вот примерно это я имел ввиду =)

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


Пробежаться окошком по изображению. И так с несколькими масштабами... можно даже подумать насчет адаптивного "шага" перемещения окна.

_________________
Все новости о моих проектах http://savethebest.ru


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 23 авг 2007, 17:54 
Не в сети
Аватара пользователя

Зарегистрирован: 06 окт 2004, 18:01
Сообщения: 24218
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов
Кстати, массив picsum[][][] заполняется за время пропорциональное количеству пикселей на картинке:

picsum[x][y][c]=pic[x][y][c]+picsum[x-1][y][c]+picsum[x][y-1][c]-picsum[x-1][y-1][c]


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 24 авг 2007, 09:35 
Не в сети

Зарегистрирован: 21 авг 2007, 16:10
Сообщения: 9
Откуда: Москва
=DeaD= писал(а):
Кстати, массив picsum[][][] заполняется за время пропорциональное количеству пикселей на картинке:
picsum[x][y][c]=pic[x][y][c]+picsum[x-1][y][c]+picsum[x][y-1][c]-picsum[x-1][y-1][c]

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


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 23 ]  На страницу 1, 2  След.

Часовой пояс: UTC + 4 часа


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

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


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
phpBB SEO