Détection de contours dans une image en php
Voici ici quelques exemples de détection de bord en php, la première matrice appliqué par convolution amplifie les pointes tandis que le second atténue les pointes.Attention, le scripte suivant écrit dans un fichier image existant vous devez donc autoriser l’écriture sur celui-ci. (chmode 777)
Attention, l’indentation du code à été perdu grâce au magnifique navigateur chrome de google, je l’ai remis en place (retour à la linge) mais reste toujours difficile à lire.
source image: http://tavmjong.free.fr/INKSCAPE/MANUAL/html_fr/Filters-Pixel.html
Filtre appliqué:
-1 -1 -1
-1 7 -1
-1 -1 -1
Diviseur de 9
Résultat:
Code php:
<?php
function filtre($file,$file_out){
if (file_exists($file)){$image = imagecreatefrompng($file);
$x_dimension = imagesx($image);
$y_dimension = imagesy($image);
$new_image = imagecreatetruecolor($x_dimension, $y_dimension);//
for ($x = 0; $x < $x_dimension; $x++) {
for ($y = 0; $y < $y_dimension; $y++) {
$lum=( 7 * pix_luminence($x,$y,$image)
- pix_luminence($x+1,$y,$image)
- pix_luminence($x-1,$y,$image)
- pix_luminence($x,$y+1,$image)
- pix_luminence($x,$y-1,$image)
- pix_luminence($x+1,$y+1,$image)
- pix_luminence($x+1,$y-1,$image)
- pix_luminence($x-1,$y+1,$image)
- pix_luminence($x-1,$y-1,$image)/9);
$color = imagecolorallocate($new_image,$lum,$lum,$lum);
imagesetpixel($new_image, $x, $y, $color);}}
imagejpeg($new_image, $file_out);
return true;
}else{
return false;
}
}
function pix_luminence($x,$y,$image){
$luminance_running_sum=0;
$rgb = imagecolorat($image, $x, $y);
$r = ($rgb >> 16) & 0xFF;
$g = ($rgb >> 8) & 0xFF;
$b = $rgb & 0xFF;
$luminance_running_sum = (0.30 * $r) + (0.59 * $g) + (0.11 * $b);
return $luminance_running_sum;
}
echo”<img src=’dsc_0112×8.png’>”;//fichier source
if (filtre(”dsc_0112×8.png”,”out.jpg”)){
echo” <img src=’out.jpg’>”;
}else{
echo”erreur fichier source inexistant”;
}
?>
Autre filtre de détection de bord:
0 1 0
1 -4 1
0 1 0
diviseur 5 (les opérations sur les 0 ne sont pas faites)
<?php
function filtre($file,$file_out){
if (file_exists($file)){
$image = imagecreatefrompng($file);
$x_dimension = imagesx($image);
$y_dimension = imagesy($image);
$new_image = imagecreatetruecolor($x_dimension, $y_dimension);
//for ($x = 0; $x < $x_dimension; $x++) {
for ($y = 0; $y < $y_dimension; $y++) {
$lum=(-4 * pix_luminence($x,$y,$image)
+ pix_luminence($x+1,$y,$image)
+ pix_luminence($x-1,$y,$image)
+ pix_luminence($x,$y+1,$image)
+ pix_luminence($x,$y-1,$image)/5);
$color = imagecolorallocate($new_image,$lum,$lum,$lum);
imagesetpixel($new_image, $x, $y, $color);
}}
imagejpeg($new_image, $file_out);
return true;
}else{
return false;
}}
function pix_luminence($x,$y,$image){
$luminance_running_sum=0;
$rgb = imagecolorat($image, $x, $y);
$r = ($rgb >> 16) & 0xFF;
$g = ($rgb >> 8) & 0xFF;
$b = $rgb & 0xFF;
$luminance_running_sum = (0.30 * $r) + (0.59 * $g) + (0.11 * $b);
return $luminance_running_sum;
}
echo”<img src=’dsc_0112×8.png’>”;//fichier source
if (filtre(”dsc_0112×8.png”,”out.jpg”)){
echo” <img src=’out.jpg’>”;
}else{
echo”erreur fichier source inexistant”;
}
?>
Autre essai avec une autre matrice plus grande:
0 0 1 0 0
0 0 0 0 0
1 0 -4 0 1
0 0 0 0 0
0 0 1 0 0
Diviseur 5 (les opérations sur les 0 ne sont pas faites)
Autre exemple:
0 0 1 0 00 0 0 0 01 0 -3 0 10 0 0 0 00 0 1 0 0
Diviseur 5 (les opérations sur les 0 ne sont pas faites)
Laissez un commentaire!
Voir aussi:
Flou sur une image
http://k12linux.mesd.k12.or.us/docs/gimp/fr/ch06s07s02.html
http://devernay.free.fr/cours/vision/pdf/c3.pdf
http://devernay.free.fr/cours/vision/pdf/c2.pdf
http://obligement.free.fr/articles/traitement_images_2.php
http://www.genie-des-maths.polymtl.ca/exemple.php?no=70
Effet damier
La même genre de chose mais en python:
http://pingswept.org/2009/03/16/calculating-solar-panel-shading-in-python/




