void HoughAccumulator::Init() { int* sizes = new int[paramRanges.size()]; for (unsigned int i = 0; i < paramRanges.size(); i++) sizes[i] = (paramRanges[i].max - paramRanges[i].min) * precision; // acc = cvCreateSparseMat( paramRanges.size(), sizes, CV_8UC1); acc = cvCreateMatND(paramRanges.size(), sizes, CV_8UC1); cvZero(acc); indices = new int[paramRanges.size()]; delete[] sizes; }
int main(int argc, char * argv[]) { typedef struct {char buffer[512];char fn[256];float x,y,w,h;} CvTrainData; char imagelistfn[2][256]; sprintf(imagelistfn[0],"../dataset/palm/open.txt"); sprintf(imagelistfn[1],"../dataset/palm/close.txt"); char featurefn[2][256]; sprintf(featurefn[0],"../data/open.bin"); sprintf(featurefn[1],"../data/close.bin"); int statusiter=0; for (statusiter=0;statusiter<2;statusiter++) { int i,j,N; CvTrainData dat[MAX_SAMPLES]; { FILE * fp = fopen(imagelistfn[statusiter], "r"); for (i=0;i<MAX_SAMPLES;i++) { fgets(dat[i].buffer,512,fp); if (dat[i].buffer[0]=='-'){break;} if (dat[i].buffer[0]=='#'){i--;continue;} sscanf(dat[i].buffer, "%s %f %f %f %f\n", dat[i].fn,&dat[i].x,&dat[i].y,&dat[i].w,&dat[i].h); #if WITH_TZG dat[i].x=dat[i].x+cvRound(dat[i].w*.15); dat[i].y=dat[i].y+cvRound(dat[i].h*.15); dat[i].w=cvRound(dat[i].w*.7); dat[i].h=cvRound(dat[i].h*.7); #endif } fprintf(stderr, "INFO: %d training dat collected!\n", i); fclose(fp); } N=i; float * hogfts_data = new float[378*MAX_SAMPLES]; CvMat hogfts = cvMat(MAX_SAMPLES,378,CV_32F,hogfts_data); int hogsizes[]={7,6,9}; int hogszprod = hogsizes[0]*hogsizes[1]*hogsizes[2]; for (i=0;i<N;i++) { IplImage * img = cvLoadImage(dat[i].fn,0); CvMat mat_stub; CvMat * mat = cvGetMat(img,&mat_stub); CvMatND * hog = cvCreateMatND(3,hogsizes,CV_32F); int nr=mat->rows,nc=mat->cols; CvMat * dx = cvCreateMat(nr,nc,CV_16S); CvMat * dy = cvCreateMat(nr,nc,CV_16S); CvMat * magni = cvCreateMat(nr,nc,CV_32F); cvZero(magni); CvMat * angle = cvCreateMat(nr,nc,CV_32F); cvZero(angle); float warp_p_data[]={dat[i].w/36.,dat[i].x-3.,dat[i].y-3.}; CvMat warp_p = cvMat(3,1,CV_32F,warp_p_data); // cvSobel(img,dx,1,0,1); // cvSobel(img,dy,0,1,1); cvPrepareGradientROI(mat, dx, dy, warp_p_data[0], cvRect(dat[i].x,dat[i].y,dat[i].w,dat[i].h)); cvSet(magni,cvScalar(-1)); icvCalcWarpHOG(mat,&warp_p,hog,6,2,dx,dy,magni,angle); // for (j=0;j<hogszprod;j++){ fprintf(stderr, "%ff,", hog->data.fl[j]); } // icvShowHOG(hog); CV_WAIT(); memcpy(hogfts_data+378*i,hog->data.fl,sizeof(float)*378); // icvShowHOG(hog); CV_WAIT(); // fprintf(stderr, "scale: %f\n", warp_p_data[0]); if (argc>1) { if (!strcmp(argv[1],"-show")){ // fprintf(stderr, "INFO: file %s loaded!\n", dat[i].fn); cvRectangle(mat,cvPoint(dat[i].x,dat[i].y), cvPoint(dat[i].x+dat[i].w,dat[i].y+dat[i].h),CV_RED); fprintf(stderr, "INFO: display %s\n",dat[i].fn); CV_SHOW(mat); } } // CV_SHOW(magni); // CV_SHOW(angle); cvReleaseMat(&dx); cvReleaseMat(&dy); cvReleaseMat(&magni); cvReleaseMat(&angle); cvReleaseMatND(&hog); } { FILE * fp=fopen(featurefn[statusiter],"w"); fwrite(hogfts_data,4,378*i,fp); fclose(fp); } delete [] hogfts_data; } return 0; }
int main( int argc, char *argv[] ) { int webcamRun = 0; CvCapture *capture = 0; CvCapture *stereoCapture = 0; CvCapture **cptPtr = &capture; CvCapture **scptPtr = &stereoCapture; initCaptureFiles( argc, argv, cptPtr, scptPtr, &webcamRun, &enable3D ); char locationMean[300]; char locationCov[300]; strncpy( locationMean, argv[1], 300 ); strncpy( locationCov, argv[2], 300 ); /* check for stereo file */ if( !enable3D ) { displayStereoFrame = 0; displayPositionFrame = 0; depthScaling = 0; } /* Fast-forwards through the video to the action */ int kl; for( kl = 0; kl < 100 && webcamRun == 0; kl++ ) { cvQueryFrame( capture ); if( enable3D ) cvQueryFrame( stereoCapture ); } /* Housekeeping */ int maxBox[10]; // this should be in the relevant file //! Create matrix files to hold intermediate calculations for likelihood /* this should have its own matrix setup function and not be hard-coded */ //! Create N-dimensional matrices to hold mean and cov data int backMeanSizes[] = {_sizeY,_sizeX,4,_numResponses}; int backCovSizes[] = {_sizeY,_sizeX,4,_numResponses}; CvMatND *backMean = cvCreateMatND( 4, backMeanSizes, CV_32F ); CvMatND *backCov = cvCreateMatND( 4, backCovSizes, CV_32F ); /* Fix this */ if( webcamRun ) { backMean = (CvMatND*) cvLoad( "D:/Will/Dropbox/My Dropbox/Project/Matlab/backMean.xml", NULL, NULL, NULL ); backCov = (CvMatND*) cvLoad( "D:/Will/Dropbox/My Dropbox/Project/Matlab/backCov.xml", NULL, NULL, NULL ); } else { backMean = (CvMatND*) cvLoad( locationMean, NULL, NULL, NULL ); backCov = (CvMatND*) cvLoad( locationCov, NULL, NULL, NULL ); } /* end here */ CvMat *imgLikelihood = cvCreateMat( 48, 64, CV_32F ); img = cvLoadImage( "foreground8/image (1).jpg", CV_LOAD_IMAGE_COLOR ); yImg = cvLoadImage( "foreground8/image (1).jpg", CV_LOAD_IMAGE_COLOR ); cvNamedWindow( "Tracker", CV_WINDOW_AUTOSIZE ); /* Condensation stuff */ ConDens = cvCreateConDensation( DP, MP, nSamples ); bx = 320; by = 240; //hm = 0; //vm = 0; /* Initialize the random number generator */ rng_state = cvRNG(0xffffffff); initializeCondensation(); /* This allows us to change the probabiity with which Condensation alters each variable */ cvRandInit( &(ConDens->RandS[0]), -75, 75, 0, CV_RAND_UNI); cvRandInit( &(ConDens->RandS[1]), -5, 5, 1, CV_RAND_UNI); cvRandInit( &(ConDens->RandS[2]), -5, 5, 2, CV_RAND_UNI); cvRandInit( &(ConDens->RandS[3]), -2, 2, 3, CV_RAND_UNI); cvRandInit( &(ConDens->RandS[4]), -75, 75, 4, CV_RAND_UNI); cvRandInit( &(ConDens->RandS[5]), -5, 5, 5, CV_RAND_UNI); cvRandInit( &(ConDens->RandS[6]), -5, 5, 6, CV_RAND_UNI); cvRandInit( &(ConDens->RandS[7]), -2, 2, 7, CV_RAND_UNI); /* If we have depth scaling, the depth controls the width & height of the box So we don't want any randomness */ if( depthScaling ) { cvRandInit( &(ConDens->RandS[3]), 0, 0, 3, CV_RAND_UNI); cvRandInit( &(ConDens->RandS[7]), 0, 0, 7, CV_RAND_UNI); } IplImage* heatFrame = NULL; heatFrame = cvQueryFrame( capture ); if(enable3D) cvQueryFrame( stereoCapture ); // making sure they stay in sync (and init positionFrame) int frameNumb = 0; // int mjk; // for( mjk = 0; mjk < 320; mjk++ ) { // cvQueryFrame( capture ); // cvQueryFrame( stereoCapture ); // frameNumb++; // } positionFrame = cvCreateImage(cvSize(640, 510), 8, 3); int trailLength = 20; int planX1Pos[20] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; int planX2Pos[20] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; int planZ1Pos[20] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; int planZ2Pos[20] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; int key = 0; double totalTime = 0; int totalFrames = 0; while( key != 'q' ) { // stopCount++; // strcpy(frameNameTemp, frameName); // itoa(stopCount, frameCount, 10); // strcat( frameNameTemp, frameCount); // strcat(frameNameTemp, ".jpg"); // cvSaveImage(frameNameTemp, positionFrame, 0); /* Start timing */ clock_t start = clock(); frameNumb++; printf("Frame %d\n", frameNumb); if( frameNumb == 210 ) { for( ; frameNumb < 290; frameNumb++ ) { cvQueryFrame( capture ); cvQueryFrame( stereoCapture ); } } if( frameNumb == 350 ) { return(0); } /* Get the first video frame, and maybe stereo frame */ frame = cvQueryFrame( capture ); if(enable3D) stereoFrame = cvQueryFrame( stereoCapture ); /* Double-check that we haven't reached the end */ if( !frame ) break; if( enable3D ) if( !stereoFrame ) break; /* Compute likelihoods for new frame, using mean and cov */ likelihood( frame, backMean, backCov, imgLikelihood ); /* Update the Condensation model using new likelihoods */ updateCondensation( 0, 0, imgLikelihood, maxBox ); /* Maybe display the Condensation particles */ if( displayParticles ) drawParticles(); /* Draw tracking boxes onto the video and stereo video frame */ drawTrackingBoxes( 0, maxBox, frame, stereoFrame ); drawTrackingBoxes( 1, maxBox, frame, stereoFrame ); /* Show the latest video frame (with boxes and particles) */ cvShowImage( "Tracker", frame ); /* Maybe show latest stereo depth frame */ if( displayStereoFrame ) cvShowImage( "Stereo", stereoFrame ); /* Maybe show latest position map */ if( displayPositionFrame ) drawPositionTrail( maxBox, trailLength, depth, planX1Pos, planX2Pos, planZ1Pos, planZ2Pos, positionFrame ); /* Maybe show the heat map of the input image (the likelihood for each patch) */ if( displayHeatFrame ) { drawHeatmap( maxBox, imgLikelihood, heatFrame ); cvShowImage( "Heat", heatFrame ); } /* Update previous x, y positions */ prevX[0] = maxBox[0]; prevY[0] = maxBox[1]; prevX[1] = maxBox[4]; prevY[1] = maxBox[5]; /* Calculate fps and average fps */ printf("fps: %3.1f, ", (double)1/(((double)clock() - start) / CLOCKS_PER_SEC)); totalTime = totalTime + (double)1/(((double)clock() - start) / CLOCKS_PER_SEC); totalFrames++; printf(" average fps %3.1f", totalTime/totalFrames); /* Check for key presses */ key = cvWaitKey( 50 ); /* Enable debugging mode */ if( key == 'd' ) { debug = 1; printf("\n*********\n\nDebug: ON\n\n*********\n"); } /* Enable debugging mode */ if( key == 'p' ) { if( stateDraw ) stateDraw = 0; else stateDraw = 1; printf("\n*********\n\nParticle Drawing Toggled\n\n*********\n"); } } printf("\n\nquitting"); //cvReleaseVideoWriter( &writerTracker ); cvReleaseImage( &img ); cvReleaseImage( &frame ); cvDestroyWindow( "Tracker" ); cvDestroyWindow( "Heat" ); cvDestroyWindow( "Stereo" ); cvDestroyWindow( "Position" ); return(0); }