реклама на сайте
подробности

 
 
> Идентификация изображений - алгоритм
ASZ
сообщение Jan 6 2011, 05:50
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 302
Регистрация: 24-07-06
Из: Донецк, Украина
Пользователь №: 19 042



Есть изображения от ч/б матрицы 30х30, 64 градации.
Нужно идентифицировать изображения произвольной ориентации, сравнивая с образцовыми.
Лобовое решение громоздко и медленно.
Подскажите, пожалуйста. быстрый и, желательно, компактный в реализации алгоритм.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 10)
SKov
сообщение Jan 6 2011, 07:50
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 812
Регистрация: 22-01-05
Из: SPb
Пользователь №: 2 119



Цитата(ASZ @ Jan 6 2011, 11:50) *
Есть изображения от ч/б матрицы 30х30, 64 градации.
Нужно идентифицировать изображения произвольной ориентации, сравнивая с образцовыми.
Лобовое решение громоздко и медленно.
Подскажите, пожалуйста. быстрый и, желательно, компактный в реализации алгоритм.


Тут надо уточнить, что значит "произвольной ориентации". Если это "ориентация" в смысле вращения или сдвига на плоскости - это еще ничего. А если в пространстве - это другое. Но вообще посмотрите в сторону метода "характерных точек". Т.е. в образце и в рабочем снимке надо выделить особые ( в некотором смысле ) пикселы или небольшие группы пикселов. Например, резкие перепады яркости. И попытаться сначала рассмотреть варианты наведения соответствия между этими особыми точками в двух картинках, а затем и для остального изображения.
А вообще, картинка 30*30 уж очень маленькая, что там можно распознать - даже не знаю... wink.gif
Go to the top of the page
 
+Quote Post
Lmx2315
сообщение Jan 6 2011, 08:14
Сообщение #3


отэц
*****

Группа: Свой
Сообщений: 1 729
Регистрация: 18-09-05
Из: Москва
Пользователь №: 8 684



..попробуйте сделать свёртку изображения с эталоном , как вот тут советуют.
http://forum.algolist.ru/algorithm-image-g...-v-risunke.html

http://electronix.ru/forum/index.php?showtopic=59466



--------------------
b4edbc0f854dda469460aa1aa a5ba2bd36cbe9d4bc8f92179f 8f3fec5d9da7f0
SHA-256
Go to the top of the page
 
+Quote Post
ASZ
сообщение Jan 6 2011, 11:36
Сообщение #4


Местный
***

Группа: Свой
Сообщений: 302
Регистрация: 24-07-06
Из: Донецк, Украина
Пользователь №: 19 042



Пока хочу хотя бы двумерную, чтобы "набить руку", потом придется перейти на 3D.

Цитата(Lmx2315 @ Jan 6 2011, 15:14) *
..попробуйте сделать свёртку изображения с эталоном , как вот тут советуют.
http://forum.algolist.ru/algorithm-image-g...-v-risunke.html

http://electronix.ru/forum/index.php?showtopic=59466

Спасибо, буду читать.
Go to the top of the page
 
+Quote Post
fontp
сообщение Jan 7 2011, 09:31
Сообщение #5


Эксперт
*****

Группа: Свой
Сообщений: 1 467
Регистрация: 25-06-04
Пользователь №: 183



QUOTE (SKov @ Jan 6 2011, 13:50) *
Тут надо уточнить, что значит "произвольной ориентации". Если это "ориентация" в смысле вращения или сдвига на плоскости - это еще ничего. А если в пространстве - это другое. Но вообще посмотрите в сторону метода "характерных точек". Т.е. в образце и в рабочем снимке надо выделить особые ( в некотором смысле ) пикселы или небольшие группы пикселов. Например, резкие перепады яркости. И попытаться сначала рассмотреть варианты наведения соответствия между этими особыми точками в двух картинках, а затем и для остального изображения.
А вообще, картинка 30*30 уж очень маленькая, что там можно распознать - даже не знаю... wink.gif


Да всё зависит от характера преобразования. Признаки используемые для идентификации должны быть инвариантами по отношению к преобразованию.

Для чистого 2-D или 3-D вращения идеальные признаки - это собственные числа и собственные вектора (правые и где-то левые) матрицы, образованой из вектор-столбцов координат тех самых особых точек. Причем однозначная идентификация точек в смысле взаимно-однозначного соответствия отдельных точекне нужна. Достаточно группы точек и не важно какая точка какой соответствует. Достаточно составить из вектор-столбцов координат точек матрицу, проделать SVD (разложение по сингулярным значениям) и независимо от порядка векторов в матрице собственные числа и собственные вектора матрицы образуют инварианты, не зависящие от преобразования вращения.
Go to the top of the page
 
+Quote Post
Lmx2315
сообщение Jan 7 2011, 09:42
Сообщение #6


отэц
*****

Группа: Свой
Сообщений: 1 729
Регистрация: 18-09-05
Из: Москва
Пользователь №: 8 684



http://forum.algolist.ru/algorithm-image-g...vaniem-bpf.html

Цитата
Корреляция с использованием БПФ


Rodya
Новичок


Регистрация: 15.09.2009
Сообщений: 3

Всем огромное спасибо! Все заработало!!!
Если кому интересно, то конечный алгоритм получился такой:

Предположим, что есть картинка разрешением A x B и фрагмент разрешением C x D. Надо найти положение фрагмента на картинке.
Пользуемся следующей формулой (корреляционная функция):

K(ax, ay) = F-1{Sк(wx, wy) X Sф*(wx, wy)} = F-1{G(wx, wy)}

Другими словами хотим получить функцию K(ax, ay), координаты максимума которой соответствуют положению фрагмента на картинке.
Здесь F-1 - символ обратного преобразования Фурье; Sк и Sф - двумерные спектры картинки и фрагмента соответственно; S* - комплексное сопряжение; Sк X Sф* - поэлементное умножение.

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

Теперь по порядку.
1. Сначала надо сместить сигнал фрагмента. Это значит посчитать среднее по всем элементам массива фрагмента, а затем вычесть его из каждого из этих элементов. Этим мы добьемся того, что сумма всех элементов будет равна нулю. Если этого не сделать, то максимум корреляционной функции будет указывать не на положение фрагменты на картинке, а на наиболее яркие области на ней.
2. Затем необходимо создать два новых массива размерностью A + C - 1 на B + D - 1 (см. размеры исходных картинок). В них мы начиная с левого верхнего пикселя копируем значения из картинки и из фрагмента (картинку в первый массив, а фрагмент во второй). Все остальные элементы делаем равными нулю. Другими словами у нас должно получиться два изображения, в левых верхних углах которых будут картинка (на первом изображении) и фрагмент (на втором), все остальное на них будет черным. Дальше работать будем только с этими массивами.
3. Затем ищем спектры. Их получаем прямыми преобразованиями Фурье от имеющихся у нас функций (или массивов). после этого шага будем иметь два двумерных массива комплексных чисел размерностью A + C - 1 на B + D - 1.
4. Теперь берем спектр фрагмента и каждому элементу присваиваем его же комплексно сопряженное. Т.е. у каждого из элементов меняем знак мнимой части на противоположный.
5. Дальше считаем взаимный спектр, который получаем поэлементным перемножением двух, уже имеющихся у нас, спектров. Т.е. считаем новый массив по формуле G(i, j) = Sк(i, j) * Sф*(i, j).
6. Теперь очталось сделать обратное преобразование Фурье от полученного взаимного спектра и найти максимум получившейся функции. Его координаты и будут соответствовать положению фрагмента на картинке.

Можно еще смещать сигнал не только фрагмента, но и самой картики, но у меня и так нормально работает.
Куча информации взял отсюда:
http://psi-logic.shadanakar.org/fft/fft.htm - это про быстрые преобразования Фурье.
А так же из книжки товарищей Р. Гонсалеса и Р. Вудса "Цифровая обработка изображений".


--------------------
b4edbc0f854dda469460aa1aa a5ba2bd36cbe9d4bc8f92179f 8f3fec5d9da7f0
SHA-256
Go to the top of the page
 
+Quote Post
Alexey Lukin
сообщение Jan 7 2011, 15:29
Сообщение #7


Частый гость
**

Группа: Участник
Сообщений: 159
Регистрация: 3-01-11
Пользователь №: 62 000



Цитата(ASZ @ Jan 6 2011, 11:50) *
Нужно идентифицировать изображения произвольной ориентации, сравнивая с образцовыми.

Если изображение можно представить в виде контура (например, белая форма на чёрном фоне), то почитайте про обобщённое преобразование Хафа.
Go to the top of the page
 
+Quote Post
fontp
сообщение Jan 7 2011, 17:48
Сообщение #8


Эксперт
*****

Группа: Свой
Сообщений: 1 467
Регистрация: 25-06-04
Пользователь №: 183



QUOTE (Lmx2315 @ Jan 6 2011, 14:14) *
..попробуйте сделать свёртку изображения с эталоном , как вот тут советуют.
http://forum.algolist.ru/algorithm-image-g...-v-risunke.html

http://electronix.ru/forum/index.php?showtopic=59466


Свертка с эталоном работает только для смещений, а не для вращений и не для масштабирования
Go to the top of the page
 
+Quote Post
mdmitry
сообщение Jan 8 2011, 17:39
Сообщение #9


Начинающий профессионал
*****

Группа: Свой
Сообщений: 1 215
Регистрация: 25-10-06
Из: СПб
Пользователь №: 21 648



может MATLAB Image processing toolbox наведет на какие-либо полезные размышления.


--------------------
Наука изощряет ум; ученье вострит память. Козьма Прутков
Go to the top of the page
 
+Quote Post
ASZ
сообщение Jan 10 2011, 04:21
Сообщение #10


Местный
***

Группа: Свой
Сообщений: 302
Регистрация: 24-07-06
Из: Донецк, Украина
Пользователь №: 19 042



Спасибо всем.
Столько материала - копать-неперекопать sm.gif
Go to the top of the page
 
+Quote Post
DRUID3
сообщение Jan 30 2011, 09:44
Сообщение #11


山伏
*****

Группа: Свой
Сообщений: 1 827
Регистрация: 3-08-06
Из: Kyyiv
Пользователь №: 19 294



Цитата(fontp @ Jan 7 2011, 19:48) *
Свертка с эталоном работает только для смещений, а не для вращений и не для масштабирования

biggrin.gif Смотря в каком отображении производить свертку... wink.gif


--------------------
Нас помнят пока мы мешаем другим...
//--------------------------------------------------------
Хороший блатной - мертвый...
//--------------------------------------------------------
Нет старик, это те дроиды которых я ищу...
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th July 2025 - 09:05
Рейтинг@Mail.ru


Страница сгенерированна за 0.01476 секунд с 7
ELECTRONIX ©2004-2016