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