Experimental Image::BoxFind module:    Image/t/05-roughly_raster_simple_cases-color_distance-pre_pixpat.t


     # Test file created outside of h2xs framework.
# Run this like so: `perl Image-BoxFind.t'
#   doom@kzsu.stanford.edu     2007/10/13 20:57:49

#########################

use warnings;
use strict;
$|=1;
my $DEBUG = 0;

use FindBin qw( $Bin );
use lib "$Bin/../..";
my $lib = "$Bin/../..";

use Data::Dumper;
use File::Basename qw( basename fileparse);

use Test::More;
BEGIN { plan tests => 6 };
use Test::Number::Delta;

use FindBin qw( $Bin );
use lib "$Bin/../..";
use lib "$Bin/lib";

BEGIN { #1
  use_ok( 'Image::BoxFind' );
}
use Image::BoxFind::Testing::Eyeballs 'define_expected_via_eyeball';


# 2
ok(1, "Traditional: If we made it this far, we're ok.");

# global variables
# tweak the fuzziness settings on the Image::BoxFind runs
my $fz = 10;
# used with delta_within from Test::Number::Delta
my $tolerance = 4;

{ #3, #4
  my $test_name = "roughly_raster_for_rectangular_regions";
  my $image_file = "$Bin/dat/images/simple_test_3.png";
  my $basename = (  fileparse($image_file, qr{\.png} ) )[0];

  my $bf = Image::BoxFind->new( { image_file  => $image_file,
                                  color_diff  => 'has_changed_distance',
                                  fuzziness   => $fz,

                                  # freezing defaults as of Mon Oct 29 12:09:15 2007
                                  'rectangle_finder' => 'look_down_boxfind',
                                  'beware' => 5,
                                  'edge_detect' => undef,
                                  'color_distance_threshold' => 10,
                                  'minimum_height' => 12,
                                  'minimum_width' => 12,
                                  'spotsize_x' => 5,
                                  'spotsize_y' => 5,
                                  'step_back' => 3,
                                  'step_x' => 20,
                                  'step_y' => 5,

                                  DEBUG       => $DEBUG,
                                } );

# These values are for code from a later era (pixpat):
#                  'luminance_threshold' => 3500,
#                  'transverse_horizon' => 5,
#                  'forward_horizon' => 3,
#                  'pixpat_threshold' => 5500,
#                  'direction' => undef,
#                  'edge_contrast_cutoff' => 10,

  my $results = $bf->roughly_raster_for_rectangular_regions();
  $bf->debug("$basename: \n" .
             "--------\n"    .
             $bf->dump_boxes_to_string( $results ) .
             "--------\n");

  my $expected_empirical = define_expect_empirical_simple_test_3();

  delta_within( $results, $expected_empirical, $tolerance,
             "$test_name: $basename (empirical)" )
    or do {
      my $results_text  = $bf->dump_boxes_to_string( $results );
      my $expected_text = $bf->dump_boxes_to_string( $expected_empirical );
      print "results:\n" . $results_text . "\nexpected:\n" . $expected_text;
    };


  my $expected = define_expect_simple_test_3();

  my $tolerance = 7; # similar to "fuzziness"
  delta_within( $results, $expected, $tolerance,
                "$test_name: $basename (near eyeball values)")
      or do {
        my $results_text  = $bf->dump_boxes_to_string( $results );
        my $expected_text = $bf->dump_boxes_to_string( $expected );
        print "results:\n" . $results_text . "\nexpected:\n" . $expected_text;
      };
}

{ #5, #6
  my $test_name = "roughly_raster_for_rectangular_regions";
  my $image_file = "$Bin/dat/images/simple_test_2.png";
  my $basename = (  fileparse($image_file, qr{\.png} ) )[0];

  my $bf = Image::BoxFind->new( { image_file  => $image_file,
                                  color_diff  => 'has_changed_distance',
                                  fuzziness   => $fz,

                                  # freezing defaults as of Mon Oct 29 12:09:15 2007
                                  'rectangle_finder' => 'look_down_boxfind',
                                  'beware' => 5,
                                  'edge_detect' => undef,
                                  'color_distance_threshold' => 10,
                                  'minimum_height' => 12,
                                  'minimum_width' => 12,
                                  'spotsize_x' => 5,
                                  'spotsize_y' => 5,
                                  'step_back' => 3,
                                  'step_x' => 20,
                                  'step_y' => 5,

                                  DEBUG       => $DEBUG,
                                } );

  my $results = $bf->roughly_raster_for_rectangular_regions();
  $bf->debug("$basename: \n" .
             "--------\n"    .
             $bf->dump_boxes_to_string( $results ) .
             "--------\n");

  my $expected_empirical = define_expect_empirical_simple_test_2();

  delta_within( $results, $expected_empirical, $tolerance,
             "$test_name: $basename (empirical)" )
    or do {
      my $results_text  = $bf->dump_boxes_to_string( $results );
      my $expected_text = $bf->dump_boxes_to_string( $expected_empirical );
      print "results:\n" . $results_text . "\nexpected:\n" . $expected_text;
    };


  my $expected = define_expected_via_eyeball( $basename );

  $tolerance = 6;
  delta_within( $results, $expected, $tolerance,
                "$test_name: $basename: near to eyeball values")
    or do {
      my $results_text  = $bf->dump_boxes_to_string( $results );
      my $expected_text = $bf->dump_boxes_to_string( $expected );
      print "results:\n" . $results_text . "\nexpected:\n" . $expected_text;
    };
}







### end main, into the subs

sub define_expect_empirical_simple_test_3 {
  my $expect =
    [ [
       [  45, 38 ],
       [ 102, 41 ],
       [ 102, 86 ],
       [  45, 86 ]
      ],
      [
       [  52, 173 ],
       [ 118, 177 ],
       [ 118, 207 ],
       [  52, 207 ]
      ],
      [
       [ 120, 39 ],
       [ 205, 43 ],
       [ 205, 148 ],
       [ 120, 148 ]
      ],
      [
       [ 138, 174 ],
       [ 204, 178 ],
       [ 204, 208 ],
       [ 138, 208 ]
      ]
    ];
  return $expect;
}

# eyeball values via gimp
sub define_expect_simple_test_3 {
  my $expected =
    [ [
       [  44, 38 ],
       [ 106, 38 ],
       [ 106, 89 ],
       [  44, 90 ]
      ],
      [
       [  51, 173 ],
       [ 122, 173 ],
       [ 122, 211 ],
       [  51, 210 ]
      ],
      [
       [ 119,  39 ],
       [ 209,  39 ],
       [ 209, 152 ],
       [ 119, 151 ]
      ],
      [
       [ 137, 174 ],
       [ 208, 175 ],
       [ 208, 212 ],
       [ 137, 211 ]
      ]
    ];
  return $expected;
}

sub define_expect_empirical_simple_test_2 {
  my $expect =
    [
     [ [20, 6], [77, 9], [77, 54], [20, 54]
     ],

     [ [27,  141], [93, 145], [93, 175], [27,  175]
     ],

     [ [95, 7], [181, 9], [181, 116], [95, 116]
     ],

     [ [113, 142], [179, 146], [179, 176], [113, 176]
     ]

    ];
  return $expect;
}

# eyeball values via gimp -- corrected Tue Oct 16 23:56:31 2007
#    There's a sort error here, which I've corrected already
#    in Eyeballs.pm... trying to switch to those values.
sub define_expect_simple_test_2 {
  my $expected =
    [
     [ [ 19, 5],
       [ 81, 6],
       [ 81, 57],
       [ 19, 57]
     ],
     [ [  94, 7],
       [ 184, 7],
       [ 184, 119],
       [  94, 120]
     ],
     [ [ 26, 141],
       [ 97, 142],
       [ 96, 178],
       [ 27, 178]
     ],
     [ [ 113, 142],
       [ 184, 142],
       [ 183, 179],
       [ 113, 179]
     ],
    ];
  return $expected;
}


### BOOKMARK
### TODO review these numbers, don't remember their provenance

sub define_expect_empirical_firefox_save_as {
  my $expect =
    [ [
       [ 115, 13 ],
       [ 479, 13 ],
       [ 479, 32 ],
       [ 114, 32 ],
       ],
      [
       [ 113, 47 ],
       [ 479, 48 ],
       [ 480, 72 ],
       [ 113, 72 ],
       ],
      [
       [ 306, 130 ],
       [ 388, 129 ],
       [ 388, 155 ],
       [ 306, 155 ],
       ],
      [
       [ 396, 129 ],
       [ 479, 129 ],
       [ 479, 155 ],
       [ 396, 155 ],
       ],
      [
       [ 415, 136 ],
       [ 428, 136 ],
       [ 428, 149 ],
       [ 415, 149 ],
       ],
    ];
  return $expect;
}

# eyeball values via gimp (I think)
sub define_expect_firefox_save_as {
  my $rect =
    [ [
       [ 115, 13 ],
       [ 479, 13 ],
       [ 479, 32 ],
       [ 114, 32 ],
       ],
      [
       [ 113, 47 ],
       [ 479, 48 ],
       [ 480, 72 ],
       [ 113, 72 ],
       ],
      [
       [ 306, 130 ],
       [ 388, 129 ],
       [ 388, 155 ],
       [ 306, 155 ],
       ],
      [
       [ 396, 129 ],
       [ 479, 129 ],
       [ 479, 155 ],
       [ 396, 155 ],
       ],
      [
       [ 415, 136 ],
       [ 428, 136 ],
       [ 428, 149 ],
       [ 415, 149 ],
       ],
    ];
  return $rect;
}


     

Joseph Brenner, Tue Nov 27 17:40:02 2007