su li anh vs open cv.pdf

69
Bộ môn TGMT và KH Rô-bốt Khoa Công nghệ thông tin ĐH Khoa học tự nhiên TP HCM SỬ DỤNG OPENCV [CTT451] – [Nhập môn Thị giác Máy tính] Tháng 3/2013

Upload: duong-thai-nguyen

Post on 24-Nov-2015

40 views

Category:

Documents


0 download

TRANSCRIPT

  • B mn TGMT v KH R-bt

    Khoa Cng ngh thng tin

    H Khoa hc t nhin TP HCM

    S DNG OPENCV

    [CTT451] [Nhp mn Th gic My tnh]

    Thng 3/2013

  • B mn TGMT & KHR | Khoa CNTT | H KHTN TP.HCM | Thng 3/2013

    Trang 1

    MC LC 1. Chun b: ........................................................................................................ 2

    2. Cu hnh OpenCV vi Visual Studio C++ .................................................... 2

    3. Chng trnh u tin .................................................................................... 6

    4. Chng trnh th hai: .................................................................................... 7

    5. Bi tp ............................................................................................................ 8

  • B mn TGMT & KHR | Khoa CNTT | H KHTN TP.HCM | Thng 3/2013

    Trang 2

    CU HNH OPENCV VI VS C++ 1. Chun b:

    Download OpenCV ti: http://opencv.org/downloads.html, hoc download th

    vin OpenCV c bin dch sn: http://www.mediafire.com/?gda0fgqi5u8h7.

    Gm 3 th mc nh sau:

    2. Cu hnh OpenCV vi Visual Studio C++

  • B mn TGMT & KHR | Khoa CNTT | H KHTN TP.HCM | Thng 3/2013

    Trang 3

    To project Lab1:

    T Menu Project References

  • B mn TGMT & KHR | Khoa CNTT | H KHTN TP.HCM | Thng 3/2013

    Trang 4

    Chn Configuration Properties C/C++ General

    Chn Configuration Properties Linker General

  • B mn TGMT & KHR | Khoa CNTT | H KHTN TP.HCM | Thng 3/2013

    Trang 5

    Chn Configuration Properties Linker Input

    Sao chp cc file ui *.dll vo th mc debug ca Project

  • B mn TGMT & KHR | Khoa CNTT | H KHTN TP.HCM | Thng 3/2013

    Trang 6

    3. Chng trnh u tin

    Vit chng trnh ti v hin mt tp tin nh cho trc ln mn hnh.

    Sau khi to project, b sung on chng trnh sau:

    #include "stdafx.h" #include #include #include int _tmain(int argc, _TCHAR* argv[]) { IplImage * img = cvLoadImage("C:\\hinh1.jpg"); if ( img != NULL ) { cvNamedWindow( "My window" ); cvShowImage( "My window", img ); cvWaitKey();//i ngi dng nhn 1 phm bt k cvReleaseImage( &img ); //Gii phng vng nh cvDestroyWindow( "My window" ); //ng ca s } return 0; }

  • B mn TGMT & KHR | Khoa CNTT | H KHTN TP.HCM | Thng 3/2013

    Trang 7

    on chng trnh trn s ti mt nh ln b nh v hin th ra mn hnh. Ta xem

    xt mt s dng lnh chnh:

    IplImage * img = cvLoadImage("C:\\hinh1.jpg");

    Hm cvLoadImage() thc hin ti nh da vo tn file c truyn vo,

    ng thi cp pht mt vng nh cn thit cho cu trc d liu nh. Hm ny tr v

    mt con tr tr ti vng nh c cp pht trn.

    cvNamedWindow( "My window" );

    Hm cvNamedWindow to mt ca s trn mn hnh cha v hin th nh.

    cvShowImage( "My window", img );

    Chng ta c mt nh di dng mt con tr IplImage *, v hin th n

    ln ca s va to thng qua hm cvShowImage().

    4. Chng trnh th hai:

    Vit chng trnh pht mt on video:

    #include

    int main( int argc, char** argv ) { cvNamedWindow( "Example2", CV_WINDOW_AUTOSIZE ); CvCapture* capture = cvCreateFileCapture("C:\\video1.avi"); IplImage* frame; while(1) { frame = cvQueryFrame( capture ); if( !frame ) break; cvShowImage( "Example2", frame ); char c = cvWaitKey(33); if( c == 27 ) break; } cvReleaseCapture( &capture ); cvDestroyWindow( "Example2" ); }

    CvCapture* capture = cvCreateFileCapture("video1.avi");

  • B mn TGMT & KHR | Khoa CNTT | H KHTN TP.HCM | Thng 3/2013

    Trang 8

    Hm cvCreateFileCapture() vi tham s truyn vo l tn on video

    cn load on video v s tr v con tr tr ti cu trc CvCapture. Cu trc ny

    s cha ton b thng tin on video c c.

    frame = cvQueryFrame( capture );

    Bn trong vng lp while, bt u c on video. Hm cvQueryFrame()

    bt frame k tip trong on video trn vo vng nh (vng nh ny l mt phn

    ca cu trc CvCapture c cp pht trc ). Mt con tr c tr v cho

    frame c bt gi ny. V cvQueryFrame s dng vng nh c cp pht

    cho cu trc nn khng cn gi hm cvReleaseImage() cho frame ny.

    5. Bi tp

    Vit chng trnh chuyn nh sang nh mc xm (grayscale).

  • B mn TGMT v KH R-bt

    Khoa Cng ngh thng tin

    H Khoa hc t nhin TP HCM

    LP TRNH VI OPENCV

    [CTT451] [Nhp mn Th gic My tnh]

    Thng 3/2013

  • B mn TGMT & KHR | Khoa CNTT | H KHTN TP.HCM | Thng 3/2013

    Trang 1

    MC LC 1. Mt s hm thng dng trong OpenCV ........................................................ 2

    2. Ti v hin th nh ......................................................................................... 3

    3. Chuyn nh t h mu sang nh xm ....................................................... 5

    4. Tch cc knh mu ca nh RGB .................................................................. 6

    5. Bi tp ............................................................................................................ 7

  • B mn TGMT & KHR | Khoa CNTT | H KHTN TP.HCM | Thng 3/2013

    Trang 2

    LP TRNH VI OPENCV 1. Mt s hm thng dng trong OpenCV

    Hm c nh t file:

    IplImage* cvLoadImage(string strPathName);

    Hm sao chp nh:

    void cvCopyImage(IplImage* src, IplImage* dst); IplImage* cvCloneImage( const IplImage* image);

    Hm hy i tng nh:

    void cvReleaseImage ( IplImage** image);

    Hm to ca s:

    cvNamedWindow(char* strWindowName, int flag); flag nu l s l th hin th ng kch thc nh.

    Hin th nh trn ca s:

    cvShowImage (char* strWindowName, IplImage* img);

    Hm chuyn i h mu:

    void cvCvtColor(IplImage* src, IplImage* dst, int code); Hng s code quy nh cch chuyn i c dng:

    CV_2

    VD:

    CV_BGR2HSV

    CV_RGB2GRAY

    CV_HSV2BGR

    Tch cc knh mu:

    cvCvtPixToPlane ( IplImage* src, IplImage* img1, IplImage* img2, IplImage* img3, IplImage* img4); Trn cc knh mu:

    void cvCvtPlaneToPix( const CvArr* src0, const CvArr* src1, const CvArr* src2, const CvArr* src3, CvArr* dst);

  • B mn TGMT & KHR | Khoa CNTT | H KHTN TP.HCM | Thng 3/2013

    Trang 3

    2. Ti v hin th nh

    To lp IplImageWrapper nh sau: class IplImageWrapper { protected: IplImage* _srcImg; IplImage* _destImg; int _width, _height; IplImage *r_plane, *b_plane, *g_plane; public: IplImageWrapper(); ~IplImageWrapper(); void LoadImage(char* path); void ShowImage(char* windowName, int img = 0); void RGB2GRAY1(); void RGB2GRAY2();

    void PixToPlane(); void PixToPlane2();

    };

    Lp gm c 2 bin _srcImg v _destImg l nh ngun v nh ch, hai bin _width, _height lu li kch thc nh v cc bin r_plane, b_plane, g_plane cha tng knh mu ca nh.

    Hm constructor v destructor:

    IplImageWrapper::IplImageWrapper() { _srcImg = NULL; _destImg = NULL; } IplImageWrapper::~IplImageWrapper() { if(_srcImg != NULL) cvReleaseImage(&_srcImg); if(_destImg != NULL) cvReleaseImage(&_destImg); }

    Xy dng hm LoadImage v ShowImage nh sau:

  • B mn TGMT & KHR | Khoa CNTT | H KHTN TP.HCM | Thng 3/2013

    Trang 4

    void IplImageWrapper::LoadImage(char* path) { if(_srcImg != NULL) cvReleaseImage(&_srcImg); _srcImg = cvLoadImage(path); if(_srcImg != NULL) { _width = _srcImg->width; _height = _srcImg->height; } } Hm c chc nng load nh t ng dn path v c tr bi con tr _srcImg.

    void IplImageWrapper::ShowImage(char* windowName, int img) { IplImage* image; if(img == 0) image = _srcImg; else if(img = 1) image = _destImg; else if(img = 2) image = b_plane;

  • B mn TGMT & KHR | Khoa CNTT | H KHTN TP.HCM | Thng 3/2013

    Trang 5

    else if(img = 3) image = g_plane; else if(img = 4) image = r_plane; if(image != NULL) { cvNamedWindow(windowName,1); cvShowImage(windowName,image); } }

    Hm to ca s c tn windowName v hin th nh ln ca s ny.

    3. Chuyn nh t h mu sang nh xm

    Chuyn nh t h mu sang nh xm s dng hm ca OpenCV

    void IplImageWrapper::RGB2GRAY1() { if(_destImg != NULL) cvReleaseImage(&_destImg); _destImg = cvCreateImage(cvSize(_width, _height), IPL_DEPTH_8U, 1); cvCvtColor(_srcImg, _destImg, CV_RGB2GRAY); }

    Chuyn nh t h mu sang nh xm da vo cng thc:

    Gray = 0.299 * R + 0.587 * G + 0.114 * B

    void IplImageWrapper::RGB2GRAY2() { int step, channels; step = _srcImg->widthStep; channels = _srcImg->nChannels; _destImg = cvCloneImage(_srcImg); uchar* dataGray; dataGray = (uchar*)_destImg->imageData; int i, j; for(i = 0; i < _height; i++) for (j = 0; j < _width; j++) { uchar r,g,b,gray_value; b = dataGray[i*step+j*channels]; g = dataGray[i*step+j*channels + 1];

  • B mn TGMT & KHR | Khoa CNTT | H KHTN TP.HCM | Thng 3/2013

    Trang 6

    r = dataGray[i*step+j*channels + 2]; gray_value = (int)(r*0.3 + g*0.59

    + b*0.11); dataGray[i*step+j*channels] = dataGray[i*step+j*channels + 1] = dataGray[i*step+j*channels + 2] =

    gray_value; } }

    4. Tch cc knh mu ca nh RGB

    Tch cc knh mu s dng hm ca OpenCV

    void IplImageWrapper::PixToPlane() { r_plane = cvCreateImage(cvSize(_width,_height), 8, 1); g_plane = cvCreateImage(cvSize(_width,_height), 8, 1); b_plane = cvCreateImage(cvSize(_width,_height), 8, 1); cvCvtPixToPlane(_srcImg, b_plane, g_plane, r_plane, NULL); }

    Tch cc knh mu (truy cp d liu nh)

    void IplImageWrapper::PixToPlane2()

  • B mn TGMT & KHR | Khoa CNTT | H KHTN TP.HCM | Thng 3/2013

    Trang 7

    { int i, j, step, channels; step = _srcImg->widthStep; channels = _srcImg->nChannels; b_plane = cvCloneImage(_srcImg); g_plane = cvCloneImage(_srcImg); r_plane = cvCloneImage(_srcImg); uchar *dataB, *dataG, *dataR; dataB = (uchar *)b_plane->imageData; dataG = (uchar *)g_plane->imageData; dataR = (uchar *)r_plane->imageData; for(i = 0; i < _height; i++) for (j = 0; j < _width; j++) { dataB[i*step+j*channels+1] = 0; dataB[i*step+j*channels+2] = 0; dataG[i*step+j*channels] = 0; dataG[i*step+j*channels+2] = 0; dataR[i*step+j*channels] = 0; dataR[i*step+j*channels+1] = 0; } }

    5. Bi tp

    o To nh m bn (negative image) ca nh mc xm

    o To nh m bn ca nh mu

  • B mn TGMT & KHR | Khoa CNTT | H KHTN TP.HCM | Thng 3/2013

    Trang 8

    o Thc hin cng thm mt hng s vo gi tr ti mi im nh trn nh

    mc xm.

    o Thc hin vi 3 hng s, mi hng s c dng cng vo gi tr ca

    knh mu tng ng ti mi im trn nh mu.

  • B mn TGMT v KH R-bt

    Khoa Cng ngh thng tin

    H Khoa hc t nhin TP HCM

    CAMERA CALIBRATION

    [CTT451] [Nhp mn Th gic My tnh]

    Thng 3/2013

  • B mn TGMT & KHR | Khoa CNTT | H KHTN TP.HCM | Thng 3/2013

    Trang 1

    MC LC Mt s hm Camera Calibration trong OpenCV ........................................... 2 1.

    Tnh cc tham s intrinsic v extrinsic ca camera ....................................... 3 2.

    2.1. Xc nh cc im gc trn nh bn c: ...................................................... 3

    2.2. Tm cc tham s intrinsic v extrinsic ......................................................... 4

    Bi tp ............................................................................................................ 4 3.

  • B mn TGMT & KHR | Khoa CNTT | H KHTN TP.HCM | Thng 3/2013

    Trang 2

    CAMERA CALIBRATION Mt s hm Camera Calibration trong OpenCV 1.

    S dng bn c nh sau:

    - Hm xc nh v tr cc gc ca bn c:

    int cvFindChessboardCorners(

    const void* image,

    CvSize patternSize, CvPoint2D32f* corners,

    int* cornerCount=NULL,

    int flags=CV_CALIB_CB_ADAPTIVE_THRESH)

    - V cc gc trn bn c:

    void cvDrawChessboardCorners(

    CvArr* image,

    CvSize pattern_size,

    CvPoint2D32f* corners,

    int count,

    int pattern_was_found);

    - Tnh cc tham s intrinsic v extrinsic ca camera:

    void cvCalibrateCamera2(

    CvMat* object_points,

    CvMat* image_points,

    int* point_counts,

    CvSize image_size,

    CvMat* intrinsic_matrix,

    CvMat* distortion_coeffs,

    CvMat* rotation_vectors = NULL,

    CvMat* translation_vectors = NULL,

  • B mn TGMT & KHR | Khoa CNTT | H KHTN TP.HCM | Thng 3/2013

    Trang 3

    int flags = 0);

    - Tnh undistortion map:

    void cvInitUndistortMap(

    const CvMat* cameraMatrix,

    const CvMat* distCoeffs,

    CvArr* map1,

    CvArr* map2);

    Tnh cc tham s intrinsic v extrinsic ca camera 2.

    Cho tp nh bn c sau:

    (http://courses.fit.hcmus.edu.vn/file.php/1893/Checkerboard.rar)

    2.1. Xc nh cc im gc trn nh bn c: while(done!=-1)

    { char path[200]; strcpy(path, search_dir); strcat(path, fileinfo.name); //Load image from folder image = cvLoadImage(path, 1); cvShowImage("Original Image",image); gray_image = cvCreateImage( cvGetSize( image ), 8, 1 ); // Find chessboard corners:

  • B mn TGMT & KHR | Khoa CNTT | H KHTN TP.HCM | Thng 3/2013

    Trang 4

    int found = cvFindChessboardCorners( image, board_sz, corners, &corner_count, CV_CALIB_CB_ADAPTIVE_THRESH | CV_CALIB_CB_FILTER_QUADS );

    // Get subpixel accuracy on those corners cvCvtColor( image, gray_image, CV_BGR2GRAY ); cvFindCornerSubPix(gray_image, corners, corner_count, cvSize(11, 11 ), cvSize( -1, -1 ), cvTermCriteria( CV_TERMCRIT_EPS+CV_TERMCRIT_ITER, 30, 0.1 )); // Draw it cvDrawChessboardCorners(image,board_sz,corners,corner_count, found ); cvShowImage( "Calibration", image ); // If we got a good board, add it to our data if( corner_count == board_n ) { step = successes*board_n; for( int i=step, j=0; j < board_n; ++i, ++j ) {

    CV_MAT_ELEM( *image_points, float, i, 0 ) = corners[j].x; CV_MAT_ELEM( *image_points, float, i, 1 ) = corners[j].y;

    CV_MAT_ELEM( *object_points, float, i, 0 ) = j/board_w; CV_MAT_ELEM( *object_points, float, i, 1 ) = j%board_w; CV_MAT_ELEM( *object_points, float, i, 2 ) = 0.0f; } CV_MAT_ELEM( *point_counts, int, successes, 0 ) = board_n; successes++; } cvWaitKey(500); done = _findnext( handle, &fileinfo ); }

    on code s ln lt load cc nh trong th mc c ng dn l

    search_dir. Vi mi nh s tin hnh tm cc im gc.

    2.2. Tm cc tham s intrinsic v extrinsic // Calibrate the camera cvCalibrateCamera2( object_points2, image_points2, point_counts2, cvGetSize( image ), intrinsic_matrix, distortion_coeffs, NULL, NULL, CV_CALIB_FIX_ASPECT_RATIO );

    // Save the intrinsics and distortions cvSave( "Intrinsics.xml", intrinsic_matrix ); cvSave( "Distortion.xml", distortion_coeffs );

    Bi tp 3.

    - T tp cc nh bn c

    (http://courses.fit.hcmus.edu.vn/file.php/1893/Checkerboard.rar ) tm cc

    im gc v tnh cc tham s intrinsic v extrinsic.

    - Hin th nh Undistort.

  • CANNY EDGE DETECTION

    [CTT451] [Nhp mn Th gic My tnh]

    Thng 4/2013

    B mn TGMT v KH R-bt

    Khoa Cng ngh thng tin

    H Khoa hc t nhin TP HCM

  • B mn TGMT & KHR | Khoa CNTT | H KHTN TP.HCM | Thng 4/2013 2

    MC LC MC LC ........................................................................................................................... 1

    1 Thut ton Pht hin cnh Canny ................................................................................ 3

    2 Ci t thut ton pht hin cnh bng OpenCV ........................................................ 4

    3 Bi tp .......................................................................................................................... 6

    Ti liu tham kho ............................................................................................................... 7

  • B mn TGMT & KHR | Khoa CNTT | H KHTN TP.HCM | Thng 4/2013 3

    1 Thut ton Pht hin cnh Canny Bc 1: Gim nhiu

    Thng thng gim nhiu s dng cc b lc lm m. C th s dng b lc

    Gaussian tch chp vi nh:

    2 4 5 4 2

    4 9 12 9 4

    5 12 15 12 5

    4 9 12 9 4

    2 4 5 4 2

    Bc 2: Tnh ln v gc ca Gradient

    Tnh o hm ( ) v ( ) theo chiu x v y ca nh. Mt s b lc nh:

    Roberts, Prewitt, Sobel.

    B lc Sobel 3x3:

    -1 0 1 1 2 1

    -2 0 2 0 0 0

    -1 0 1 -1 -2 -1

    ln Gradient:

    ( ) ( )

    Gc Gradient:

    ( ( )

    ( ))

    Tnh bng cch lm trn t gc vo mt trong bn hng: 00, 450, 900, 1350.

  • B mn TGMT & KHR | Khoa CNTT | H KHTN TP.HCM | Thng 4/2013 4

    Bc 3: chn khng cc i (Non-Maximum Surpression)

    Bc ny ch gi li nhng pixel thuc cnh m c ln gradient ln nht

    Xem xt 3 pixel trong vng 3 x 3 xung quanh pixel (x,y):

    - Nu (x, y) = 00 th (x+1, y), (x, y) v (x-1, y) c xem xt.

    - Nu (x, y) = 900 th (x, y+1), (x, y) v (x, y-1).

    - Nu (x, y) = 450 th (x+1, y+1), (x, y) v (x-1, y-1).

    - Nu (x, y) = 1350 th (x-1, y+1), (x, y) v (x+1, y-1).

    Nu pixel (x, y) c gradient ln nht ca 3 pixel xem xt th pixel l cnh.

    Bc 4: Ngng Hysteresis (Hysteresis Thresholding)

    Hysteresis s dng 2 ngng, ngng thigh v tlow. Pixel m c ln gradient D <

    tlow th c loi ngay lp tc. Nhng pixel tlow < D < thigh c gi li nu l mt cnh

    lin tc vi nhng pixel c ln gradient D > thigh.

    2 Ci t thut ton pht hin cnh bng OpenCV Xy dng class Canny nh sau:

    class Canny { protected: IplImage *_srcImg, *_destImg; int _width, _height; int _lowThreshold, _maxThreshold; public: Canny(int low, int max) { _srcImg = NULL;

  • B mn TGMT & KHR | Khoa CNTT | H KHTN TP.HCM | Thng 4/2013 5

    _destImg = NULL; _lowThreshold = low; _maxThreshold = max; } int CannyEdgeDetection(char *path); };

    Hm CannyEdgedetection:

    int Canny::CannyEdgeDetection(char *path) { _srcImg = cvLoadImage(path); if(_srcImg == NULL) return 0; cvNamedWindow("Image"); cvShowImage("Image", _srcImg); IplImage *grayImg, *blurImg; grayImg = cvCreateImage(cvGetSize(_srcImg), IPL_DEPTH_8U, 1); cvCvtColor(_srcImg, grayImg, CV_BGR2GRAY); cvNamedWindow("Gray Image"); cvShowImage("Gray Image", grayImg); blurImg = cvCreateImage(cvGetSize(_srcImg), IPL_DEPTH_8U, 1); cvSmooth(grayImg, blurImg, CV_GAUSSIAN, 5, 5);

    cvNamedWindow("Blur Image"); cvShowImage("Blur Image", blurImg);

    _destImg = cvCreateImage(cvGetSize(_srcImg), IPL_DEPTH_8U, 1); cvCanny(blurImg, _destImg, _lowThreshold, _maxThreshold, 3); cvNamedWindow("Canny Edge Detection"); cvShowImage("Canny Edge Detection",_destImg); return 1; }

  • B mn TGMT & KHR | Khoa CNTT | H KHTN TP.HCM | Thng 4/2013 6

    3 Bi tp Vit chng trnh pht hin bin cnh da vo thut ton Canny nh trong mc 1.

  • B mn TGMT & KHR | Khoa CNTT | H KHTN TP.HCM | Thng 4/2013 7

    Ti liu tham kho [1] Canny, J., A Computational Approach To Edge Detection, IEEE Trans. Pattern

    Analysis and Machine Intelligence, 8(6):679698, 1986.

  • SIFT HARRIS - BLOB

    [CTT451] [Nhp mn Th gic My tnh]

    Thng 4/2013

    B mn TGMT v KH R-bt

    Khoa Cng ngh thng tin

    H Khoa hc t nhin TP HCM

  • B mn TGMT & KHR | Khoa CNTT | H KHTN TP.HCM | Thng 4/2013 2

    MC LC MC LC ........................................................................................................................... 1

    1 Scale invariant feature transform (SIFT) ..................................................................... 3

    1.1 Xy dng khng gian t l ......................................................................................... 3

    1.2 D tm cc tr cc b ................................................................................................. 4

    1.3 Loi b keypoint c tng phn (contrast) thp................................................... 4

    1.4 Loi b keypoint nm trn bin cnh ........................................................................ 5

    1.5 Gn hng cho keypoint ........................................................................................... 5

    1.6 Miu t c trng ....................................................................................................... 6

    2 Thut ton pht hin gc Harris .................................................................................. 7

    3 Thut ton pht hin Blob ........................................................................................... 8

    4 Bi tp .......................................................................................................................... 9

    Ti liu tham kho ............................................................................................................. 10

  • B mn TGMT & KHR | Khoa CNTT | H KHTN TP.HCM | Thng 4/2013 3

    1 Scale invariant feature transform (SIFT)

    1.1 Xy dng khng gian t l

    - Khng gian t l (scale space) gm cc nh , tch chp

    (convolution) ca lc Gaussian vi nh u vo .

    - Khng gian t l c chia thnh tng octave, mi octave gm 1 s nguyn s

    nh. Cc nh tch chp vi lc Gaussian khc nhau tham s k, .

    Phi to ra s + 3 nh cho mi octave, nh c lm m th i trong octave s

    l .

    - Difference-of-Gaussian c s dng pht hin im trng yu

    (keypoint) trong khng gian t l, bng cch tr 2 nh L k nhau trong

    octave nh trong Error! Reference source not found..

    (1.1)

    - Sau khi x l xong trn 1 octave, nh u tin trong octave k tip c

    gim kch thc i mt na.

  • B mn TGMT & KHR | Khoa CNTT | H KHTN TP.HCM | Thng 4/2013 4

    1.2 D tm cc tr cc b

    - Tm cc i v cc tiu ca cc , mi im c so snh vi 8 ln

    cn trong nh hin ti, v 9 ln cn trong scale trn v scale di. Mt im

    c chn ch khi hoc n ln hn tt c hoc nh hn tt c cc ln cn.

    1.3 Loi b keypoint c tng phn (contrast) thp

    p dng khai trin Taylor cp 2 cho hm .

    (1.2)

    Trong :

    o hm cp 1 ca D ti x:

    (

    )

    o hm cp 2 ca D ti x:

    (

    )

    Ly o hm ca D(x) v cho bng khng:

    (1.3)

  • B mn TGMT & KHR | Khoa CNTT | H KHTN TP.HCM | Thng 4/2013 5

    Nu ti bt k hng no th im cc tr nm gn mt keypoint

    khc hn l keypoint ang xt, loi keypoint ang xt.

    Gi tr ca hm c s dng loi nhng cc tr c tng phn thp,

    thay vo D ta c:

    Nhng cc tr c gi tr | | s c loi b (gi s gi tr

    xm ca im nh nm trong on [0,1]).

    1.4 Loi b keypoint nm trn bin cnh

    Tin hnh loi b cc im nm trn bin cnh, s khng n nh nu c

    mt lng nhiu nh. Phng php Harris c dng xc nh xem 1

    keypoint nm gc, bin cnh hay trn vng phng.

    [

    ] (1.4)

    o hm c c lng thng qua hiu s cc im ln cn. trnh tnh

    cc gi tr ring, m ch cn quan tm ti t s ca chng. Gi l hai gi

    tr ring ca H.

    ( )

    Gi r l t s gia 2 gi tr ring:

    Ch gi li nhng keypoint m c:

    Ngng ngh r = 10.

    1.5 Gn hng cho keypoint

    Gn mt hng thch hp cho keypoint da trn c tnh cc b ca nh, v

    vy bt bin vi php quay nh.

    Vi mi nh c lm m L(x,y) scale gn nht m keypoint c pht hin,

    ln gradient v hng c tnh:

  • B mn TGMT & KHR | Khoa CNTT | H KHTN TP.HCM | Thng 4/2013 6

    ( )

    Lc hng gm 36 bins biu din ht 360o ca cc hng gradient.

    Cc im xung quanh keypoint c thm vo lc bng ln gradient v

    ca s trn trng s Gaussian.

    Tm nh cao nht trong lc , cc nh cn li m t 80% so vi nh

    cao nht, th s to keypoint ng vi hng ny.

    1.6 Miu t c trng

    Tnh ln v hng gradient ca mi im xung quanh keypoint. Hm

    Gaussian c dng gn trng s ln ch mi im. Kch thc vng

    xung quanh keypoint l 16x16, v c chia thnh 4x4 vng con.

    Vector miu t c trng cha gi tr ca tt c lc hng. Vng con

    4x4 ca lc biu din 8 hng cho mi bin. S thnh phn ca vector c

    trng cho mi keypoint l 4x4x8 = 128.

  • B mn TGMT & KHR | Khoa CNTT | H KHTN TP.HCM | Thng 4/2013 7

    2 Thut ton pht hin gc Harris Tnh o hm theo x v y ca nh

    Tnh tch ti mi pixel ca o hm v

    p b lc Gaussian ln , v

    Ti mi pixel:

    [

    ]

    Gi:

    A =

    B =

    C =

    M = det(H) k * Trace(H)2 > ngng

    Tnh nonmax suppression

    Ti mi pixel, gi tr M(x,y) khng ln hn cc pixel xung quanh (3 x 3) th

    loi pixel ny.

  • B mn TGMT & KHR | Khoa CNTT | H KHTN TP.HCM | Thng 4/2013 8

    3 Thut ton pht hin Blob Xy dng khng gian t l (scale space):

    T nh ban u to ra cc nh m vi mc khc nhau. Sau thay i kch

    thc nh ban u xung mt na, v tip tc sinh ra cc nh m. Qu trnh c lp li

    nh th.

    to ra cc nh m c th p dng b lc Laplacian. C th xp x Laplacian bi

    Difference of Gaussians.

    Pht hin cc cc i (cc tiu) cc b: blob l cc v tr m c cc i cc b

    khng ch trong cng nh (8 pixel ln cn) m cn vi cc pixel trong hai nh t l ln

    cn (2 x 9 pixel ln cn), nh vy tng cng 8 + 18 pixel ln cn c xem xt.

  • B mn TGMT & KHR | Khoa CNTT | H KHTN TP.HCM | Thng 4/2013 9

    4 Bi tp - Vit chng trnh tm c trng SIFT.

    - Vit chng trnh pht hin gc Harris

    - Vit chn trnh pht hin Blob.

  • B mn TGMT & KHR | Khoa CNTT | H KHTN TP.HCM | Thng 4/2013 10

    Ti liu tham kho [1] David G. Lowe, "Distinctive image features from scale-invariant keypoints,"

    International Journal of Computer Vision, 60, 2 (2004), pp. 91-110.

    [2] C. Harris and M. Stephens (1988). "A combined corner and edge detector".

    Proceedings of the 4th Alvey Vision Conference. pp. 147151.

  • SPLIT AND MERGE

    ALGORITHM

    [CTT451] [Nhp mn Th gic My tnh]

    Thng 4/2013

    B mn TGMT v KH R-bt

    Khoa Cng ngh thng tin

    H Khoa hc t nhin TP HCM

  • B mn TGMT & KHR | Khoa CNTT | H KHTN TP.HCM | Thng 4/2013 2

    MC LC MC LC ........................................................................................................................... 1

    1 Cc thut ton Split v Merge ..................................................................................... 3

    2 Thut ton WaterShed ................................................................................................. 3

    3 Bi tp .......................................................................................................................... 5

    Ti liu tham kho ............................................................................................................... 6

  • B mn TGMT & KHR | Khoa CNTT | H KHTN TP.HCM | Thng 4/2013 3

    1 Cc thut ton Split v Merge Cho R biu din ton b vng ca nh, v mt logic v t P.

    - Split (chia nh): vi mi vng Ri, m P(Ri) = FALSE th chia nh Ri. Chia nh

    cc vng cho n khi cc vng Ri m P(Ri) = TRUE.

    - Merge (nhm li): nhm cc vng ln cn Ri v Rk nu ( ) .

    Mt s thut ton th hin t tng Slit v Merge ny nh:

    - Watershed

    - Region splitting

    - Region merging

    - Graph-based segmentation

    - Probabilistic aggregation

    2 Thut ton WaterShed Hm cho thut ton Watershed nh sau:

    void cvWatershed(const CvArr* image, CvArr* markers);

    Vi:

    image l nh mu 8 bit

    maker l nh knh n (IPL_DEPTH_32S) c cng kch thc vi image.

    Maker c th c c t mt n nh phn s dng cvFindContours() v

    cvDrawContours(). Tham kho on chng trnh FindContours v DrawContours

    sau:

    #include "cv.h" #include "highgui.h" int main( int argc, char** argv ) { IplImage* src; // the first command line parameter must be file name of binary // (black-n-white) image if( argc == 2 && (src=cvLoadImage(argv[1], 0))!= 0) { IplImage* dst = cvCreateImage( cvGetSize(src), 8, 3 ); CvMemStorage* storage = cvCreateMemStorage(0); CvSeq* contour = 0; cvThreshold( src, src, 1, 255, CV_THRESH_BINARY ); cvNamedWindow( "Source", 1 );

  • B mn TGMT & KHR | Khoa CNTT | H KHTN TP.HCM | Thng 4/2013 4

    cvShowImage( "Source", src ); cvFindContours( src, storage, &contour, sizeof(CvContour), CV_RETR_CCOMP, CV_CHAIN_APPROX_SIMPLE ); cvZero( dst ); for( ; contour != 0; contour = contour->h_next ) { CvScalar color = CV_RGB( rand()&255, rand()&255, rand()&255 ); /* replace CV_FILLED with 1 to see the outlines */ cvDrawContours( dst, contour, color, color, -1, CV_FILLED, 8 ); } cvNamedWindow( "Components", 1 ); cvShowImage( "Components", dst ); cvWaitKey(0); } }

  • B mn TGMT & KHR | Khoa CNTT | H KHTN TP.HCM | Thng 4/2013 5

    3 Bi tp - Ci t mt s thut ton Split v Merge:

    o Watershed

    o Region splitting

    o Region merging

    o Graph-based segmentation

    o Probabilistic aggregation

  • B mn TGMT & KHR | Khoa CNTT | H KHTN TP.HCM | Thng 4/2013 6

    Ti liu tham kho [1] Computer Vision: Algorithms and Applications, book draft by Richard Szeliski.

  • COMPUTATION

    HOMOGRAPHY

    [CTT451] [Nhp mn Th gic My tnh]

    Thng 5/2013

    B mn TGMT v KH R-bt

    Khoa Cng ngh thng tin

    H Khoa hc t nhin TP HCM

  • B mn TGMT & KHR | Khoa CNTT | H KHTN TP.HCM | Thng 4/2013 2

    MC LC MC LC ........................................................................................................................... 1

    1 ng dng Homography ............................................................................................... 3

    2 Chng trnh ................................................................................................................ 3

  • B mn TGMT & KHR | Khoa CNTT | H KHTN TP.HCM | Thng 4/2013 3

    1 ng dng Homography Tm mt i tng bit trc

    Cho i tng sau:

    Tm i tng trn trong hnh sau:

    Bc 1: pht hin cc keypoints s dng c trng SURF

    Bc 2: t tp cc keypoints c pht hin trn, tnh ton cc vector c trng

    (vector miu t).

    Bc 3: i snh cc vector miu t s dng FLANN matcher.

    - V cc i snh tt nht: l cc i snh nh hn ngng

    - Xc nh i tng trong nh

    2 Chng trnh #include "stdio.h" #include "iostream" #include "opencv/cv.h" #include "opencv/highgui.h"

  • B mn TGMT & KHR | Khoa CNTT | H KHTN TP.HCM | Thng 4/2013 4

    #include "opencv2/nonfree/features2d.hpp" #include "opencv2/legacy/legacy.hpp" #include "opencv2/core/core.hpp" using namespace cv; /** @function main */ int main( int argc, char** argv ) { Mat img_object = imread( "C:\\OPENCV245\\Test\\3.jpg", CV_LOAD_IMAGE_GRAYSCALE ); Mat img_scene = imread( "C:\\OPENCV245\\Test\\5.jpg", CV_LOAD_IMAGE_GRAYSCALE ); if( !img_object.data || !img_scene.data ) { std::cout max_dist ) max_dist = dist; } printf("-- Max dist : %f \n", max_dist ); printf("-- Min dist : %f \n", min_dist ); //-- Draw only "good" matches (i.e. whose distance is less than 3*min_dist ) std::vector< DMatch > good_matches; for( int i = 0; i < descriptors_object.rows; i++ ) { if( matches[i].distance < 3*min_dist ) { good_matches.push_back( matches[i]); }

  • B mn TGMT & KHR | Khoa CNTT | H KHTN TP.HCM | Thng 4/2013 5

    } Mat img_matches; drawMatches( img_object, keypoints_object, img_scene, keypoints_scene, good_matches, img_matches, Scalar::all(-1), Scalar::all(-1), vector(), DrawMatchesFlags::NOT_DRAW_SINGLE_POINTS ); //-- Localize the object std::vector obj; std::vector scene; for( int i = 0; i < good_matches.size(); i++ ) { //-- Get the keypoints from the good matches obj.push_back( keypoints_object[ good_matches[i].queryIdx ].pt ); scene.push_back( keypoints_scene[ good_matches[i].trainIdx ].pt ); } Mat H = findHomography( obj, scene, CV_RANSAC ); //-- Get the corners from the image_1 ( the object to be "detected" ) std::vector obj_corners(4); obj_corners[0] = cvPoint(0,0); obj_corners[1] = cvPoint( img_object.cols, 0 ); obj_corners[2] = cvPoint( img_object.cols, img_object.rows ); obj_corners[3] = cvPoint( 0, img_object.rows ); std::vector scene_corners(4); perspectiveTransform( obj_corners, scene_corners, H); //-- Draw lines between the corners (the mapped object in the scene - image_2 ) line( img_matches, scene_corners[0] + Point2f( img_object.cols, 0), scene_corners[1] + Point2f( img_object.cols, 0), Scalar(0, 255, 0), 4 ); line( img_matches, scene_corners[1] + Point2f( img_object.cols, 0), scene_corners[2] + Point2f( img_object.cols, 0), Scalar( 0, 255, 0), 4 ); line( img_matches, scene_corners[2] + Point2f( img_object.cols, 0), scene_corners[3] + Point2f( img_object.cols, 0), Scalar( 0, 255, 0), 4 ); line( img_matches, scene_corners[3] + Point2f( img_object.cols, 0), scene_corners[0] + Point2f( img_object.cols, 0), Scalar( 0, 255, 0), 4 ); //-- Show detected matches imshow( "Good Matches & Object detection", img_matches ); waitKey(0); return 0; }

    Chy chng trnh

  • B mn TGMT & KHR | Khoa CNTT | H KHTN TP.HCM | Thng 4/2013 6

  • B mn TGMT & KHR | Khoa CNTT | H KHTN TP.HCM | Thng 4/2013 7

    i tng th 2:

  • B mn TGMT & KHR | Khoa CNTT | H KHTN TP.HCM | Thng 4/2013 8

  • Kalman v Particle Filter

    [CTT451] [Nhp mn Th gic My tnh]

    Thng 5/2013

    B mn TGMT v KH R-bt

    Khoa Cng ngh thng tin

    H Khoa hc t nhin TP HCM

  • B mn TGMT & KHR | Khoa CNTT | H KHTN TP.HCM | Thng 4/2013 2

    MC LC MC LC ........................................................................................................................... 1

    1 V d s dng Kalman Filter: ...................................................................................... 3

    2 Mean-Shift ................................................................................................................... 6

    3 Pht hin v theo vt khun mt trong video .............................................................. 6

  • B mn TGMT & KHR | Khoa CNTT | H KHTN TP.HCM | Thng 4/2013 3

    1 V d s dng Kalman Filter: Gi s chng ta c mt im chuyn ng xung quanh mt vng trn, nh mt chic

    xe chy trn ng ua. Chic xe chuyn ng vi vn tc l mt hng s. Xc nh

    v tr chic xe s dng phng php theo vt.

    #include "opencv2/video/tracking.hpp" #include "opencv2/highgui/highgui.hpp" #include using namespace cv; static inline Point calcPoint(Point2f center, double R, double angle) { return center + Point2f((float)cos(angle), (float)-sin(angle))*(float)R; } int main(int, char**) { Mat img(500, 500, CV_8UC3); KalmanFilter KF(2, 1, 0); Mat state(2, 1, CV_32F); /* (phi, delta_phi) */ Mat processNoise(2, 1, CV_32F); Mat measurement = Mat::zeros(1, 1, CV_32F); char code = (char)-1; for(;;) { randn( state, Scalar::all(0), Scalar::all(0.1) ); KF.transitionMatrix = *(Mat_(2, 2)

  • B mn TGMT & KHR | Khoa CNTT | H KHTN TP.HCM | Thng 4/2013 4

    Point measPt = calcPoint(center, R, measAngle); // plot points #define drawCross( center, color, d ) \ line( img, Point( center.x - d, center.y - d ), \ Point( center.x + d, center.y + d ), color, 1, CV_AA, 0); \ line( img, Point( center.x + d, center.y - d ), \ Point( center.x - d, center.y + d ), color, 1, CV_AA, 0 ) img = Scalar::all(0); drawCross( statePt, Scalar(255,255,255), 3 ); drawCross( measPt, Scalar(0,0,255), 3 ); drawCross( predictPt, Scalar(0,255,0), 3 ); line( img, statePt, measPt, Scalar(0,0,255), 3, CV_AA, 0 ); line( img, statePt, predictPt, Scalar(0,255,255), 3, CV_AA, 0 ); if(theRNG().uniform(0,4) != 0) KF.correct(measurement); randn( processNoise, Scalar(0), Scalar::all(sqrt(KF.processNoiseCov.at(0, 0)))); state = KF.transitionMatrix*state + processNoise; imshow( "Kalman", img ); code = (char)waitKey(100); if( code > 0 ) break; } if( code == 27 || code == 'q' || code == 'Q' ) break; } return 0; }

  • B mn TGMT & KHR | Khoa CNTT | H KHTN TP.HCM | Thng 4/2013 5

  • B mn TGMT & KHR | Khoa CNTT | H KHTN TP.HCM | Thng 4/2013 6

    2 Mean-Shift int cvMeanShift(

    const CvArr* prob_image,

    CvRect window,

    CvTermCriteria criteria,

    CvConnectedComp* comp

    );

    prob_image biu din v tr mt c th ca d liu.

    window ca s kernel ban u

    criteria: quyt nh s ln lp ca window c th dng

    comp cha ta tm kim ca window.

    3 Pht hin v theo vt khun mt trong video #include "opencv/cv.h" #include "opencv/cxcore.h" #include "opencv/highgui.h" #include #include #include using namespace std; // Create memory for calculations static CvMemStorage* storage = 0; // Create a new Haar classifier static CvHaarClassifierCascade* cascade = 0; // Create a string that contains the cascade name const char* cascade_name = "haarcascade_frontalface.xml"; /* "haarcascade_profileface.xml";*/ void detect_and_draw(IplImage* img); bool writeActive; IplImage* im; IplImage* imFace; IplImage* imR; IplImage* imG; IplImage* imB;

  • B mn TGMT & KHR | Khoa CNTT | H KHTN TP.HCM | Thng 4/2013 7

    struct face { CvRect rectangle; int dx, dy, confidence; float weight; CvHistogram* rHistogram; CvHistogram* gHistogram; CvHistogram* bHistogram; }; vector allFaces; CvHistogram* getHistogram(IplImage* im, CvRect r) { cvSetImageROI(im, r); int numBins = 64; float range[] = {0.0,255.0}; float* ranges[] = {range}; CvHistogram* h = cvCreateHist(1, &numBins, CV_HIST_ARRAY, ranges); cvCalcHist(&im, h); /*for(int binIter=0; binIter

  • B mn TGMT & KHR | Khoa CNTT | H KHTN TP.HCM | Thng 4/2013 8

    n1*=f.rectangle.width * searchSTD; n1+=predX; n2*=f.rectangle.height * searchSTD; n2+=predY; n3=1; /*n3*=0.05; n3+=1; n3 = MIN(1.3, MAX(0.7,n3) );/**/ scale = n3; newWidth = predW * scale; //scale = n4; newHeight = predH * scale; if (n1>0 && n2>0 && n1

  • B mn TGMT & KHR | Khoa CNTT | H KHTN TP.HCM | Thng 4/2013 9

    { //cout

  • B mn TGMT & KHR | Khoa CNTT | H KHTN TP.HCM | Thng 4/2013 10

    coutheight),IPL_DEPTH_8U, 1); imG = cvCreateImage(cvSize(im->width,im->height),IPL_DEPTH_8U, 1); imB = cvCreateImage(cvSize(im->width,im->height),IPL_DEPTH_8U, 1); IplImage* sampling = cvCreateImage(cvSize(im->width,im->height),IPL_DEPTH_32F, 1); int frame = 0; int keyPressed = -1; writeActive=true; while(i!=0 && (keyPressed==-1 || keyPressed=='f' || keyPressed=='w')) { cvShowImage("Given",im); cvCvtColor(im, imHSV, CV_BGR2HSV); CvScalar pixRGB, pixHSV; float cb, cr; //separate into channels cvSetImageCOI(im,1); cvCopy(im,imB); cvSetImageCOI(im,2); cvCopy(im,imG);

  • B mn TGMT & KHR | Khoa CNTT | H KHTN TP.HCM | Thng 4/2013 11

    cvSetImageCOI(im,3); cvCopy(im,imR); cvSetImageCOI(im,0); if(keyPressed=='w') { writeActive=!writeActive; } if (frame==0 || allFaces.size()==0 || keyPressed=='f') //detect faces { // Clear the memory storage which was used before cvClearMemStorage( storage ); // There can be more than one face in an image. So create a growable sequence of faces. // Detect the objects and store them in the sequence CvSeq* faces = cvHaarDetectObjects( im, cascade, storage, 1.1, 2, CV_HAAR_DO_CANNY_PRUNING, cvSize(40, 40) ); for(int currentFace=0; currentFacetotal; currentFace++) { //get rectangle bounding first face CvRect* r = (CvRect *)cvGetSeqElem( faces, currentFace ); face newFace; newFace.rectangle = *r; newFace.confidence = 2; newFace.dx = 0; newFace.dy = 0; //find the total amount of skin-colored pixels in the face float skinSum=0; for (int y=r->y; yy+r->height; y++) { for (int x=r->x; xx+r->width; x++) { pixRGB = cvGet2D(im,y,x); pixHSV = cvGet2D(imHSV,y,x); cb = 0.148*pixRGB.val[2] - 0.291*pixRGB.val[1] + 0.439*pixRGB.val[0] + 128; cr = 0.439*pixRGB.val[2] - 0.368*pixRGB.val[1] - 0.071*pixRGB.val[0] + 128; if ( ( pixHSV.val[0]>245 || pixHSV.val[0]

  • B mn TGMT & KHR | Khoa CNTT | H KHTN TP.HCM | Thng 4/2013 12

    bool matchesExisting=false; for(int faceIter = 0; faceIter < allFaces.size(); faceIter++ ) { //find the width and height of the region of overlap int overlapWidth, overlapHeight; if ( newFace.rectangle.x < allFaces.at(faceIter).rectangle.x) { overlapWidth = min( newFace.rectangle.x + newFace.rectangle.width - allFaces.at(faceIter).rectangle.x, allFaces.at(faceIter).rectangle.width); }else{ overlapWidth = min( allFaces.at(faceIter).rectangle.x + allFaces.at(faceIter).rectangle.width - newFace.rectangle.x, newFace.rectangle.width); } if ( newFace.rectangle.y < allFaces.at(faceIter).rectangle.y) { overlapHeight = min( newFace.rectangle.y + newFace.rectangle.height - allFaces.at(faceIter).rectangle.y, allFaces.at(faceIter).rectangle.height); }else{ overlapHeight = min( allFaces.at(faceIter).rectangle.y + allFaces.at(faceIter).rectangle.height - newFace.rectangle.y, newFace.rectangle.height); } //if region of overlap is greater than 60% of larger rectangle, then faces are the same if ( ((float)overlapWidth*overlapHeight)/(max( newFace.rectangle.width*newFace.rectangle.height, allFaces.at(faceIter).rectangle.width*allFaces.at(faceIter).rectangle.height) )>0.6) { matchesExisting = true; allFaces.at(faceIter).confidence = min( 4, allFaces.at(faceIter).confidence+2); allFaces.at(faceIter).rectangle = newFace.rectangle; allFaces.at(faceIter).dx = newFace.dx; allFaces.at(faceIter).dy = newFace.dy; allFaces.at(faceIter).rHistogram = getHistogram(imR, newFace.rectangle); allFaces.at(faceIter).gHistogram = getHistogram(imG, newFace.rectangle); allFaces.at(faceIter).bHistogram = getHistogram(imB, newFace.rectangle); break; } } if (!matchesExisting) //if its new, add it to our vector { newFace.rHistogram = getHistogram(imR, newFace.rectangle); newFace.gHistogram = getHistogram(imG, newFace.rectangle);

  • B mn TGMT & KHR | Khoa CNTT | H KHTN TP.HCM | Thng 4/2013 13

    newFace.bHistogram = getHistogram(imB, newFace.rectangle); allFaces.push_back(newFace); } } //subtract 1 from confidence of all faces for(int faceIter = 0; faceIter < allFaces.size(); faceIter++ ) { allFaces.at(faceIter).confidence--; if (allFaces.at(faceIter).confidence < 1) //if confidence gone, remove it { allFaces.erase(allFaces.begin()+faceIter, allFaces.begin()+faceIter+1); faceIter--; } } } if(allFaces.size()>0) //track faces { cvSet(sampling,cvScalar(0)); for(int faceIter = 0; faceIter < allFaces.size(); faceIter++ ) //first face only for now { //predicted position int predX = allFaces.at(faceIter).rectangle.x + allFaces.at(faceIter).dx; int predY = allFaces.at(faceIter).rectangle.y + allFaces.at(faceIter).dy; vector samples = getSamples(allFaces.at(faceIter), predX, predY, allFaces.at(faceIter).rectangle.width, allFaces.at(faceIter).rectangle.height, 100, 0.2, im->width, im->height); //do importance resampling a number of times for(int resampling=0; resamplingwidth, im->height); } int bestIdx=0; float bestWeight=0; //generate random samples for(int sampleIter=0; sampleIter bestWeight) { bestWeight = samples.at(sampleIter).weight; bestIdx = sampleIter; } //cvSet2D(sampling, samples.at(sampleIter).rectangle.y,samples.at(sampleIter).rectangle.x, cvScalar(samples.at(sampleIter).weight)); }

  • B mn TGMT & KHR | Khoa CNTT | H KHTN TP.HCM | Thng 4/2013 14

    //move to best sample allFaces.at(faceIter).dx = samples.at(bestIdx).rectangle.x - allFaces.at(faceIter).rectangle.x; allFaces.at(faceIter).dy = samples.at(bestIdx).rectangle.y - allFaces.at(faceIter).rectangle.y; allFaces.at(faceIter).rectangle = samples.at(bestIdx).rectangle; /*cvCopyHist(samples.at(bestIdx).rHistogram, &allFaces.at(faceIter).rHistogram); cvCopyHist(samples.at(bestIdx).gHistogram, &allFaces.at(faceIter).gHistogram); cvCopyHist(samples.at(bestIdx).bHistogram, &allFaces.at(faceIter).bHistogram);*/ } drawFaces(); //cvCvtColor(imFace, imCopy, CV_BGR2RGB); //if(writeActive) //cvWriteFrame(writer, imFace); //scaleAndShow(sampling,"Sampling"); //cvWaitKey(1); } i = cvGrabFrame(capture); im = cvRetrieveFrame(capture); frame++; keyPressed = cvWaitKey(100); } cvReleaseImage(&im); cvReleaseImage(&imCopy); cvReleaseImage(&imHSV); cvReleaseImage(&skin); cvReleaseCapture(&capture); cvReleaseVideoWriter(&writer); return 0; }

  • B mn TGMT & KHR | Khoa CNTT | H KHTN TP.HCM | Thng 4/2013 15