Tidied up and removed shadow local variables preventing accurate stats

from being kept.


git-svn-id: http://svn.zoneminder.com/svn/zm/trunk@469 e3e1d417-86f3-4887-817a-d78f3d33393f
This commit is contained in:
stan 2003-04-11 15:42:24 +00:00
parent 2a8490c01a
commit c237c25c82
1 changed files with 22 additions and 26 deletions

View File

@ -51,6 +51,8 @@ void Zone::Setup( Monitor *p_monitor, int p_id, const char *p_label, ZoneType p_
alarm_filter_pixels = 0; alarm_filter_pixels = 0;
alarm_blob_pixels = 0; alarm_blob_pixels = 0;
alarm_blobs = 0; alarm_blobs = 0;
min_blob_size = 0;
max_blob_size = 0;
image = 0; image = 0;
score = 0; score = 0;
} }
@ -81,7 +83,7 @@ bool Zone::CheckAlarms( const Image *delta_image )
delete image; delete image;
Image *diff_image = image = new Image( *delta_image ); Image *diff_image = image = new Image( *delta_image );
int alarm_pixels = 0; alarm_pixels = 0;
int lo_x = limits.Lo().X(); int lo_x = limits.Lo().X();
int lo_y = limits.Lo().Y(); int lo_y = limits.Lo().Y();
@ -108,7 +110,7 @@ bool Zone::CheckAlarms( const Image *delta_image )
if ( min_alarm_pixels && alarm_pixels < min_alarm_pixels ) return( false ); if ( min_alarm_pixels && alarm_pixels < min_alarm_pixels ) return( false );
if ( max_alarm_pixels && alarm_pixels > max_alarm_pixels ) return( false ); if ( max_alarm_pixels && alarm_pixels > max_alarm_pixels ) return( false );
int filter_pixels = 0; alarm_filter_pixels = 0;
int bx = filter_box.X(); int bx = filter_box.X();
int by = filter_box.Y(); int by = filter_box.Y();
@ -155,18 +157,18 @@ bool Zone::CheckAlarms( const Image *delta_image )
*pdiff = BLACK; *pdiff = BLACK;
continue; continue;
} }
filter_pixels++; alarm_filter_pixels++;
} }
} }
} }
//diff_image->WriteJpeg( "diff2.jpg" ); //diff_image->WriteJpeg( "diff2.jpg" );
if ( !filter_pixels ) return( false ); if ( !alarm_filter_pixels ) return( false );
if ( min_filter_pixels && filter_pixels < min_filter_pixels ) return( false ); if ( min_filter_pixels && alarm_filter_pixels < min_filter_pixels ) return( false );
if ( max_filter_pixels && filter_pixels > max_filter_pixels ) return( false ); if ( max_filter_pixels && alarm_filter_pixels > max_filter_pixels ) return( false );
int blobs = 0; alarm_blobs = 0;
typedef struct { unsigned char tag; int count; int lo_x; int hi_x; int lo_y; int hi_y; } BlobStats; typedef struct { unsigned char tag; int count; int lo_x; int hi_x; int lo_y; int hi_y; } BlobStats;
BlobStats blob_stats[256]; BlobStats blob_stats[256];
@ -244,7 +246,7 @@ bool Zone::CheckAlarms( const Image *delta_image )
bss->hi_x = 0; bss->hi_x = 0;
bss->hi_y = 0; bss->hi_y = 0;
blobs--; alarm_blobs--;
} }
} }
else else
@ -289,7 +291,7 @@ bool Zone::CheckAlarms( const Image *delta_image )
bs->count++; bs->count++;
bs->lo_x = bs->hi_x = x; bs->lo_x = bs->hi_x = x;
bs->lo_y = bs->hi_y = y; bs->lo_y = bs->hi_y = y;
blobs++; alarm_blobs++;
break; break;
} }
} }
@ -301,11 +303,11 @@ bool Zone::CheckAlarms( const Image *delta_image )
//diff_image->WriteJpeg( "diff3.jpg" ); //diff_image->WriteJpeg( "diff3.jpg" );
if ( !blobs ) return( false ); if ( !alarm_blobs ) return( false );
int blob_pixels = filter_pixels; alarm_blob_pixels = alarm_filter_pixels;
int min_blob_size = 0; min_blob_size = 0;
int max_blob_size = 0; max_blob_size = 0;
// Now eliminate blobs under the alarm_threshold // Now eliminate blobs under the alarm_threshold
for ( int i = 1; i < WHITE; i++ ) for ( int i = 1; i < WHITE; i++ )
{ {
@ -324,8 +326,8 @@ bool Zone::CheckAlarms( const Image *delta_image )
} }
} }
} }
blobs--; alarm_blobs--;
blob_pixels -= bs->count; alarm_blob_pixels -= bs->count;
bs->tag = 0; bs->tag = 0;
bs->count = 0; bs->count = 0;
@ -344,9 +346,9 @@ bool Zone::CheckAlarms( const Image *delta_image )
} }
} }
if ( !blobs ) return( false ); if ( !alarm_blobs ) return( false );
if ( min_blobs && blobs < min_blobs ) return( false ); if ( min_blobs && alarm_blobs < min_blobs ) return( false );
if ( max_blobs && blobs > max_blobs ) return( false ); if ( max_blobs && alarm_blobs > max_blobs ) return( false );
int alarm_lo_x = hi_x+1; int alarm_lo_x = hi_x+1;
int alarm_hi_x = lo_x-1; int alarm_hi_x = lo_x-1;
@ -364,14 +366,8 @@ bool Zone::CheckAlarms( const Image *delta_image )
} }
} }
alarm_pixels = alarm_pixels;
alarm_filter_pixels = filter_pixels;
alarm_blob_pixels = blob_pixels;
alarm_blobs = blobs;
min_blob_size = min_blob_size;
max_blob_size = max_blob_size;
alarm_box = Box( Coord( alarm_lo_x, alarm_lo_y ), Coord( alarm_hi_x, alarm_hi_y ) ); alarm_box = Box( Coord( alarm_lo_x, alarm_lo_y ), Coord( alarm_hi_x, alarm_hi_y ) );
score = ((100*blob_pixels)/blobs)/(limits.Size().X()*limits.Size().Y()); score = ((100*alarm_blob_pixels)/int(sqrt((double)alarm_blobs)))/(limits.Size().X()*limits.Size().Y());
if ( type == INCLUSIVE ) if ( type == INCLUSIVE )
{ {
score /= 2; score /= 2;
@ -391,7 +387,7 @@ bool Zone::CheckAlarms( const Image *delta_image )
delete diff_image; delete diff_image;
//high_image->WriteJpeg( "diff4.jpg" ); //high_image->WriteJpeg( "diff4.jpg" );
Info(( "%s: Alarm Pixels: %d, Filter Pixels: %d, Blob Pixels: %d, Blobs: %d, Score: %d", Label(), alarm_pixels, filter_pixels, blob_pixels, blobs, score )); Info(( "%s: Alarm Pixels: %d, Filter Pixels: %d, Blob Pixels: %d, Blobs: %d, Score: %d", Label(), alarm_pixels, alarm_filter_pixels, alarm_blob_pixels, alarm_blobs, score ));
} }
return( true ); return( true );
} }