/* * Template program for computing features * * Feature program fpstat computes pixel mean and standard deviation * Limitations: only accepts unsigned byte images * */ #include "VisXV4.h" /* VisionX structure include file */ #include "Vutil.h" /* VisionX utility header files */ VXparam_t par[] = /* command line structure */ { { "if=", 0, " input file, vpstat: evaluate fpstat "}, { "of=", 0, " output file "}, { 0, 0, 0} }; #define INIMAGE par[0].val #define OUTCSV par[1].val int fpstat ( float *, VisXimage_t * ); int main(int argc, char** argv) { Vfstruct (im); float result [3]; FILE *outfile; VXparse(&argc, &argv, par); /* parse the command line */ outfile = stdout; if (OUTCSV) { outfile = fopen (OUTCSV,"w"); } fprintf (outfile, "Count,Mean,Std.Dev\n"); while ( Vfread( &im, INIMAGE) ) { if ( im.type != VX_PBYTE ) { fprintf (outfile, "error: image not byte type\n"); exit (1); } fpstat (result, &im ); fprintf (outfile, "%5.3f,%5.3f,%5.3f\n",result[0],result[1],result[2]); } if ( OUTCSV) { fclose (outfile); } exit(0); } /* feature subprogram */ int fpstat ( float * result, VisXimage_t *im ) { int x, y; float sum, sum2, mean, sdev; int count; count = 0; sum = 0.0; sum2 = 0.0; for ( y= im->ylo; y <= im->yhi; y++) { for ( x= im->xlo; x <= im->xhi; x++) { sum += im->u[y][x]; sum2 += im->u[y][x] * im->u[y][x]; count++; } } mean = sum/count; result[0] = count; result[1] = mean; result[2] = sqrt(sum2/count - mean * mean); return (1); }