Перейти к содержимому
Compvision.ru
Astor

Сравнение сложных изобржений

Recommended Posts

Всем привет,

Пишу программу по распознаванию дорожних знаков на видеопотоке.

Пока что реализовал нахождение треугольных и круглых красных фигур на картинке при разном освещении. Вторым этапом является сравнение полученого знака (хотя это может быть и не знак) с шаблонами. И тут у меня появились проблемы:

1) Практически все знаки имеют максимум 4 цвета (а в основном их 2), поэтому сопоставление гистограмм не будет давать хорошего результата.

2) Знаки могут быть перечеркнутыми (как этот: http://ped-kopilka.ru/images/photos/medium/article279.jpg), поэтому сравнение контуров (как при расспознавании букв, цифр) тоже не даст хорошего результата.

3) Знак, полученный с камеры может быть повернут на какой-то угол, поэтому сравнивать корреляционно тоже нету смысла.

Как все-таки лучше всего сравнивать знаки? Пока-что пробовал поиграться с SIFT, SURF, FLANN, но результаты уж очень печальные (см. вложение).

Спасибо заранее за советы.

post-6123-0-82404400-1353249068_thumb.jp

  • Like 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

У вас простой случай достаточно сравнения по шаблону. Или по кускам.

В более сложных случаях используют контуры.

3) Знак, полученный с камеры может быть повернут на какой-то угол, поэтому сравнивать корреляционно тоже нету смысла.

Выровни.

  • Like 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

ps. Думаю что для вас будет проще всего разобраться с НС типа персептрон. А они как известно мыслят шаблоннами.

  • Like 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

https://sites.google.com/site/mcvibot2011sep/

вот тут детектор знаков, кстати о Gielis Curves и http://en.wikipedia.org/wiki/Superformula я тут услышал впервый раз.

не думаю. что это супер решение ну так погонять пойдёт.

можно вприницпе натренировать какой то рамочный классификатор.

вот тут работа на свёрточных нейросетях

http://yann.lecun.com/exdb/publis/pdf/sermanet-ijcnn-11.pdf

а так еще можно погуглить

traffic sign detection

traffic sign recognition

  • Like 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Pavia00,

У вас простой случай достаточно сравнения по шаблону. Или по кускам.

Такие факторы как изменение освещенности могут сильно влиять на результат корреляции (или как вы еще предлагаете сравнивать по шаблону). При этом нормализация освещенности/контраста не сильно поможет.

Выровни.

Есть круглый повернутый знак. Поворачивать на 10 градусов и сравнивать? Не вижу смысла.

mrgloom,

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

Кроме того, некоторые статьи написаны "для галочки". То есть методы там уж очень простые и в реальной жизни (при реальных условиях эксперимента) те результаты, которые указаны там не будут такими хорошими.

Gielis Curves - это что-то похожее на HuMoments.

В общем решил разобраться с НС и с помощью этого реалищовать.

Можете какую-то простую статью (желательно на русском) посоветовать? Или самому искать?

  • Like 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Что касается поворота, то можно попробовать вычислить преобразование Хафа, и найти максимумы расположенные по угловой координате близко к нулю.

см. http://www.compvision.ru/forum/index.php?showtopic=927

И повернуть изображение на найденный угол.

Контуры, вероятно, лучше будет анализировать с учетом иерархии. OpenCV-шный детектор контуров может выдавать уровень контура.

То есть сначала внешний, определяем форму знака, затем анализируем внутренности.

А можно просто выровненное изображение подавать на вход классификатора, правда нужно сначала пропустить его через выравниватель освещенности, что-то вроде retinex-a ( http://www.compvision.ru/forum/index.php?showtopic=818 или whitening-а http://www.compvision.ru/forum/index.php?showtopic=991 ) и, после этого бинаризировать адаптивным методом.

  • Like 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Что касается поворота, то можно попробовать вычислить преобразование Хафа, и найти максимумы расположенные по угловой координате близко к нулю.

см. http://www.compvision.ru/forum/index.php?showtopic=927

И повернуть изображение на найденный угол.

Ничего не понял, хотя я преобразование Хафа толком не знаю. Знаю только как в OpenCV можно найти линии и круги.

Но интуиция подсказывает, что все равно повернуть любой знак не получиться.

Контуры, вероятно, лучше будет анализировать с учетом иерархии. OpenCV-шный детектор контуров может выдавать уровень контура.

То есть сначала внешний, определяем форму знака, затем анализируем внутренности.

Нахождение знака и определение формы знака я уже реализовал. Анализировать внутренности с помощью контуров не получиться - причину указывал в шапке.

А можно просто выровненное изображение подавать на вход классификатора, правда нужно сначала пропустить его через выравниватель освещенности, что-то вроде retinex-a ( http://www.compvision.ru/forum/index.php?showtopic=818 или whitening-а http://www.compvision.ru/forum/index.php?showtopic=991 ) и, после этого бинаризировать адаптивным методом.

Я выравниваю каждую цветовую компоненту (RGB) с помощью equalizeHist.

Не очень понимаю зачем нужно именно бинарное изображение. Сам знак может состоять из не одного цвета.

  • Like 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

Одинаковые знаки имеют одинаковые главные оси инерции, вот на них и можно ориентироваться.

Вот код для вычисления угла поворота главной оси.


CvMoments moment;
cvMoments(img,&moment,1);
angle = 0.5*atan2((2*moment.mu11),(moment.mu20-moment.mu02));
[/code]

  • Like 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Такие факторы как изменение освещенности могут сильно влиять на результат корреляции (или как вы еще предлагаете сравнивать по шаблону). При этом нормализация освещенности/контраста несильно поможет.
Вычесть и посчитать считаешь MSE (E-Error)

Как раз таки сравнение по шаблону наиболее устойчивая операция, так как избыточна. Поэтому её напротив и следует использовать.

Во-вторых по мимо амплитудной корреляции есть и фазовая.

Да и сравнение по частям борется со множеством вредных воздействий.

Поворачивать на 10 градусов и сравнивать? Не вижу смысла.

По поводу нормализации её следует применять. Ровно как и поворот. Если не стараться, то ничего и не выйдет. Для 5 градусов смысла поворачивать нету. А вот для 10 надо это уже много и может оказаться очень существенно.

  • Like 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Такие факторы как изменение освещенности могут сильно влиять на результат корреляции (или как вы еще предлагаете сравнивать по шаблону). При этом нормализация освещенности/контраста не сильно поможет.

освещенность влияет ,а вот яркость вроде бы не влияет.

во всяком случае это довольно простой вариант, нет инвариантности к скейлу и повороту, есть еще chamfer matching основанное на сопоставлении контуров.

по запросу Computer Vision:Chamfer System первая ссылка в гугле

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

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

по нейросетям есть eblearn

http://sourceforge.net/projects/eblearn/

там есть демки, но там много параметров которые можно(и видимо надо) настраивать.

а так куча всего есть по pascal voc там как раз находят разные объекты на фотографиях, задача намного сложнее чем находить знаки.

можете попробовать вот это завести

http://people.cs.uchicago.edu/~rbg/latent/

  • Like 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Погуглите GTSRB (соревнование german traffic sign recognition benchmark).

Уже указанная тут статья Серманета и ЛеКуна - от людей, занявших в соревновании второе место (и в статье описавших дальнейшее улучшение точности распознавания). Также в инете есть и статья победителей.

В общем, все лидеры использовали нейросетки (достаточно схожие между собой). Точность нейросеток оказалась лучше точности распознавания человеком.

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

  • Like 2

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Здесь скайп-чат по нейросетям (по курсу coursera.org ):

skype:?chat&blob=iLoGhkpfdoiSrJLBkdMob7-YUW6m_NtHXEKbg-rbZeO_ZMuoPNHYKgf_CeATaxblTDorzvci5Nfmr3c

можете поспрашивать там.

  • Like 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

Есть (я), но мне лень ;)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте учётную запись или войдите для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать учётную запись

Зарегистрируйтесь для создания учётной записи. Это просто!

Зарегистрировать учётную запись

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас


  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу

×