diff Meerwald/cmp_pgm.c @ 3:acb6967ee76d

update to 0.5
author Peter Meerwald <pmeerw@cosy.sbg.ac.at>
date Tue, 14 Aug 2007 21:11:21 +0200
parents be303a3f5ea8
children f83ef905a63d
line wrap: on
line diff
--- a/Meerwald/cmp_pgm.c	Tue Aug 14 19:59:48 2007 +0200
+++ b/Meerwald/cmp_pgm.c	Tue Aug 14 21:11:21 2007 +0200
@@ -4,7 +4,7 @@
 char *progname;
 
 void usage(void) {
-  fprintf(stderr, "usage: %s [-C] [-h] [-m n] [-o file] [-pP] [-r file] -i file file\n\n", progname);
+  fprintf(stderr, "usage: %s [-C] [-h] [-m n] [-o file] [-pP] -i file file\n\n", progname);
   fprintf(stderr, "\t-C\t\tprint PSNR value only\n");
   fprintf(stderr, "\t-h\t\tprint usage\n");
   fprintf(stderr, "\t-i file\t\toriginal image file\n");
@@ -12,7 +12,6 @@
   fprintf(stderr, "\t-o file\t\toutput file for difference image\n");
   fprintf(stderr, "\t-p\t\tprint PSNR, RMS and MSE\n");
   fprintf(stderr, "\t-P\t\tonly print PSNR, RMS and MSE, no difference image\n");
-  fprintf(stderr, "\t-r file\t\tROI (region-of-interest) mask (default none)\n");
   exit(0);
 }
 
@@ -21,29 +20,22 @@
   FILE *in = stdin;
   FILE *out = stdout;
   FILE *orig = NULL;
-  FILE *roi = NULL;
 
   gray **input_image;
   gray **orig_image;
-  gray **roi_image;
 
   char output_name[MAXPATHLEN] = "(stdout)";
   char input_name[MAXPATHLEN] = "(stdin)";
   char orig_name[MAXPATHLEN];
-  char roi_name[MAXPATHLEN];
 
   int in_cols, in_rows, in_format;
   gray in_maxval;
-  int roi_cols, roi_rows, roi_format;
-  gray roi_maxval;
   int orig_cols, orig_rows, orig_format;
   gray orig_maxval;
   int cols, rows, format;
   gray maxval;
   int col, row;
 
-  int roisize = 0;
-
   int i;
   int c;
 
@@ -59,7 +51,7 @@
 
   pgm_init(&argc, argv); wm_init();
 
-  while ((c = getopt(argc, argv, "h?i:m:o:r:pPC")) != EOF) {
+  while ((c = getopt(argc, argv, "h?i:m:o:pPC")) != EOF) {
     switch (c) {
       case 'h':
       case '?':
@@ -72,13 +64,6 @@
         }
         strcpy(orig_name, optarg);
         break;
-      case 'r':
-        if ((roi = fopen(optarg, "rb")) == NULL) {
-          fprintf(stderr, "%s: unable to open ROI image file %s\n", progname, optarg);
-          exit(1);
-        }
-        strcpy(roi_name, optarg);
-        break;
       case 'm':
         m = atoi(optarg);
         if (m <= 0) {
@@ -129,22 +114,11 @@
 
   pgm_readpgminit(in, &in_cols, &in_rows, &in_maxval, &in_format);
 
-  if (orig) {
-    pgm_readpgminit(orig, &orig_cols, &orig_rows, &orig_maxval, &orig_format);
+  pgm_readpgminit(orig, &orig_cols, &orig_rows, &orig_maxval, &orig_format);
 
-    if (in_cols != orig_cols || in_rows != orig_rows) {
-      fprintf(stderr, "%s: input image %s does not match dimensions of original image %s\n", progname, input_name, orig_name);
-      exit(1);
-    }
-  }
-
-  if (roi) {
-    pgm_readpgminit(roi, &roi_cols, &roi_rows, &roi_maxval, &roi_format);
-
-    if (in_cols != roi_cols || in_rows != roi_rows) {
-      fprintf(stderr, "%s: input image %s does not match dimensions of ROI image %s\n", progname, input_name, roi_name);
-      exit(1);
-    }
+  if (in_cols != orig_cols || in_rows != orig_rows) {
+    fprintf(stderr, "%s: input image %s does not match dimensions of original image %s\n", progname, input_name, orig_name);
+    exit(1);
   }
 
   cols = in_cols;
@@ -154,75 +128,45 @@
 
   input_image = pgm_allocarray(cols, rows);
   orig_image = pgm_allocarray(cols, rows);
-  roi_image = pgm_allocarray(cols, rows);
 
   for (row = 0; row < rows; row++) {
       pgm_readpgmrow(in, input_image[row], cols, in_maxval, in_format);
-      if (orig) 
-        pgm_readpgmrow(orig, orig_image[row], cols, orig_maxval, orig_format);
-      else
-        memset(orig_image[row], cols, 0);
-      if (roi) 
-        pgm_readpgmrow(roi, roi_image[row], cols, roi_maxval, roi_format);
-      else
-        memset(roi_image[row], cols, PGM_MAXMAXVAL);
+      pgm_readpgmrow(orig, orig_image[row], cols, orig_maxval, orig_format);
   }
 
   fclose(in);
-  if (orig) fclose(orig);
-  if (roi) fclose(roi);
+  fclose(orig);
 
-  max = 0;
-  min = PGM_MAXMAXVAL;
+  min = max = abs(input_image[0][0] - orig_image[0][0]);
 
   for (row = 0; row < rows; row++) {
     gray *pi = input_image[row];
     gray *po = orig_image[row];
-    gray *pr = roi_image[row];
 
     for (col = 0; col < cols; col++) {
       int diff = abs(*pi - *po);
-      int inroi = (!roi || *pr > 0);
-
-      pi++;
-      po++;
-      pr++;
-
-      if (roi && !inroi)
-        continue;
-
-      roisize++;
-
       error += sqr(diff);
       if (diff < min) min = diff;
       if (diff > max) max = diff;
 
+      pi++;
+      po++;
     }
   }
 
   for (row = 0; row < rows; row++) {
     gray *pi = input_image[row];
     gray *po = orig_image[row];
-    gray *pr = roi_image[row];
 
     for (col = 0; col < cols; col++) {
       int diff = abs(*pi - *po);
-      int inroi = (!roi || *pr > 0);
-      
-      if (!inroi) {
-        *pi = 0;
-      }
-      else {
-        if (m > 0)
-          *pi = PIXELRANGE(diff * m);
-        else
-          *pi = PIXELRANGE((double) (diff - min) / (double) (max - min) * maxval);
-      }
+      if (m > 0)
+        *pi = PIXELRANGE(diff * m);
+      else
+        *pi = PIXELRANGE((double) (diff - min) / (double) (max - min) * maxval);
 
       pi++;
       po++;
-      pr++;
-
     }
   }
 
@@ -236,16 +180,13 @@
 
   pgm_freearray(input_image, rows);
   pgm_freearray(orig_image, rows);
-  pgm_freearray(roi_image, rows);
 
   if (print_psnr || print_psnr_only) {
-    double mse = (roisize) ? error / (double) roisize : 0;
+    double mse = error / (double) (cols * rows);
     double rmse = sqrt(mse);
-    double psnr = (rmse) ? 20.0 * log(255.0 / rmse) / log(10.0) : 0;
+    double psnr = 20.0 * log(255.0 / rmse) / log(10.0);
     FILE *print = print_psnr_only ? out : stderr;
     if (!print_psnr_value_only) {
-      if (roi)
-        fprintf(print, "ROI size: %d\n", roisize);
       if (mse > 0.0) 
         fprintf(print, "PSNR: %lf dB\n", psnr);
       else 

Repositories maintained by Peter Meerwald, pmeerw@pmeerw.net.