im_stats() and im_deviate() done
This commit is contained in:
parent
f302d023db
commit
5901a7ca87
@ -169,8 +169,8 @@ deviate_scan( void *in, int n, void *seq, void *a, void *b )
|
|||||||
g_assert( 0 );
|
g_assert( 0 );
|
||||||
}
|
}
|
||||||
|
|
||||||
ss2[0] += s;
|
ss2[0] = s;
|
||||||
ss2[1] += s2;
|
ss2[1] = s2;
|
||||||
|
|
||||||
return( 0 );
|
return( 0 );
|
||||||
}
|
}
|
||||||
@ -194,7 +194,8 @@ int
|
|||||||
im_deviate( IMAGE *in, double *out )
|
im_deviate( IMAGE *in, double *out )
|
||||||
{
|
{
|
||||||
double global_ss2[2];
|
double global_ss2[2];
|
||||||
gint64 N;
|
double s, s2;
|
||||||
|
gint64 vals;
|
||||||
|
|
||||||
/* Check our args.
|
/* Check our args.
|
||||||
*/
|
*/
|
||||||
@ -208,7 +209,8 @@ im_deviate( IMAGE *in, double *out )
|
|||||||
global_ss2[0] = 0.0;
|
global_ss2[0] = 0.0;
|
||||||
global_ss2[1] = 0.0;
|
global_ss2[1] = 0.0;
|
||||||
if( im__wrapscan( in,
|
if( im__wrapscan( in,
|
||||||
deviate_start, deviate_scan, deviate_stop, in, &global_ss2 ) )
|
deviate_start, deviate_scan, deviate_stop, in, global_ss2 ) )
|
||||||
|
return( -1 );
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
||||||
@ -220,9 +222,10 @@ im_deviate( IMAGE *in, double *out )
|
|||||||
|
|
||||||
/* Calculate and return deviation. Add a fabs to stop sqrt(<=0).
|
/* Calculate and return deviation. Add a fabs to stop sqrt(<=0).
|
||||||
*/
|
*/
|
||||||
N = (gint64) in->Xsize * in->Ysize * in->Bands;
|
vals = (gint64) in->Xsize * (gint64) in->Ysize * (gint64) in->Bands;
|
||||||
*out = sqrt( fabs( global_ss2[1] -
|
s = global_ss2[0];
|
||||||
(global_ss2[0] * global_ss2[0] / N) ) / (N - 1) );
|
s2 = global_ss2[1];
|
||||||
|
*out = sqrt( fabs( s2 - (s * s / vals) ) / (vals - 1) );
|
||||||
|
|
||||||
return( 0 );
|
return( 0 );
|
||||||
}
|
}
|
||||||
|
@ -164,46 +164,7 @@ stats_scan( void *in, int n, void *seq, void *a, void *b )
|
|||||||
/* Now generate code for all types.
|
/* Now generate code for all types.
|
||||||
*/
|
*/
|
||||||
switch( im->BandFmt ) {
|
switch( im->BandFmt ) {
|
||||||
case IM_BANDFMT_UCHAR:
|
case IM_BANDFMT_UCHAR: LOOP( unsigned char ); break;
|
||||||
/*
|
|
||||||
LOOP( unsigned char ); break;
|
|
||||||
*/
|
|
||||||
|
|
||||||
for( z = 0; z < im->Bands; z++ ) {
|
|
||||||
PEL *q = (PEL *) in + z;
|
|
||||||
double *row = stats + z * 4;
|
|
||||||
PEL small, big;
|
|
||||||
double sum, sum2;
|
|
||||||
|
|
||||||
printf( "z = %d\n", z );
|
|
||||||
|
|
||||||
small = row[0];
|
|
||||||
big = row[1];
|
|
||||||
sum = row[2];
|
|
||||||
sum2 = row[3];
|
|
||||||
|
|
||||||
for( x = 0; x < n; x++ ) {
|
|
||||||
PEL value = *q;
|
|
||||||
|
|
||||||
printf( "value = %d\n", value );
|
|
||||||
|
|
||||||
sum += value;
|
|
||||||
sum2 += (double) value * (double) value;
|
|
||||||
if( value > big )
|
|
||||||
big = value;
|
|
||||||
else if( value < small )
|
|
||||||
small = value;
|
|
||||||
|
|
||||||
q += im->Bands;
|
|
||||||
}
|
|
||||||
|
|
||||||
row[0] = small;
|
|
||||||
row[1] = big;
|
|
||||||
row[2] = sum;
|
|
||||||
row[3] = sum2;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case IM_BANDFMT_CHAR: LOOP( signed char ); break;
|
case IM_BANDFMT_CHAR: LOOP( signed char ); break;
|
||||||
case IM_BANDFMT_USHORT: LOOP( unsigned short ); break;
|
case IM_BANDFMT_USHORT: LOOP( unsigned short ); break;
|
||||||
case IM_BANDFMT_SHORT: LOOP( signed short ); break;
|
case IM_BANDFMT_SHORT: LOOP( signed short ); break;
|
||||||
@ -230,7 +191,7 @@ im_stats( IMAGE *im )
|
|||||||
{
|
{
|
||||||
DOUBLEMASK *out;
|
DOUBLEMASK *out;
|
||||||
double *row;
|
double *row;
|
||||||
gint64 pels, vals, z;
|
gint64 pels, vals;
|
||||||
double *global_stats;
|
double *global_stats;
|
||||||
int i, j;
|
int i, j;
|
||||||
double value;
|
double value;
|
||||||
@ -255,7 +216,7 @@ im_stats( IMAGE *im )
|
|||||||
* separately.
|
* separately.
|
||||||
*/
|
*/
|
||||||
if( im__wrapscan( im, stats_start, stats_scan, stats_stop,
|
if( im__wrapscan( im, stats_start, stats_scan, stats_stop,
|
||||||
im, &global_stats ) )
|
im, global_stats ) )
|
||||||
return( NULL );
|
return( NULL );
|
||||||
|
|
||||||
/* Calculate mean, deviation, plus overall stats.
|
/* Calculate mean, deviation, plus overall stats.
|
||||||
@ -274,7 +235,7 @@ im_stats( IMAGE *im )
|
|||||||
vals = pels * im->Bands;
|
vals = pels * im->Bands;
|
||||||
|
|
||||||
for( i = 0; i < im->Bands; i++ ) {
|
for( i = 0; i < im->Bands; i++ ) {
|
||||||
row = out->coeff + (z + 1) * 6;
|
row = out->coeff + (i + 1) * 6;
|
||||||
for( j = 0; j < 4; j++ )
|
for( j = 0; j < 4; j++ )
|
||||||
row[j] = global_stats[i * 4 + j];
|
row[j] = global_stats[i * 4 + j];
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user