automatic commit
authorFrancois Fleuret <fleuret@moose.fleuret.org>
Thu, 16 Oct 2008 20:54:55 +0000 (22:54 +0200)
committerFrancois Fleuret <fleuret@moose.fleuret.org>
Thu, 16 Oct 2008 20:54:55 +0000 (22:54 +0200)
README.txt
error_rates.cc
global.cc
pose_cell_hierarchy.cc
pose_cell_hierarchy.h
rgb_image_subpixel.cc
rgb_image_subpixel.h

index c4717a0..3b37296 100644 (file)
@@ -8,7 +8,7 @@ INTRODUCTION
      F. Fleuret and D. Geman, "Stationary Features and Cat Detection",
      Journal of Machine Learning Research (JMLR), 2008, to appear.
 
-  Please use that citation and the original URL
+  Please use that citation and the URL
 
      http://www.idiap.ch/folded-ctf
 
@@ -55,8 +55,13 @@ INSTALLATION
   on several machines as long as they see the same result directory.
 
   When all or some of the experimental rounds are over, you can
-  generate the ROC curves by invoking the ./graph.sh script. You need
-  a fairly recent version of Gnuplot.
+  generate ROC curves by invoking ./graph.sh script. You need a fairly
+  recent version of Gnuplot.
+
+  If you pass the argument "pics" to the ./graphs.sh script, it will
+  save images from the data set with the ground truth plotted on them,
+  the pose-indexed referential, and examples of the pose-indexed
+  feature windows.
 
   This program was developed on Debian GNU/Linux computers with the
   following main tool versions
@@ -73,14 +78,12 @@ EXECUTING THE PROGRAM
 ---------------------
 
   The main command has to be invoked with a list of parameter values,
-  followed by commands to execute.
-
-  To set the value of a parameter, just add an argument of the form
-  --parameter-name=value before the commands that should take it into
-  account.
+  followed by commands to execute. A parameter value is modified by
+  adding an argument of the form --parameter-name=value.
 
   For instance, to open a scene pool ./something.pool, train a
-  detector and save it, you would do
+  detector and save it with all other parameters kept at their default
+  value, you would do
 
     ./folding --pool-name=./something.pool open-pool train-detector write-detector
 
index f028f17..0743fa5 100644 (file)
@@ -82,7 +82,6 @@ void print_decimated_error_rate(int level, LabelledImagePool *pool, Detector *de
     if(global.write_parse_images) {
       char buffer[buffer_size];
       sprintf(buffer, "%s/parse-%04d.png", global.result_path, i);
-      cout << "LEVEL = " << level << endl;
       write_image_with_detections(buffer,
                                   image,
                                   &result_cell_set, level);
index 76543f8..a3ab0dc 100644 (file)
--- a/global.cc
+++ b/global.cc
@@ -103,7 +103,7 @@ void Global::init_parser(ParamParser *parser) {
   parser->add_association("min-head-radius", "25", false);
   // What is the maximum size of the heads to detect.
   parser->add_association("max-head-radius", "200", false);
-  // How many translation cell for one scale when generating the "top
+  // How many translation cell per radius when generating the "top
   // level" cells for an image.
   parser->add_association("root-cell-nb-xy-per-radius", "5", false);
 
index e12a32f..273a186 100644 (file)
@@ -29,7 +29,7 @@ PoseCellHierarchy::PoseCellHierarchy(LabelledImagePool *train_pool) {
   _nb_levels = global.nb_levels;
   _min_head_radius = global.min_head_radius;
   _max_head_radius = global.max_head_radius;
-  _root_cell_nb_xy_per_scale = global.root_cell_nb_xy_per_radius;
+  _root_cell_nb_xy_per_radius = global.root_cell_nb_xy_per_radius;
 
   LabelledImage *image;
   int nb_total_targets = 0;
@@ -302,7 +302,7 @@ int PoseCellHierarchy::nb_incompatible_poses(LabelledImagePool *pool) {
 void PoseCellHierarchy::write(ostream *os) {
   write_var(os, &_min_head_radius);
   write_var(os, &_max_head_radius);
-  write_var(os, &_root_cell_nb_xy_per_scale);
+  write_var(os, &_root_cell_nb_xy_per_radius);
   write_var(os, &_nb_belly_cells);
   for(int k = 0; k < _nb_belly_cells; k++)
     write_var(os, &_belly_cells[k]);
@@ -312,7 +312,7 @@ void PoseCellHierarchy::read(istream *is) {
   delete[] _belly_cells;
   read_var(is, &_min_head_radius);
   read_var(is, &_max_head_radius);
-  read_var(is, &_root_cell_nb_xy_per_scale);
+  read_var(is, &_root_cell_nb_xy_per_radius);
   read_var(is, &_nb_belly_cells);
   delete[] _belly_cells;
   _belly_cells = new RelativeBellyPoseCell[_nb_belly_cells];
index a9461b2..c04e3b0 100644 (file)
@@ -49,7 +49,7 @@ class PoseCellHierarchy {
   int _nb_levels;
   scalar_t _min_head_radius;
   scalar_t _max_head_radius;
-  int _root_cell_nb_xy_per_scale;
+  int _root_cell_nb_xy_per_radius;
 
   int _nb_belly_cells;
 
index 7b65504..b798bc1 100644 (file)
 
 #include "rgb_image_subpixel.h"
 
-RGBImageSubpixel::RGBImageSubpixel(int width, int height) : RGBImage(width * _scale, height* _scale) { }
+RGBImageSubpixel::RGBImageSubpixel(int width, int height) : RGBImage(width * scale, height* scale) { }
 
-RGBImageSubpixel::RGBImageSubpixel(RGBImage *image) : RGBImage(image->width() * _scale, image->height() * _scale) {
+RGBImageSubpixel::RGBImageSubpixel(RGBImage *image) : RGBImage(image->width() * scale, image->height() * scale) {
   for(int y = 0; y < _height; y++) {
     for(int x = 0; x < _width; x++) {
       set_pixel(x, y,
-                image->pixel(x / _scale, y / _scale, RGBImage::RED),
-                image->pixel(x / _scale, y / _scale, RGBImage::GREEN),
-                image->pixel(x / _scale, y / _scale, RGBImage::BLUE));
+                image->pixel(x / scale, y / scale, RGBImage::RED),
+                image->pixel(x / scale, y / scale, RGBImage::GREEN),
+                image->pixel(x / scale, y / scale, RGBImage::BLUE));
     }
   }
 }
@@ -40,12 +40,12 @@ void RGBImageSubpixel::read_png(const char *filename) {
 }
 
 void RGBImageSubpixel::write_png(const char *filename) {
-  RGBImage tmp(_width / _scale, _height / _scale);
-  for(int y = 0; y < _height / _scale; y++) {
-    for(int x = 0; x < _width / _scale; x++) {
+  RGBImage tmp(_width / scale, _height / scale);
+  for(int y = 0; y < _height / scale; y++) {
+    for(int x = 0; x < _width / scale; x++) {
       int sr = 0, sg = 0, sb = 0;
-      for(int yy = y * _scale; yy < (y + 1) * _scale; yy++) {
-        for(int xx = x * _scale; xx < (x + 1) * _scale; xx++) {
+      for(int yy = y * scale; yy < (y + 1) * scale; yy++) {
+        for(int xx = x * scale; xx < (x + 1) * scale; xx++) {
           sr += int(_bit_plans[RED][yy][xx]);
           sg += int(_bit_plans[GREEN][yy][xx]);
           sb += int(_bit_plans[BLUE][yy][xx]);
@@ -53,7 +53,7 @@ void RGBImageSubpixel::write_png(const char *filename) {
       }
 
       tmp.set_pixel(x, y,
-                    sr / (_scale * _scale), sg / (_scale * _scale), sb / (_scale * _scale));
+                    sr / (scale * scale), sg / (scale * scale), sb / (scale * scale));
     }
   }
   tmp.write_png(filename);
@@ -65,15 +65,33 @@ void RGBImageSubpixel::read_jpg(const char *filename) {
 }
 
 void RGBImageSubpixel::write_jpg(const char *filename, int quality) {
-  abort();
+  RGBImage tmp(_width / scale, _height / scale);
+
+  for(int y = 0; y < _height / scale; y++) {
+    for(int x = 0; x < _width / scale; x++) {
+      int sr = 0, sg = 0, sb = 0;
+      for(int yy = y * scale; yy < (y + 1) * scale; yy++) {
+        for(int xx = x * scale; xx < (x + 1) * scale; xx++) {
+          sr += int(_bit_plans[RED][yy][xx]);
+          sg += int(_bit_plans[GREEN][yy][xx]);
+          sb += int(_bit_plans[BLUE][yy][xx]);
+        }
+      }
+
+      tmp.set_pixel(x, y,
+                    sr / (scale * scale), sg / (scale * scale), sb / (scale * scale));
+    }
+  }
+
+  tmp.write_jpg(filename, quality);
 }
 
 
 void RGBImageSubpixel::draw_line(int thickness,
                                  unsigned char r, unsigned char g, unsigned char b,
                                  scalar_t x0, scalar_t y0, scalar_t x1, scalar_t y1) {
-  RGBImage::draw_line(int(thickness * _scale),
+  RGBImage::draw_line(int(thickness * scale),
                       r, g, b,
-                      x0 * _scale + _scale/2, y0 * _scale + _scale/2,
-                      x1 * _scale + _scale/2, y1 * _scale + _scale/2);
+                      x0 * scale + scale/2, y0 * scale + scale/2,
+                      x1 * scale + scale/2, y1 * scale + scale/2);
 }
index 55618c6..57d41e2 100644 (file)
 #include "rgb_image.h"
 
 class RGBImageSubpixel : public RGBImage {
-  static const int _scale = 8;
+  static const int scale = 8;
 public:
 
   RGBImageSubpixel(int width, int height);
   RGBImageSubpixel(RGBImage *image);
   virtual ~RGBImageSubpixel();
 
-  inline int width() const { return _width / _scale; }
-  inline int height() const { return _height / _scale; }
+  inline int width() const { return _width / scale; }
+  inline int height() const { return _height / scale; }
 
   virtual void read_png(const char *filename);
   virtual void write_png(const char *filename);