Skip to content

Instantly share code, notes, and snippets.

@meru-akimbo
Created January 21, 2013 03:14
Show Gist options
  • Save meru-akimbo/4583378 to your computer and use it in GitHub Desktop.
Save meru-akimbo/4583378 to your computer and use it in GitHub Desktop.
ラプラシアンフィルタ
#!/usr/bin/perl
use strict;
use warnings;
use Imager;
my $dir='img/';
my @files;
opendir(DIR, $dir);
@files= grep {/\.bmp$/} readdir(DIR);
closedir(DIR);
for(@files){ &Laplacian($_) }
sub Laplacian{
my $img_name = shift;
my $img = Imager->new;
$img->read( file => "img/$img_name" );
my $x_m = $img->getwidth();
my $y_m = $img->getheight();
my $img_new = Imager->new( xsize => $x_m, ysize => $y_m );
for my $x(1..($x_m - 2)){
for my $y(1..($y_m -2)){
my ($red,$green,$blue)= &filter($img,$x,$y,);
$img_new->setpixel( x=>$x, y=>$y, color=>[$red,$green,$blue]);
}
}
$img_new->write( file=>"img/result/result_$img_name" );
}
sub filter{
my $img = shift;
my $x = shift;
my $y = shift;
my $red = 0;
my $green = 0;
my $blue= 0;
my $filter = [[1,1,1,],
[1,-8,1,],
[1,1,1,]];
$x--;
$y--;
for my $tmp(@$filter){
for(@$tmp){
my $color = $img->getpixel(x => $x, y => $y);
my ($tmp_red,$tmp_green,$tmp_blue) = $color->rgba();
$red += $_ * $tmp_red;
$green += $_ * $tmp_green;
$blue += $_ * $tmp_blue;
$x++;
}
$x = 0;
$y++;
}
($red,$green,$blue)=&normalization($red,$green,$blue);
return ($red, $green,$blue);
}
sub normalization{
my $red = shift;
my $green = shift;
my $blue = shift;
$red = $red < 0 ? $red = 0 : $red;
$green = $green < 0 ? $green = 0 : $green;
$blue = $blue < 0 ? $blue = 0 : $blue;
$red = $red > 255 ? $red = 255 : $red;
$green = $green > 255 ? $green = 255 : $green;
$blue = $blue > 255 ? $blue = 255 : $blue;
return ($red,$green,$blue);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment