You are on page 1of 13

Nguyn B Long TH1 K49

Bo co kt qu nghin cu x l nh
Phn 1: Tng quan v x l nh
Phn 2: Th vin x l nh OpenCV
Phn 3: Mt s chng trnh x l nh

Phn 1: Tng quan v x l nh


I.

Cc khi nim chung v x l nh


1. nh ngha
-

X l nh l qu trnh chp nh, phn tch nhn dng nh v a ra cc tn hiu iu


khin hp l.

2. Mt s khi nim lin quan


-

Pixel: phn t nh. l cc im nh cu thnh nn nh, xut hin khi ta tin hnh
s ho nh.

Mc xm: l kt qu m ho cng sng ca mt im nh vi mt gi tr s. M


ho 256 l ph dng nht v mi pixel nh s c m ho bng 8 bit.

II.

Cc bc trong qu trnh x l nh

Chp nh
Tin x l nh
Nh phn nh
Phn vng nh
Nhn dng
Xc nh ta
Kt thc
Qu trnh x l nh
1. Chp nh

Nguyn B Long TH1 K49


-

Kt ni Camera vi my tnh. Camera c s dng y l Webcam Logitech.

S dng mt hm trong th vin OpenCV thc hin cng vic chp nh

Sau khi chp nh xong ta cng s dng mt hm trong OpenCV r lu nh

2. Tin x l d liu nh
Qu trnh tin x l d liu nh bao gm hai cng vic sau:
+ Phi cnh cho nh
+ Chuyn v nh xm v xc nh lc xm
a. Phi cnh cho nh
-

nh sau khi chp s c mt gc nghing nht nh so vi mt phng do cn phi


thc hin mt cng vic phi cnh cho nh nhm xoay v ko nh thnh nh
trong mt phng 2D. Vic ny s lm cho t l, kch thc ca nh ging nh trong
thc t.

b. Chuyn v nh xm v xc nh lc xm
-

Vi nh mu thu c ta khng th tin hnh nhn dng c ngay m trc ht cn


phi chuyn nh cho v nh xm

Mi mt phn t nh c mt cng sng nht nh, cng sng ny c s


ho thnh cc mc xm v da vo cc mc xm ny ta s chuyn nh thnh nh
xm.

Lc xm l lc cung cp thng tin v phn b mc xm ca nh, xc nh


xem nh l sng hay ti.

3. Nh phn nh
-

nh nh phn l nh m gi tr ca cc im nh ch c hai gi tr l 0 v 1 (trng v


en)

chuyn t nh xm v nh nh phn ta t mt ngng thch hp so snh. Mc


xm ca nh s c dng so snh vi gi tr ngng ny.

Biu thc:

nu u < T

nu u T

f(u) =

Vic chn ngng l rt quan trng, nu chn ngng hp l th ta c th phn bit


c vt th vi nn v ngc li.

4. Phn vng nh

Nguyn B Long TH1 K49


Sau khi thc hin nh phn nh, ta thu c mt nh gm hai mu en v trng. Gi tr
ca cc im nh ch l 0 v 1. Bc tip theo ta cn thc hin cng vic phn vng nh
nhm phn bit vt th vi nn v ngc li.
Thut ton phn vng nh da trn k thut nh nhn lin tip.
Vi k thut nh nhn lin tip ta c th s dng ma trn mt n 3x3 qut ln lt tt
c cc im nh. C 2 k thut c th s dng y:
-

Mt n nh vi 4 im ln cn

Mt n nh vi 8 im ln cn

Mt n vi bn im ln cn v tm im ln cn
Quy c khi qut nh:
-

Nu im nh c gi tr l 0 th gi l im nh nn

Nu im nh c gi tr l 1 th gi l im nh ni

Ta ch nh nhn cc im nh ni
Qu trnh nh nhn nh c thc hin theo cc bc sau:
Bc 1: Tin hnh qut ln lt tt c cc im nh t tri sang phi, t trn xung di.
Nu gp im nh nn th b qua, nu gp im nh ni th tin hnh nh nhn. Trc khi
nh nhn cho mi im nh ni, ta cn quan tm n gi tr ca im nh pha trn v im
nh bn tri ca im nh ta ang xt. Nu cc im nh ny c nh nhn th im nh
ang xt c nh nhn trng vi im nh trn hoc im nh bn tri . Nu cc im
nh bn trn v im nh bn tri l cc im nh nn th ta nh nhn mi cho im nh
ang xt.
Bc 2: Sau khi nh nhn tt c cc im nh ni, ta cn nhm cc im nh gn nhau
nhng li c nh nhn khc nhau li vi nhau.
Bc 3: Thc hin qut li v nh nhn mi cho cc nhm im nh va c nhm li
trn.
5. Nhn dng mc tiu

Nguyn B Long TH1 K49


L qu trnh xc nh chnh xc vt th cn nhn dng. Phng php c s dng y
l nhn dng da vo ng bin vt th. T bin dng ny ta s xc nh c cc nh,
cc cnh v c tm ca vt th. Phng php ph bin hin nay l phng php Cany.
Ni dung phng php Cany nh sau:
Bc 1: Lm trn nh bng b lc Gauss loi b nh hng ca nhiu
Bc 2: Tnh gradient ca cc phn t nh v hng ca gradient
M (i, j ) = g i2 (i, j ) + g 2j (i, j ) i

(i, j ) = tan 1 [g j (i, j ).g i (i, j )]

Xc nh ngng:
M (i, j )
M T (i, j ) =
0

M (i, j ) T
M (i, j ) < T

6. Xc nh tm vt th
Sau khi nhn dng c vt th trong khng gian lm vic, ta c th k cc ng bao
quanh vt v d dng xc nh c tm ca vt th.

Phn 2. Th vin x l nh OpenCV


I.

Gii thiu chung v th vin OpenCV

OpenCV (Intel Open Source Computer Vision Library) l mt th vin m ngun m


ca Intel vit cho x l nh. l s kt hp cc hm ca C vi mt vi lp ca C++ thc
hin nhiu thut ton x l nh rt ph bin. Vi khong trn 300 hm C v mt vi lp C++
c vit ring cho x l nh, OpenCV thc s l mt cng c mnh m thc hin qu
trnh x l nh.
II.

Ci t OpenCV trong Window

Qu trnh ci t OpenCV bao gm cc bc sau:


-

Ti phn mm OpenCV trn trang Web ca Intel

Nhy p vo biu tng Setup OpenCV_1.0

Mn hnh Setup hin ln nh sau:

Nguyn B Long TH1 K49

Nhn vo nt Next
-

Ca s tip theo hin ln:

Chn I accept the agreement


-

Tip tc nhn nt Next mt vi ln na cho n ca s sau:

Nguyn B Long TH1 K49

Chn Install tin hnh ci t


-

Qu trnh ci t bt u:

Sau mt thi gian, qu trnh ci t thc hin xong. Kch vo nt Finish hon tt
qu trnh ci t.

Nguyn B Long TH1 K49

III.

Lin kt OpenCV vo Visual C ++

Sau khi ci t xong OpenCV vo my, c th vit c cc chng trnh x l nh s


dng cc hm trong th vin Open CV ta phi tin hnh lin kt n vi Visual Studio 6.0.
Cc bc thc hin qu trnh lin kt nh sau:
-

Khi ng chng trnh Visual Studio 6.0

Vo menu Tools >> Options >> Chn th Directories >>

Ti Show directories for, ta chn Include files:


Ti Directories, ta nhn vo hnh ch nht c nt t v Browse n cc th mc sau:
C:\PROGRAM FILES\OPENCV\CV\INCLUDE
C:\PROGRAM FILES\OPENCV\OTHERLIBS\HIGHGUI
C:\PROGRAM FILES\OPENCV\CXCORE\INCLUDE
C:\PROGRAM FILES\OPENCV\OTHERLIBS\CVCAM\INCLUDE
add cc Include files vo Visual Studio 6.0

Nguyn B Long TH1 K49

Tip theo, ti Show Directories ta chn Library files v add th vin sao vo Visual Studio
6.0
C:\PROGRAM FILES\OPENCV\LIB

Sau nhn OK
Bc tip theo, ta vo menu Project >> Settings
Ti ca s Project Settings ta chn th Link
Ti Object/library modules, ta thm cc th vin sau:
cv.lib
highgui.lib

Nguyn B Long TH1 K49


cxcore.lib
strmbase.lib

Sau nhn OK kt thc qu trnh nhng OpenCV vo Visual Studio 6.0


Ch : Sau khi vit xong mt chng trnh x l nh ta cn copy tt c cc file trong th
mc C:\Program Files\OpenCV\bin vo th mc cha chng trnh m bo c cc
file th vin ng cho chng trnh chy hon ho.

Phn 3. Mt s chng trnh x l nh u


tin
1. Chng trnh chp v lu nh
#include "stdio.h"
#include "cv.h"
#include "highgui.h"

Nguyn B Long TH1 K49


#include "cxcore.h"
int main (void)
{
CvCapture* capture = cvCaptureFromCAM (CV_CAP_ANY);
cvNamedWindow( "Pic 1", CV_WINDOW_AUTOSIZE);
IplImage *frame = cvQueryFrame (capture);
cvShowImage ("Pic 1", frame);
cvSaveImage("Picture.jpg",frame);
cvWaitKey(100);
cvReleaseCapture (&capture);
cvDestroyWindow ("Pic 1");
return 0;
}

2. Chng trnh xc nh phn b mc xm ca nh


include <cv.h>
#include <highgui.h>
#include <stdio.h>
#include <stdlib.h>
int main( int argc, char** argv )
{
int index = 0;
int bin_w,i;
float max_value = 0;
float range_0[]={0,256};
float* ranges[] = { range_0 };
IplImage *dst_image = 0, *hist_image = 0;
IplImage* src = 0;IplImage* src1 = 0;

Nguyn B Long TH1 K49


CvHistogram *hist;
CvMat* lut_mat;
int hist_size = 256;
uchar lut[256];
CvCapture* capture = 0;
capture = cvCreateCameraCapture( index );
src1 = cvQueryFrame( capture );
cvSaveImage( "Long.jpg" ,src1 );
char file_name[] = "Long.jpg";
src = cvLoadImage( file_name, CV_LOAD_IMAGE_GRAYSCALE);
dst_image = cvCloneImage(src);
hist_image = cvCreateImage(cvSize(320,200), 8, 1);
hist = cvCreateHist(1, &hist_size, CV_HIST_ARRAY, ranges, 1);
lut_mat = cvCreateMatHeader( 1, 256, CV_8UC1 );
for( i = 0; i < 256; i++ )
lut[i] = (uchar)i ;
cvSetData( lut_mat, lut, 0 );
cvLUT( src, dst_image, lut_mat );
cvCalcHist( &dst_image, hist, 0, 0 );
cvZero( dst_image );
cvGetMinMaxHistValue( hist, 0, &max_value, 0, 0 );
cvScale( hist->bins, hist->bins, ((double)hist_image->height)/max_value, 0 );
cvSet( hist_image, cvScalarAll(255), 0 );
bin_w = cvRound((double)hist_image->width/hist_size);
for( i = 0; i < hist_size; i++ )
cvRectangle( hist_image, cvPoint(i*bin_w, hist_image->height),
cvPoint((i+1)*bin_w, hist_image->height - cvRound (cvGetReal1D(hist>bins,i))),cvScalarAll(0), -1, 8, 0 );
cvNamedWindow( "Capture", 1 );
cvShowImage( "Capture", src1 );

Nguyn B Long TH1 K49


cvNamedWindow("Image", 1);
cvShowImage( "Image", src );
cvNamedWindow("Histogram", 1);
cvShowImage( "Histogram", hist_image );
cvWaitKey(0);
cvReleaseImage(&src);
cvReleaseImage(&dst_image);
cvReleaseHist(&hist);
return 0;
}

3. Chng trnh nhn dng bin vt th


#include "cv.h"
#include "highgui.h"
#include "stdio.h"
int main( int argc, char** argv )
{
IplImage* image; IplImage* src;
char* filename = argc == 2 ? argv[1] : (char*)"Long.jpg";
image = cvLoadImage( filename, 0);
src = cvCreateImage( cvGetSize(image), 8, 0 );
cvEqualizeHist( image , src);
// Phan vung anh
IplImage* dst = cvCreateImage( cvGetSize(src), 8, 3 );
CvMemStorage* storage = cvCreateMemStorage(0);
CvSeq* contour = 0;
cvNamedWindow( "Source1", 1 );
cvShowImage( "Source1", src );

Nguyn B Long TH1 K49


cvThreshold( src, src, 230, 255, CV_THRESH_BINARY );// xac dinh nguong
cvNamedWindow( "Source2", 1 );
cvShowImage( "Source2", src );
cvFindContours( src, storage, &contour, sizeof(CvContour), CV_RETR_CCOMP,
CV_CHAIN_APPROX_SIMPLE, cvPoint(0,0) );
cvZero( dst );
int i = 0;
for( ; contour != 0; contour = contour->h_next )
{
i = i++ ;
printf("\n so %i

%d.", i ,contour);

CvScalar color = CV_RGB( rand()&255, rand()&255, rand()&255 );


cvDrawContours( dst, contour, color, color, 1, 1, 8 );
}
cvNamedWindow( "Components", 1 );
cvShowImage( "Components", dst );
cvWaitKey(0);
cvReleaseImage(&dst);
cvReleaseImage(&src);
cvReleaseImage(&image);
cvDestroyWindow("Components");
cvDestroyWindow("Source1");
cvDestroyWindow("Source2");
return 0;
}

You might also like