Applicatie in PHP voor analyse kleurgebruik

Tijdens het promotieonderzoek van Suzanne heb ik een applicatie gemaakt in PHP voor het analyseren van het kleurgebruik in tekeningen gemaakt door proefpersonen. Verschillende condities tijdens een onderzoek zouden kunnen/moeten leiden tot verschillende uitkomsten na de opdracht: “teken een boom”.

Uiteindelijk is de analyse met een Python script gedaan omdat Python een dergelijke functie sneller kan uitvoeren, o.a. vanwege het uitgebreide pakket aan functies dat in Python aanwezig is. Mocht je echter alleen kennis van PHP hebben zoals ik, dan hieronder dan het belangrijkste deel van script. Het script bestaat uit 3 functies. De functie scale wordt gebruikt om het aantal mogelijke kleuren (256Rx256Gx256B=16,7miljoen) te reduceren naar 64 kleuren (4Rx4Gx4B). Dit vergemakkelijkt het vergelijken van de output met de output van een andere analyse. (het heeft geen effect op de parse time) De functie getcolor koppelt de kleur terug op het gevraagde coordinaat in de afbeelding. De functie colors is de basis loop die met de functie getcolor alle coordinaten in de afbeelding afloopt. Met de outputvariabele kun je zelf waardes berekenen en een format maken voor de complete output.

Mijn systeem (Intel Centrino 1,66GHz en 2,5GB geheugen) met XAMPP versie 1.5.3a heeft 1 seconde nodig voor 96×144 pixels (13.824pixels), 5 seconden voor 320×480 pixels (153.600pixels) en 69 seconden voor 2032x1524pixels (3.096.768pixels).

Contact me if you’re interested in the full code.

<?php
$st=time();
set_time_limit(0);function scale($c) {
if ($c<=42) {$c=0;}
elseif ($c<=83) {$c=83;}
elseif ($c<=124) {$c=83;}
elseif ($c<=166) {$c=166;}
elseif ($c<=208) {$c=166;}
elseif ($c>208) {$c=255;}
return $c;
}function getcolor($im, $x, $y) {
unset($rgb, $r,$g,$b);
$rgb = ImageColorAt($im, $x, $y);
$r = ($rgb >> 16) & 0xFF;
$g = ($rgb >> 8) & 0xFF;
$b = $rgb & 0xFF;
return scale($r).”#”.scale($g).”#”.scale($b);
}function colors($img,$x,$y,$w,$h) {
$arr = array(“255#255#255”);
$img = ImageCreateFromPng($img);
for ($i = $y; $i < ($y+$h); $i++) {
for ($j = $x; $j < ($x+$w); $j++) {
array_push($arr,getcolor($img, $j, $i));
}
}
return $arr;
}

$image = “kleurplaat2.png”;
$x=1;
$y=1;
$w=96;
$h=144;

$allcolors = colors($image,$x,$y,$w,$h);
$pixelscounted = count($allcolors)-1;
$uniquecolors = count(array_unique($allcolors));
echo “Analysis area: x:”.$x.”, y:”.$y.”, w:”.$w.”, h:”.$h.”<br>\r\n”;
echo “Pixels counted: “.$pixelscounted.” of “.($w*$h).”<br>\r\n”;
echo “Contains: “.$uniquecolors.” unique colors<br>\r\n”;

echo “<br><br>\r\n”;

$keyvals=array_count_values($allcolors);
echo “keyvals “; print_r($keyvals);

Geef een reactie

Het e-mailadres wordt niet gepubliceerd.