KOMPOOS.NL

edge detection

home » php » image-effects » edge-detection.html

sitemap


detecteer de contouren van een afbeelding

edge detection procedure

Maak een php-file met de naam edge-detection.php, en plaats het onderstaande php script daarin. Als je ergens in de body van een pagina de onderstaande html-regel toevoegt, zal een (gekleurd) plaatje getoond worden in grijs-waarden met een edge detect. Een zwart-wit afbeelding krijgt vanzelfsprekend ook een edge-effect als hij met deze php-routine aangeroepen wordt. Het voordeel van deze routine is dat er geen gebruik wordt gemaakt van de GD2 library. Dit is prettig omdat niet alle webhosters zo "aardig" zijn om deze library beschikbaar te stellen (en dan is dit een alternatief voor IMG_FILTER_EDGEDETECT wat, in dat geval, niet beschikbaar is). Vooral bij sommige Debian-configuraties is het vaak afzien (omdat er een andere graphische configuratie toegepast wordt/kan worden). Als je het origineel van de "edge-afbeelding" wilt zien kan je in de browser deze (html)file-naam even vervangen door edge-detection.jpg

html voorbeeld regel voor het aanroepen van het script


<img src="edge-detection.php?src=edge-detection.jpg" />

script voor edge-detecion.php


<?php
function fix_de_helderheid($pixels){
	$pixels=sprintf('%06x',$pixels);
	$rood=hexdec(substr($pixels,0,2))*0.297;
	$groen=hexdec(substr($pixels,2,2))*0.588;
	$blauw=hexdec(substr($pixels,4))*0.108;
	return $rood+$groen+$blauw;}
$edge_detect_image=$_GET[src];
$tijdelijke_image=imagecreatefromjpeg($edge_detect_image);
$afmetingen_image=getimagesize($edge_detect_image);
$nieuwe_afbeelding=imagecreatetruecolor($afmetingen_image[0],$afmetingen_image[1]);
for($x=0;$x<$afmetingen_image[0];$x++){
	for($y=0;$y<$afmetingen_image[1];$y++){
		$pixels_omhoog=fix_de_helderheid(imagecolorat($tijdelijke_image,$x,$y-1));
		$pixels_omlaag=fix_de_helderheid(imagecolorat($tijdelijke_image,$x,$y+1)); 
		$pixels_links=fix_de_helderheid(imagecolorat($tijdelijke_image,$x-1,$y));
		$pixels_rechts=fix_de_helderheid(imagecolorat($tijdelijke_image,$x+1,$y));
		$pixels_linksboven=fix_de_helderheid(imagecolorat($tijdelijke_image,$x-1,$y-1));
		$pixels_rechtsboven=fix_de_helderheid(imagecolorat($tijdelijke_image,$x+1,$y-1));
		$pixels_benedenlinks=fix_de_helderheid(imagecolorat($tijdelijke_image,$x-1,$y+1));
		$pixels_benedenrechts=fix_de_helderheid(imagecolorat($tijdelijke_image,$x+1,$y+1));
		$lijn_x=($pixels_rechtsboven+($pixels_rechts*2)+$pixels_benedenrechts)-($pixels_linksboven+($pixels_links*2)+$pixels_benedenlinks);
		$lijn_y=($pixels_linksboven+($pixels_omhoog*2)+$pixels_rechtsboven)-($pixels_benedenlinks+($pixels_omlaag*2)+$pixels_benedenrechts);
		$grijs=sqrt($lijn_x*$lijn_x+$lijn_y+$lijn_y);
		$grijs=255-$grijs;
		if($grijs>255){$grijs=255;}
		if($grijs<0){$grijs=0;}
		$aangepaste_grijswaarde=imagecolorallocate($nieuwe_afbeelding,$grijs,$grijs,$grijs);
		imagesetpixel($nieuwe_afbeelding,$x,$y,$aangepaste_grijswaarde);}}
header('Content-Type: image/jpeg');
imagejpeg($nieuwe_afbeelding);
imagedestroy($tijdelijke_image);
imagedestroy($nieuwe_afbeelding);
?>		
Gebruik voor alle voorbeelden op de http://kompoos.nl een valide html5 pagina.