4 битные маркеры Aztec Marker

4 битные маркеры Aztec Marker обладают повышенной надежностью за счет увеличенного количества корректировочных слов Рида-Соломона, но позволяют кодировать всего 15 маркеров.
Ниже можно посмотреть ролик распознавания:

Скачать маркеры и программу работающую с Web-камерой можно здесь:
http://intbusoft.com/download/products/AztecMarkerWebCam.zip

Распознавание дорожных знаков (знак ограничения скорости)

Распознавание дорожных знаков является достаточно сложной задачей, если рассматривать распознавание в целом. Однако при рассмотрении отдельных типов знаков значительно упрощается. Здесь будет описан алгоритм распознавания знаков ограничения скорости. Для тестов было использовано 2 изображения.



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

Распознавание лиц в OpenCV (facerec_demo.cpp)

В новой версии OpenCV появились алгоритмы распознавания лиц, и появился пример facerec_demo.cpp:

/*
 * Copyright © 2011. Philipp Wagner <bytefish[at]gmx[dot]de>.
 * Released to public domain under terms of the BSD Simplified license.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are met:
 *   * Redistributions of source code must retain the above copyright
 *     notice, this list of conditions and the following disclaimer.
 *   * Redistributions in binary form must reproduce the above copyright
 *     notice, this list of conditions and the following disclaimer in the
 *     documentation and/or other materials provided with the distribution.
 *   * Neither the name of the organization nor the names of its contributors
 *     may be used to endorse or promote products derived from this software
 *     without specific prior written permission.
 *
 *   See <http://www.opensource.org/licenses/bsd-license>
 */

#include "opencv2/opencv.hpp"

#include <iostream>
#include <fstream>
#include <sstream>

using namespace cv;
using namespace std;

Mat toGrayscale(InputArray _src) {
    Mat src = _src.getMat();
    // only allow one channel
    if(src.channels() != 1)
        CV_Error(CV_StsBadArg, "Only Matrices with one channel are supported");
    // create and return normalized image
    Mat dst;
    cv::normalize(_src, dst, 0, 255, NORM_MINMAX, CV_8UC1);
    return dst;
}


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

OpenCV 2.4.1

Обычно я не слежу за новостями по выходу новых версий, но этот раз случайно обнаружил появление нового релиза. Интересным для меня в версии 2.4 стало появление нескольких алгоритмов распознавания лиц, которые постараюсь посмотреть. Ну а другие изменения вы можете посмотреть здесь:
http://code.opencv.org/projects/opencv/wiki/ChangeLog

Я скачал себе Windows версию http://sourceforge.net/projects/opencvlibrary/files/opencv-win/
Одним из первых визуальных отличий — это большой объем установки на жестком диске (почти 2.5 Гб). Это обусловлено тем, что разработчикам надоело нытье о необходимости перекомпиляций для 32-64 битных платформ, и различных версий компиляторов, поэтому сразу разместили *.lib и *.dll для всех версий. Причем динамические и статические. (Впрочем это возможно было и в 2.3 версии OpenCV, я ее не смотрел).
Для подключения библиотеки необходимо указать пути к нужной версии, например:
opencv\build\x86\vc9\lib\
opencv\build\x86\vc9\bin\
Ну, а если вы используете Debug Mode, то еще один путь:
opencv\build\common\tbb\ia32\vc9\

Особенности в OpenCV (cvFindCornerSubPix, cvGoodFeaturesToTrack, cvPreCornerDetect)

Описание нескольких функций, имеющих отношение к особенностям.

cvFindCornerSubPix
Уточняет местоположение углов.
void cvFindCornerSubPix(
	const CvArr* image,
	CvPoint2D32f* corners,
	int count,
	CvSize win,
	CvSize zero zone,
	CvTermCriteria criteria 
);

Параметры:
image – входное изображение;
corners – начальные координаты входных углов;
count – количество углов;
win – половина длины стороны окна поиск. Например, для win (5,5) окно поиска будет (5*2+1, 5*2+1) = (11, 11);
zone — половина размера мертвых регион в середине зоны поиска, над которой суммирование в формуле ниже не делается. Это иногда используется, чтобы избежать возможных особенностей автокорреляционной матрицы. Значение (-1, -1) означает, что нет такого размера.
criteria – критерий прекращения итерационного процесса утончения угла. Процесс прекращается или после достижения определенного количества итераций, или после достижения определенной точности. Можно использовать оба критерия.


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

Особенности в OpenCV (cvCornerEigenValsAndVecs, cvCornerHarris, cvCornerMinEigenVal)

cvCornerEigenValsAndVecs

Вычисление собственных значений и собственных векторов блоков изображения для детектирования углов.
void cvCornerEigenValsAndVecs(
	const CvArr* image,
	CvArr* eigenvv,
	int blockSize,
	int aperture_size=3 
);


Параметры:
image – входное изображение;
eigenvv – изображение для хранения результатов. Оно должен быть в 6 раз шире, чем исходное изображение;
blockSize – размер соседства;
aperture_size – размер ядра в операторе Собела (подробнее смотрите cvSobel).

Для каждого пикселя функция считает соседство размером blockSize*blockSize. Вычисляется матрица ковариаций производных от соседства следующим образом:



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

DataMatrix PC Scanner for Windows

Программа распознает DataMatrix код и с интервалом в 5 секунд эмулирует нажатие клавиш клавиатуры, передавая декодированную информацию (с символом конца строки в конце) в находящееся в фокусе окне. Ниже приведен пример работы программы с записью в «Блокнот», но это может быть и любая ваша программа, например, 1С.



Подробнее о программе вы можете почитать здесь:
http://intbusoft.com/rus/solutions/barcode/DataMatrixPCScanner/

Функция сравнения регионов изображения cvMatchTemplate

void cvMatchTemplate(
	const CvArr* image,
	const CvArr* templ,
	CvArr* result,
	int method 
);

Параметры:
image – изображение, где будет осуществляться поиск (8 битное или 32-битное floating-point);
templ – искомый шаблон изображения, не больше чем image и того же типа;
result — карта результатов сравнения, одноканальный 32-битный массив с плавающей точкой. Если размеры image WxH, а templ wxh, то размер result (W-w+1)x(H-h+1);
method – метод сравнения шаблона.

Эта функция аналогична cvCalcBackProjectPatch. Она скользит по изображению, сравнивая перекрывающиеся участки размеров wxh с templ используя метод method, сохраняя результат в result. Ниже описаны формулы для сравнения (I – image, T – templ, R – result). Суммирование проводится по шаблону и/или по региону изображения по следующему пути: x' = 0..w-1, y' = 0..h-1.


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

Выделение цвета кожи человека

Прочитал статью «A Real-Time Face Tracker» (http://www-prima.inrialpes.fr/perso/Tran/Documents/Articles/Divers/RTFaceTracker.pdf).
Вообще статья посвящена трекингу лица, однако меня она заинтересовала по другой причине – в ней представлена модель описания цвета кожи. Поэтому я опишу смысл этой модели.

Основная идея в том, что человек адаптируется к яркости изображения, и для того, чтобы распознать необходимо отбросить информацию о яркости. Используется понятие «чистого» цвета (хроматический), описанного в работе [G. Wyszecki and W.S. Styles. Color Science: Concepts and Methods, Quantitative Data and Formulae, Second Edition, John Wiley & Sons, New York, 1982].

«Чистый» цвет получается следующим образом:
r = R / (R + G + B),
g = G / (R + G + B).
Синий цвет лишний, поскольку после нормализации r+g+b =1.

При этом в данной работе было показано, что при использовании «чистого» цвета было определено, что кожа людей даже разной национальности находится в очень небольшом диапазоне по сравнению с ненормализованным цветом.


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