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/
février 17th, 2009
Posted by
admin |
Programmation web - php, Traitement image |
one comment
La plupart des logiciels de retouches d’images disposent de fonctions permettant d’obtenir un histogramme d’une image suivant la luminance ou suivant les couleurs RVB.
Dans cet page nous réalisons l’histogramme de la luminance d’une image. La luminance prend une valeur différente pour chaque pixel de l’image suivant la couleur de celui-ci. La luminance est calculé avec une formule bien précise (Début de page).
Image de départ:

Traitement en php
function histogramme($file){
$key = 0;
$tab = array();
$x_dimension = 0;
$y_dimension = 0;
$image = 0;
$x = 0;
$y = 0;
//initialise le tableau (au cas ou il est des trous pour certaines valeurs)
$tab=array_fill(0, 255, ‘0′);
$image = imagecreatefromjpeg($file);
$x_dimension = imagesx($image);
$y_dimension = imagesy($image);
for ($x = 0; $x < $x_dimension; $x++) {
for ($y = 0; $y < $y_dimension; $y++) {
$key = pix_luminance($x,$y,$image);
$tab[$key]++;
}
}
// trie le tableau par ordre croissant des valeurs cles (Pas forcément nécessaire)
ksort($tab);
return $tab;
}
Détail de la fonction:
La fonction va parcourir tout les pixels de l’image puis pour chacun de ces pixels elle va compter le nombre de pixels avec la même luminance. Il ne peut y a voir que 256 valeurs. Le tableau contient donc 256 clés avec pour chacunes une valeur correspondant aux nombres de pixels trouvés. Afin d’éviter que l’histogramme soit déformé à cause de l’absence de pixel avec certaines valeurs de luminance on initialise chaque valeurs du tableau à 0.
La fonction retourne ensuite ce même tableau.
Pour déterminer la luminance de chaque pixels on utilise la fonction suivante:
//******************************************
// Retourne la luminance d’un pixel
//******************************************
function pix_luminance($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;
}
L’affichage du résultat s’effectue en utilisant la librairie spécialisé.
On passe le tableau à une autre page qui à pour rôle de réaliser le graphique sous forme d’ image.
On affiche l’image dans la page en cour comme ceci:
<img src=’histogramme_graph.php?data=”.serialize($tab).”‘>
Le tableau est sérialisé afin qu’il puisse être transmis à une autre page par la méthode GET, en clair tout passe directement dans la barre d’url.
De l’autre coté la variable $data est déserialisé afin de récupérer le tableau. Puis l’affichage se fait simplement avec la librairie artichow en appelant la classe suivant ../lib/artichow/LinePlot.class.php. (Voir les nombreux exemples sur le site artichow)
Résultat:
Les graphs sont obtenus comme toujours avec la librairie php artichow.

Pour vous convaincre du résultat voici ce qu’obtient le logiciel photoshop:

Les fichiers
Pour reproduire tout ceci il vous faut télécharger la librairie artichow et la placer sur votre serveur puis les 2 fichiers suivant:
histogramme.php qui contient les fonctions, c’est le fichier que vous devrez exécuter pour apercevoir l’histogramme.
Et le fichier histogramme_graph.php qui génère l’histogramme.
Vous devrez probablement modifier le chemin de la librairie artichow dans le fichier histogramme.php
Enfin voici l’exemple ici de se que vous devriez obtenir:
Il arrive!
Les fichiers sources:
histogramme.php.txt
histogramme_graph.php.txt
panneau.jpg
En rapport avec le traitement d’images en php:
Image couleur vers noir et blanc en php
Conversion en noir et blanc d’une image en php
http://www.neophoto.fr/post/2007/02/09/Comprendre-lhistogramme-dune-photo-et-les-niveaux-sous-Photoshop
Un code plus poussé d’un histogramme multi-courbes en php qui n’utilise pas la librairie artichow:
http://www.paris-beyrouth.org/Afficher-l-histogramme-d-une-image
D’autres exemples de traitements sur le même site en php:
http://www.paris-beyrouth.org/Modifier-les-courbes-d-une-image
http://www.paris-beyrouth.org/Un-site-avec-un-grain
http://www.paris-beyrouth.org/De-saturer-une-image-en-passant-en
http://www.paris-beyrouth.org/Creer-automatiquement-une
http://www.paris-beyrouth.org/Un-filtre-de-dispersion-graphique
http://www.paris-beyrouth.org/Etendre-la-couche-alphahttp://www.paris-beyrouth.org/Corriger-les-niveaux-des-images
janvier 4th, 2009
Posted by
admin |
Traitement image |
no comments
Un moyen pour parvenir à séparer chaque lettres d’une ligne consiste à effectuer la somme des pixels sur chaque colonnes et de détecter les creux qui indiquent la présence d’un espace et donc de la lettre suivante.
Voici une image modifié afin de faire apparaitre plus facilement un résultat:

Résultat du graphe (somme pixels de chaque colonnes):

Les résultat ici ne sont pas très intéressant car il ne donne qu’une simple idée de la forme de l’image. Il est plus intéressant d’effectuer le même traitement sur une ligne de caractères extraite avec le même procédé mais vus de droite ou de gauche.
Avec une ligne:

Aperçu du graphique (somme des pixels vue de dessus ou dessous):

Aperçu du découpage:
Le seuil qui permet de déterminer si une ligne est vide est ici 1.

Le résultat obtenu au final:
(juste le début)





…
Lien
Reconnaissance de caractères interressant depuis une vebcam
novembre 23rd, 2008
Posted by
admin |
ROC, Traitement image |
no comments
Afin de réaliser un ROC en php il est nécessaire d’arriver à séparer les différentes lettres pour ensuite les analyser et les comparer à une librairie de caractères.
Avant cela il faut arriver a extraire les lignes d’un paragraphe. Voici un exemple:

Graphique du résultat de la somme de pixel noir vue de gauche ou de droite. (Le graph est généré par la librairie artichow)
On constate la première ligne plus large qui correspond au premier sommet sur le graphique… On voit aussi par la même occasion que les sommets dessines un 3 pics et 2 creux, le second pic plus petit que les 1 et le trois et le pic 3 plus grand que le premier et le second, cette caractéristique permettra de reconnaitre rapidement un texte à l’envers.

Aperçu de chaques lignes à extraire.

Résultat, chaques lignes est extraite du paragraphe:





Je proposerais prochainement ici le code complet d’un ocr primaire réalisé en php.
novembre 23rd, 2008
Posted by
admin |
ROC, Traitement image |
one comment
Voici un petit scripte php qui permet de convertir une image couleur en noir et blanc (Niveau de gris en réalité)
Le principe de conversion est assez simple a réaliser, il consiste a récupérer la luminance de chacun des pixels de l’image en utilisant cette proportion:
luminance = (0.30 * R) + (0.59 * G) + (0.11 * B)
Avec R, G ou B une valeur comprise entre 0 et 255
En effet chaque pixel d’une image couleur est composé des valeurs R,G et B.
La transformation consiste ensuite à créer une image en remplacent les valeurs r,g et b par la valeur de la luminance pour chacun des pixels de l’image.
Le code:
function trans_to_nb($file,$file_out){if (file_exists($file)){
$image = imagecreatefromjpeg($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++) {
$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);
$color = imagecolorallocate($image,
$luminance_running_sum,
$luminance_running_sum,
$luminance_running_sum
);
imagesetpixel($new_image, $x, $y, $color);
}
}
imagejpeg($new_image, $file_out);
return true;
}else{
return false;
}
}
Utilisation
if (trans_to_nb("test.jpg","out.jpg")){echo"<img src="http://www.electronika.fr/blog/wp-admin/out.jpg" />";
}
else
{
echo"erreur fichier source inexistant";
}
Exemple


Attention, veillez a créer le fichier out.jpg dans le même répertoire que le scripte et donner au minimum les droits d’écriture sur out.jpg et de lecture sur test.jpg.
Le fichier source est ici
Autres liens sur le traitement d’images
http://perception.inrialpes.fr/people/Boyer/Teaching/L3/analyse.pdf
juin 21st, 2008
Posted by
admin |
Programmation web - php, Traitement image |
one comment