Exemple #1
0
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;
}
Exemple #3
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_];
  }