electronika

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.

dsc_0112x8.png

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:

out.jpg

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)

out2.jpg

<?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)

out3.jpg

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)

out4.jpg

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/

février 17th, 2009 Posted by admin | Programmation web - php, Traitement image | one comment