Jump to content
Compvision.ru
Sign in to follow this  
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

Share this post


Link to post
Share on other sites

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

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

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

Выровни.

  • Like 1

Share this post


Link to post
Share on other sites

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

  • Like 1

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

Pavia00,

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

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

Выровни.

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

mrgloom,

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

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

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

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

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

  • Like 1

Share this post


Link to post
Share on other sites

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

см. 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

Share this post


Link to post
Share on other sites

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

см. 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

Share this post


Link to post
Share on other sites

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

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

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


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

  • Like 1

Share this post


Link to post
Share on other sites
Такие факторы как изменение освещенности могут сильно влиять на результат корреляции (или как вы еще предлагаете сравнивать по шаблону). При этом нормализация освещенности/контраста несильно поможет.
Вычесть и посчитать считаешь MSE (E-Error)

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

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

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

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

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

  • Like 1

Share this post


Link to post
Share on other sites

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

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

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

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

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

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

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

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

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

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

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

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

  • Like 1

Share this post


Link to post
Share on other sites

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

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

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

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

  • Like 2

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

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

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

  • Like 1

Share this post


Link to post
Share on other sites

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

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

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

×