void main() { unsigned char *img1, *img2; KLT_TrackingContext tc; KLT_FeatureList fl; int nFeatures = 100; int ncols, nrows; int i; tc = KLTCreateTrackingContext(); KLTPrintTrackingContext(tc); fl = KLTCreateFeatureList(nFeatures); img1 = pgmReadFile("img0.pgm", NULL, &ncols, &nrows); img2 = pgmReadFile("img1.pgm", NULL, &ncols, &nrows); KLTSelectGoodFeatures(tc, img1, ncols, nrows, fl); printf("\nIn first image:\n"); for (i = 0 ; i < fl->nFeatures ; i++) { printf("Feature #%d: (%f,%f) with value of %d\n", i, fl->feature[i]->x, fl->feature[i]->y, fl->feature[i]->val); } KLTWriteFeatureListToPPM(fl, img1, ncols, nrows, "feat1.ppm"); KLTWriteFeatureList(fl, "feat1.txt", "%3d"); KLTTrackFeatures(tc, img1, img2, ncols, nrows, fl); printf("\nIn second image:\n"); for (i = 0 ; i < fl->nFeatures ; i++) { printf("Feature #%d: (%f,%f) with value of %d\n", i, fl->feature[i]->x, fl->feature[i]->y, fl->feature[i]->val); } KLTWriteFeatureListToPPM(fl, img2, ncols, nrows, "feat2.ppm"); KLTWriteFeatureList(fl, "feat2.fl", NULL); /* binary file */ KLTWriteFeatureList(fl, "feat2.txt", "%5.1f"); /* text file */ }
int main( int argc, const char* argv[] ) { unsigned char *img1, *img2; KLT_TrackingContext tc; KLT_FeatureList fl; //KLT_FeatureTable ft; int ncols, nrows; int i, j; FILE *fp; int nFeatures = 430; int sFrame = 0; int eFrame = 0; char *fmt = "%d"; char *base; char fname[1024]; char ffmt[1024]; if( argc == 1 ) { printf( "Usage: %s <basename_of_pgm_files>" " [-fmt <pgm_sequence_format = %s>]" " [-ef <index_of_end_frame = %d>]" " [-np <#_of_tracking_points = %d>]" " [-sf <index_of_start_frame = %d>]\n" "Ex) %s ../hotel/hotel.seq -fmt %%d -ef 100 -np 430 -sf 0\n" "Ex) %s ../castle/castle. -fmt %%03d -ef 27 -np 110 -sf 0\n" "Ex) %s ../medusa/medusa -fmt %%03d -sf 110 -ef 180 -np 830\n", argv[0], fmt, eFrame, nFeatures, sFrame, argv[0], argv[0], argv[0] ); return 0; } for( i = 1; i < argc; ++i ) { if( !strcmp( argv[i], "-sf" ) ) { sFrame = atoi( argv[++i] ); } else if( !strcmp( argv[i], "-ef" ) ) { eFrame = atoi( argv[++i] ); } else if( !strcmp( argv[i], "-np" ) ) { nFeatures = atoi( argv[++i] ); } else if( !strcmp( argv[i], "-fmt" ) ) { fmt = (char *)argv[++i]; } else { base = (char *)argv[i]; } } sprintf(ffmt, "%%s%s%%s\0", fmt); tc = KLTCreateTrackingContext(); tc->mindist = 15; // See klt.c for default values tc->window_width = 50; tc->window_height = 50; tc->max_residue = 30; tc->min_determinant = 0.001; //tc->min_eigenvalue = 3; //tc->borderx = 50; //tc->bordery = 50; //tc->affine_window_width = 51; //tc->affine_window_height = 51; KLTChangeTCPyramid(tc, 15); KLTUpdateTCBorder(tc); KLTPrintTrackingContext(tc); fl = KLTCreateFeatureList(nFeatures); //ft = KLTCreateFeatureTable(nFrames, nFeatures); tc->sequentialMode = TRUE; tc->writeInternalImages = FALSE; tc->affineConsistencyCheck = -1; /* set this to 2 to turn on affine consistency check */ i = sFrame; sprintf(fname, ffmt, base, i, ".pgm"); img1 = pgmReadFile(fname, NULL, &ncols, &nrows); KLTSelectGoodFeatures(tc, img1, ncols, nrows, fl); // write sprintf(fname, ffmt, base, i, ".feat.ppm"); /* ppm file */ KLTWriteFeatureListToPPM(fl, img1, ncols, nrows, fname); //sprintf(fname, ffmt, base, i, ".feat.fl"); /* binary file */ //KLTWriteFeatureList(fl, fname, NULL); sprintf(fname, ffmt, base, i, ".feat.txt"); /* text file */ //KLTWriteFeatureList(fl, fname, "%5.1f"); MyKLTWriteFeatureList(fl, fname); for (i = sFrame+1; i <= eFrame; i++) { sprintf(fname, ffmt, base, i, ".pgm"); img2 = pgmReadFile(fname, NULL, &ncols, &nrows); KLTTrackFeatures(tc, img1, img2, ncols, nrows, fl); #ifdef REPLACE KLTReplaceLostFeatures(tc, img2, ncols, nrows, fl); #endif // write sprintf(fname, ffmt, base, i, ".feat.ppm"); /* ppm file */ KLTWriteFeatureListToPPM(fl, img1, ncols, nrows, fname); //sprintf(fname, ffmt, base, i, ".feat.fl"); /* binary file */ //KLTWriteFeatureList(fl, fname, NULL); sprintf(fname, ffmt, base, i, ".feat.txt"); /* text file */ //KLTWriteFeatureList(fl, fname, "%5.1f"); MyKLTWriteFeatureList(fl, fname); img1 = img2; } sprintf(fname, ffmt, base, eFrame, ".feat.ppm"); KLTWriteFeatureListToPPM(fl, img1, ncols, nrows, fname); //KLTFreeFeatureTable(ft); KLTFreeFeatureList(fl); KLTFreeTrackingContext(tc); free(img1); //free(img2); return 0; }
//------------------------------------------------------------------- void klt_tracker_t::init(std::string& params) { // core::config_parser_t config; // if(config.load(core::ini, params)) { printf("KLT::OPENED config file\n"); // nfeatures_ = config.get<int>("kltconf.nFeatures", 150); // nrows_ = config.get<int>("kltconf.nrows", 240); // ncols_ = config.get<int>("kltconf.ncols", 320); // fl_ = KLTCreateFeatureList(nfeatures_); // tc_->mindist = config.get<int>("kltconf.mindist", 20); // tc_->window_width = config.get<int>("kltconf.window_width", 9); // tc_->window_height = config.get<int>("kltconf.window_height", 9); // tc_->sequentialMode = config.get<KLT_BOOL>("kltconf.sequentialMode", 1); // tc_->lighting_insensitive = config.get<KLT_BOOL>("kltconf.lighting_insensitive",0); // tc_->writeInternalImages = config.get<KLT_BOOL>("kltconf.writeInternalImages", 0); // tc_->affineConsistencyCheck = config.get<int>("kltconf.affineConsistencyCheck", 2); // KLTSetVerbosity(config.get<int>("kltconf.verbosity", 0)); } else { printf("KLT::cannot find config file %s\n",params); // nfeatures_ = 150; // nrows_ = 240; // ncols_ = 320; // fl_ = KLTCreateFeatureList(nfeatures_); // tc_->mindist = 20; // tc_->window_width = 9; // tc_->window_height = 9; // tc_->sequentialMode = 1; // tc_->writeInternalImages = 0; // tc_->affineConsistencyCheck = 2; // KLTSetVerbosity(0); } // printf("KLT initialized: %d %d\n", nrows_, ncols_); KLTPrintTrackingContext(tc_); // npixels_ = static_cast<size_t>(nrows_*ncols_); //allocate images, the raw way img_pre_ = new core::uint8_t[npixels_]; }