Распознавание одномерных сигналов с использованием OpenCV

Добавлен материал в библиотеку: Распознавание одномерных сигналов с использованием OpenCV
Содержание:
1. Понятие матриц в OpenCV
2. Обработка одномерных сигналов
3. Преобразование Фурье
4. Сравнение сигналов с шаблоном
Заключение

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

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



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

OMarks и OpenCV

Библиотека OMarks предназначена для распознавания оптических маркеров. В версии 1.0 поддерживаются маркеры на основе баркодов Small Aztec. Вместе с библиотекой идет пример на OpenCV, с помощью которого было сделано следующее видео:



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

Получение скелета с помощью Kinect SDK

С помощью Kinect SDK получение скелета человека является простой задачей. Ниже на рисунке то, что планируется получить. Для простейшей демонстрации помимо скелета будет определяться подняты ли вверх руки. В Kinect SDK уже есть пример получения скелета, который вы можете посмотреть.



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

Green Screen с помощью Kinect SDK

С помощью Kinect SDK легко можно сделать эффект Green Screen – т.е. выделение человека от фона, а вместо фона выводить любую картинку. Я не буду заниматься приведение картинок примеров – в конце-концов если вы используете Kinect, то можете запустить пример Green Screen и посмотреть, что и как. Здесь мы рассмотрим модифицированное приложение для упрощения объяснений, поскольку не каждый разбирается в Win32 API.
Исходный код примера приведен ниже:
#include "opencv2/core/core_c.h"
#include "opencv2/imgproc/imgproc_c.h"
#include "opencv2/highgui/highgui_c.h"
#include "NuiApi.h"


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

Получение карты глубины с использованием Kinect SDK

Первым приложением, которое хочется сделать при помощи Kinect — это то, для чего в основном сенсор и предназначен. Получение карты глубины. Для этого напишем следующий пример (предполагается, что Kinect SDK установлен и естественно есть сам сенсор). Пример построен на основе DepthBasics-D2D, только выброшено все лишнее.

#include "opencv2/core/core_c.h"
#include "opencv2/imgproc/imgproc_c.h"
#include "opencv2/highgui/highgui_c.h"
#include "NuiApi.h"

static const int        cDepthWidth  = 640;
static const int        cDepthHeight = 480;
static const int        cBytesPerPixel = 1;

INuiSensor*             m_pNuiSensor = NULL;
HANDLE                  m_pDepthStreamHandle = NULL;
HANDLE                  m_hNextDepthFrameEvent = INVALID_HANDLE_VALUE;
BYTE*  m_depthRGBX;

HRESULT CreateFirstConnected();
void GetDepth();

int main()
{	
	m_depthRGBX = new BYTE[cDepthWidth*cDepthHeight*cBytesPerPixel];

	// Коннектимся к кинекту
    CreateFirstConnected();



( Читать дальше )
  • 0
  • 11 января 2013, 18:49
  • vidikon
  • 2

Обучение каскадного классификатора

Работа с каскадным классификатором включает два этапа: обучение и детектирование. Детектирование вы можете посмотреть, к примеру, на обнаружении лиц. А здесь описано как обучать классификатор.

В OpenCV есть два приложения для тренировки каскадов: opencv_haartraining и opencv_traincascade (новая версия написанная на C++). Но главное различие между этими двумя приложениями является то, что opencv_traincascade поддерживает как Хаара[Paul Viola, Michael Jones. Rapid Object Detection using a Boosted Cascade of Simple Features. Conference on Computer Vision and Pattern Recognition (CVPR), 2001, pp. 511-518.], так и LBP [Shengcai Liao, Xiangxin Zhu, Zhen Lei, Lun Zhang and Stan Z. Li. Learning Multi-scale Block Local Binary Patterns for Face Recognition. International Conference on Biometrics (ICB), 2007, pp. 828-837.] особенности. LBP с точки зрения, как обучения, так и детектирования в несколько раз быстрее Хаара. Что касается достоверности распознавания, то все зависит от обучающей выборки. Можно обучить LBP так, что оно будет приближаться к Хаара особенностям.
opencv_traincascade и opencv_haartraining хранят обученные классификаторы в различных форматах. Новый интерфейс обнаружения (CascadeClassifier класса в objdetect модуле) поддерживают оба формата. opencv_traincascade может сохранять обучение каскада в старом формате. Но opencv_traincascade и opencv_haartraining не может загрузить классификатор в другом формате для дальнейшего обучения после перерыва.
opencv_traincascade приложение может использовать TBB для многопоточности. Чтобы использовать его в режиме многоядерных процессоров OpenCV должно быть откомпилировано с TBB.
Другие утилиты, используемые для обучения:
1. opencv_createsamples используется для подготовки учебного набора положительных и тестовых образцов в формате, который поддерживается как opencv_haartraining так и opencv_traincascade приложениями. На выходе получается файл с расширением *.vec, это двоичный формат, который содержит изображение.
2. opencv_performance может быть использовано для оценки качества классификаторов, но только для обученных opencv_haartraining. Она использует коллекцию размеченных изображений, запускает классификатор и сообщает так называемую производительность, т.е. количество найденных объектов, количество пропущенных объектов, количество ложных срабатываний и другую информацию.


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

Онлайн распознавание баркодов

с использованием библиотеки Zxing от Google. Поддержка кодов: QR code, UPC-A and UPC-E, EAN-8 and EAN-13, Code 39, Code 93, Code 128, ITF, Codabar, RSS-14, RSS Expanded.

http://intbusoft.com/online/barcode/

Особенности программирования систем распознавания образов реального времени

Системы распознавания образов (СРО) на настоящий момент находят все больше применения в промышленности, торговле, бизнесе и повседневной жизни. Огромное число компаний связывают свою деятельность с разработкой СРО реального времени (РВ) для персональных компьютеров, серверов, мобильных платформ и онлайн-сервисов. Большое количество отечественных и зарубежных ученых разрабатывают новые алгоритмы распознавания РВ, применяя при этом современные языки и среды программирования, зачастую не обращая внимания на тот факт, что система РВ – это прежде всего предсказуемая система. Поэтому в данной работе предлагается подход к программированию СРО РВ на языке C/C++ на платформе Windows XP/7.
В настоящее время при разработке сложных СРО РВ часто используют программную библиотеку OpenCV (opencv.willowgarage.com), которая может функционировать на различных платформах и операционных системах. Множество задач связано с обработкой видеопотоков, например, с web-камеры. В этом случае программный код библиотеки OpenCV выглядит следующим образом:
#include "opencv2/core/core_c.h"
#include "opencv2/imgproc/imgproc_c.h"
#include "opencv2/highgui/highgui_c.h"
int main(int argc, char** argv){
	CvCapture* capture = cvCaptureFromCAM(0);
	cvNamedWindow( "Camera", 1 );
	IplImage* frame=0;
	do{
		frame = cvQueryFrame(capture );
		…<Какая-либо функция распознавания>
		cvShowImage( "Camera", frame);
		if (cvWaitKey( 20 ) == 32 ) break;
	}while ( 1 );
	cvReleaseCapture(&capture);
	return 0;
}

Однако здесь возникают вопросы: Как контролировать время выполнения функции распознавания? Что делать, если модуль распознавания образов ненадежен – а это часто бывает из-за высокой сложности алгоритмов распознавания. В этом случае можно использовать подход к выбору структуры СРО РВ, описанный в работе [Кручинин, А.Ю. Особенности разработки программных систем распознавания образов реального времени / А.Ю. Кручинин // Автоматизация в промышленности. – 2011. — №7. – С. 53-56.].


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

Обработка одномерных сигналов в OpenCV (Smooth, Dilate, Morphology)

При использовании OpenCV в основном дело имеется с двумерными сигналами – т.е. изображениями. Однако функции OpenCV не меньше помогут и при анализе одномерных сигналов. Пусть есть следующий сигнал:

Необходимо вычислить края впадины.


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