I30 Answer ― Image Statistics


#include <stdlib.h>
#include <stdio.h>
#include "basicImage.c" 

void statistics( image img, double *avg, double *sd )
{
  int r, c, value ;
  double sum = 0.0;
  double sumOfSquares = 0.0;
  double avgSumOfSquares = 0.0;

  for ( r=0; r < img.nrows; r++ )
    for ( c=0; c < img.ncols; c++ )
    {
      value = getPixel( img, r, c ) ;
      sum += value;
      sumOfSquares += value*value;
    }
    
  *avg = sum/(img.nrows*img.ncols);
  avgSumOfSquares = sumOfSquares/(img.nrows*img.ncols);
  *sd = sqrt( avgSumOfSquares - *avg * *avg );
}

int main ( int argc, char* argv[] )
{
  image  img;
  double average, stdDev ;
  
  if ( argc != 2 )
  {
    printf("imgStats imageFile\n");
    exit( EXIT_FAILURE );
  }
  
  /* read in the image */
  readPGMimage( &img, argv[1]);
  
  /* compute statistics */
  statistics( img, &average, &stdDev ) ;
  
  /* write out results */
  printf("average: %lf\tstandard deviation: %lf\n",
    average, stdDev) ;
    
  /* free memory */
  freeImage( &img );
}

Comments: