Контурный анализ - детектирование зашумленного бинарного объекта

Бинарный объект

Бинарный объект – это объект, созданный человеком, и находящийся в поле зрения камеры. К таким объектам относятся дорожные знаки, автомобильные номера, баркоды и т.п. Часто эти объект имеют контур, по которому они достаточно хорошо детектируются. Однако возникают ситуации, когда объекты серьезно наклонены к оси камеры в нескольких плоскостях, а при этом на них накладывается шум:

Здесь: (а) исходный объект, (б) искаженный объект в результате поворота к камере, (в) зашумленный объект
Для правильного распознавания объекта необходимо провести перспективное преобразование. Но для этого необходимо получить 4 точки бинарного объекта.
Цель данной публикации: определить 4 точки в зашумленном объекте изначальной прямоугольной формы.


( Читать дальше )

Детектирование автомобильных номеров в OpenCV на основе контурного анализа

В Интернете встречаются статьи посвященные детектированию и распознаванию автомобильных номеров. Некоторые используют машинное обучение для того, чтобы обучить компьютер детектировать номер по типу алгоритма Виолы-Джонса. Качество и скорость работы алгоритмов оставляют желать лучшего и авторы справедливо замечают, что нужно более лучшее обучение. Несмотря на то, что машинное обучение, конечно, является важной и значимой частью распознавания образов, применять его нужно с умом. Прежде всего нужно оценить, а какие признаки характеризуют объект распознавания. Понятно, что в большинстве случаев автомобильный номер характеризуется рамкой, ограничивающей номер. Поэтому первой напрашивается идея о том, что выделить контуры-кандидаты на распознавание, которые подходят по размерам.
Для этого можно написать простейшую функцию:



( Читать дальше )

Детектирование Aztec кода с помощью средств OpenCV

В данном посте было показано, как детектировать QR код с помощью средств OpenCV. В данном случае речь пойдет о кодах Aztec и Small Aztec (http://recog.ru/blog/standarts/6.html). Для детектирования кода можно использовать контурный анализ.
1. Необходимо бинаризовать изображение с помощью cvThreshold или cvAdaptiveThreshold.
2. В бинаризованном изображении найти контуры:
IplImage* Temp=cvCreateImage(cvGetSize(Image),8,1);
cvCopy(Binary,Temp);
cvFindContours( Temp, storage, &contours, sizeof(CvContour),CV_RETR_LIST  , CV_CHAIN_APPROX_SIMPLE, cvPoint(0,0) );
contours = cvApproxPoly( contours, sizeof(CvContour), storage,CV_POLY_APPROX_DP, 5, 1 );
cvReleaseImage(&Temp);



( Читать дальше )