Детектирование Aztec кода с помощью средств OpenCV / Распознавание штрих-кодов (бар кодов) / Recog.ru - Распознавание образов для программистов


Детектирование 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);

3. Проанализировать контуры на соответствие квадрату, чтобы найти мишень кода. Это можно сделать следующим образом.
CvSeq* c_temp=0;
CvRect Rects[MAX_AZTEC_RECT];
int all_rects=0;
double i,i1,i2;
for( CvSeq* c_=contours; c!=NULL; c=c->h_next)
{
	CvRect r=cvBoundingRect(c_);
	CvBox2D b=cvMinAreaRect2(c_);
	if (b.size.height<0.1 || b.size.width<0.1) i1=0;
	else
	{
		i=fabs(cvContourArea(c_));
		i1=i/(double)(b.size.width*b.size.height);
		i2=((b.size.width<b.size.height)?
		   (double)b.size.width/(double)b.size.height:
		   (double)b.size.height/(double)b.size.width);       
	}
	if(i1>=0.65 &&  i2>=0.65 && abs(b1.size.width*b1.size.height-i)<i*0.3) {	
		c_temp=c_;
		Rects[all_rects]=r1; 
		all_rects++;
		if (all_rects>MAX_AZTEC_RECT) break;
	}	
	else
	{
		if (c_temp==0) contours=contours->h_next;
		else
			c_temp->h_next=c_temp->h_next->h_next;
	}
}

Если воспользоваться функций cvDrawContours и вывести контуры на экран, то мы увидим следующее.



Здесь показаны только оставшиеся контуры. Т.е. мишень выделяется как совокупность вложенных квадратов, ну а дальнейшее распознавание можно сделать так, как показано здесь http://blog.vidikon.com/?p=411.
  • 0
  • 06 июля 2012, 17:03
  • vidikon

Комментарии (0)

RSS свернуть / развернуть

Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.