my $newImage01 = $img->crop( left=>0 , right=>218, to
+p=>0 , bottom=>150 ) || die "$message: ($!)\n";
my $newImage02 = $img->crop( left=>218, right=>437, to
+p=>0 , bottom=>150 ) || die "$message ($)): ($!)\n";
my $newImage03 = $img->crop( left=>437, right=>654, to
+p=>0 , bottom=>150 ) || die "$message ($_): ($!)\n";
my $newImage04 = $img->crop( left=>0 , right=>218, to
+p=>150, bottom=>300 ) || die "$message ($_): ($!)\n";
my $newImage05 = $img->crop( left=>218, right=>437, to
+p=>150, bottom=>300 ) || die "$message ($_): ($!)\n";
my $newImage06 = $img->crop( left=>437, right=>654, to
+p=>150, bottom=>300 ) || die "$message ($_): ($!)\n";
's docs, or it works in some bizarre ways, you're
duplicating a thin line of pixels at each border. I think you want top 0, bottom 149 in one picture, and top 150, bottom 300 in the other. Similarly for left and right.
On a more general note, since you'll be now editing this portion of the code anyway {grin}, I'd get rid of that complex series of constants and use a computed loop anyway.