Максимально стабильные экстремальные области

В компьютерном зрении, максимально стабильные экстремальные регионы (MSER) используются в качестве метода обнаружения больших двоичных объектов в изображениях. Предложен в работе:
J. Matas, O. Chum, M. Urban, and T. Pajdla. «Robust wide baseline stereo from maximally stable extremal regions.» Proc. of British Machine Vision Conference, pages 384-396, 2002.
http://cmp.felk.cvut.cz/~matas/papers/matas-bmvc02.pdf
В OpenCV есть пример их использования mser_sample.cpp, текст которого приведен ниже


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

Потоковое распознавание автомобильных номеров

В версии 1.21 iANPR SDK планируется изменить потоковый модуль, добавив дополнительную функциональность: траектория номера, пересечение траектории номера линий. На следующем видео показано, как будет работать пример:

Ускоренное сравнение с шаблоном

Здесь http://recog.ru/blog/opencv/57.htm показано, как использовать функции OpenCV cvMatchTemplate для сравнения с эталоном.
Недавно появилась статья «Tirui Wu, Alexander Toet Speed-Up Template Matching Through Integral Image Based Weak Classifiers // Journal of Pattern Recognition Research 1 (2014) 1-12.» (http://www.jprr.org/index.php/jprr/article/viewFile/516/193), в которой показано, как можно значительно ускорить процесс поиска шаблона.
Алгоритм работы следующий:
1. Шаблон и само изображение переводится к интегральному виду (т.е. в дальнейшем используются интегральные изображения).
2. Для шаблона вычисляется множество «слабых» бинарных блоков. Что такое «слабый» (weak) бинарный блок можно понять из следующего рисунка:



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

Распознавание индустриальных баркодов DataMatrix с произвольным углом наклона и поворота камеры

Представлен алгоритм распознавания двумерных индустриальных кодов DataMatrix, позволяющий идентифицировать коды, нанесённые ударно-точечным или капельным методами на поверхности со сложным фоном. Алгоритм может адаптироваться в случаях изменения фона на основе смены режима бинаризации.
http://www.computeroptics.smr.ru/KO/PDF/KO38-4/380442.pdf

Распознавание автомобильных номеров Казахстана

Вышел модуль для распознавания автомобильных номеров Казахстана http://intbusoft.com/rus/products/iANPR/.
Доступно распознавания частных номеров и номеров организаций 1993 и 2012 годов. Распознаются только прямоугольные номера (не квадратные).

iANPR SDK 1.2 - распознавание автомобильных номеров

Вышла новая версия SDK для распознавания автомобильных номеров (пока только для Windows):


Страница SDK:
http://intbusoft.com/rus/products/iANPR/

  • добавлен модуль интерфейсов iANPRinterface
  • добавлен потоковый модуль iANPRcapture
  • добавлено распознавания Российских военных, полицейских номеров и номеров такси и автобусов
  • исправлены мелкие ошибки и недочеты

Вместе с тем сохраняется возможность использования предыдущих версий, которые можно скачать здесь
http://ianpr.org/download.htm

Документация: http://ianpr.org/doc.htm

Фильтр Калмана

Фи́льтр Ка́лмана — эффективный рекурсивный фильтр, оценивающий вектор состояния динамической системы, используя ряд неполных и зашумленных измерений. Назван в честь Рудольфа Калмана.
В процессе анализа и обработке большого количества числовых данных, непременно возникают проблемы связанные с точностью обрабатываемой информации. Это значит, что какие бы это не были данные они имеют ошибки, связанные с погрешностью прибора, с помощью которого получается данная информация, или это кратковременный сбой, который привел к получению неточных данных. Так или иначе с этими неприятностями надо как то бороться. На помощь приходит очень полезный для данной цели алгоритм фильтра, построенный на основании метода Калмана.


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

Нормальный Байесовский классификатор в OpenCV

Байесовский классификатор является самым простым методом обучения и часто достаточным при правильном использовании – при правильном выборе признаков распознавания. Классическая задача Байесовского классификатора – это определение наиболее вероятного образа из двух возможных.
Возьмем два образа нормального распределения (здесь и далее я не вдаюсь в подробности, предполагая, что читатель знает об одномерном распознавании образов).
Образ1: мат. ожидание = 10, среднее квадратичное отклонение = 1
Образ2: мат. ожидание = 12, среднее квадратичное отклонение = 1
Если построить для них распределения, то они будут выглядеть следующим образом:


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

Распараллеливание с iANPR SDK и OpenMP

В библиотеке iANPR SDK нет встроенного распараллеливания, т.е. функция распознавания выполняется в одном потоке. Однако, когда производится работа с большими изображениями, например, 1920x1080, время распознавания на обычном ПК может быть недостаточно для работы в реальном времени. Для решения данной проблемы можно разбить изображение на части и анализировать их параллельно. Здесь, однако, следует помнить, что в случае попадания номера на пересечение частей, то он не будет распознан. Поэтому нужно внести некоторую избыточность, используя пересекающиеся части. Причем уровень пересечения определяется максимально возможными размерами объекта распознавания.
Предположим, что объект распознавания в форме круга, и его максимальный диаметр на изображении составляет Dmax. Тогда ширина области пересечения сегментов должна быть больше Dmax. В этом случае площадь несколько раз анализируемой области (в разных сегментах) будет рассчитываться по следующей формуле:
S = L * Dmax,
где L – длина границ между всеми сегментами. Понятно, что в этом случае S будет зависеть не только от количества сегментов, но и от их формы. На рисунках ниже показано два примера расположения сегментов. Один сегмент серого цвета, а другой белого. Область пересечения показана штрихами.


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

Основы работы с матрицами в OpenCV (C++ интерфейс)

Чтобы разрабатывать собственные алгоритмы компьютерного зрения, необходимо уметь получать доступ к пикселям. Изображение представляет собой двумерную матрицу, которая представлена в виде класса cv::Mat. Каждый элемент матрицы представляет собой один пиксель. Для изображений в градациях серого элемент матрицы представлен 8-битным числом без знака (от 0 до 255). Для цветного изображения в формате RGB таких чисел 3, по одному на каждую компоненту цвета. Формат класса cv::Mat следующий.
class CV_EXPORTS Mat
{
public:
// ... много методов ...
...

/*! включает в себя несколько битовых полей:
- сигнатура
- флаг непрерывности
- глубина
- количество каналов
*/
int flags;
//! размерность массива, >= 2
int dims;
//! количество строк и столбцов или (-1, -1) 
int rows, cols;
//! указатель на данные
uchar* data;

//! указатель на счетчик ссылок; когда массив указан
// на выделенные пользователем данные, то указатель равен NULL
int* refcount;

// другие члены
...
};


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