detectionForme

detectionFormeChristophe Béasse [x]

La «proglet» détectionForme.

Auteur : Christophe Béasse
Cliquer ici pour faire l'activité.
Cliquer ici pour lire le tutoriel.

Structure des images.

Cette proglet permet de manipuler de petites images (taille maxi 500x500). Et propose un ensemble de fonctions permettant de réaliser un programme de détection de formes sur l'image (voir la démo ainsi que le lien activité proposé ci-dessus)
Les coordonnées des pixels dans l'image se définissent ainsi:
Abscisse (position horizontale : axe orienté de gauche à droite)
Les valeurs vont de 0 à width (width : largeur en anglais).
Ordonnée (position verticale : axe orienté de bas en haut !)
Les valeurs vont de 0 à height (height : hauteur en anglais).
Vous avez à votre disposition 4 images de travail identifiées
par les numéros 1,2,3 et 4.

Les fonctions de création d'images.

createImage(num, width, height);
width et height sont des int permet de définir les dimensions de l'image de travail [1,2,3 ou 4].
loadImage(num,Location);
permet de charger l'image de travail [1,2,3 ou 4] avec le fichier image indiqué suivant le format suivant :
http://path-name pour aller chercher le contenu sur un site web
file://path-name pour le charger du système de fichier local
Par exemple loadImage(2,"file://./logo.png"); charge l'image logo.png qui se trouve dans le répertoire courant dans l'image numéro 2.
disposeImage();
permet de "libérer" toutes les images de travail, il faut les recréer (createImage, loadImage...) pour pouvoir les utiliser à nouveau.
disposeImage(num);
permet de "libérer" l'image de travail [1,2,3 ou 4], il faut la recréer (createImage, loadImage...) pour pouvoir l'utiliser à nouveau.

Les fonctions de sauvegarde d'images.

saveImage(num,Location);
permet de sauvegarder l'image de travail num [1,2,3 ou 4] dans le fichier image indiqué suivant le format suivant :
http://path-name pour aller chercher le contenu sur un site web
file://path-name pour le charger du système de fichier local
Par exemple saveImage(3,"file://./logo.png"); sauvegarde l'imade de travail numéro 3 sous le nom logo.png dans le répertoire courant.

Les fonctions de visualisation des images.

showImage(num);
permet de visualiser dans la zone image du proglet (onglet "Proglet detectionForme") l'image de travail spécifiée : [1,2,3 ou 4].
showPipImage();
permet de visualiser les 4 images de travail dans la zone image du proglet (onglet "Proglet detectionForme").Utile pour voir les différentes étapes d'un traitement.
Remarque : Les images non initialisées sont ignorées.
L'image ci-dessous vous donne le résultat d'un tel affichage

Les fonctions d'informations sur les images.

getImageWidth(num);
Retourne la largeur (type int) de l'image de travail num
getImageHeight(num);
Retourne la hauteur (type int) de l'image de travail num

Les fonctions sur les pixels (niveau I).

La couleur de chaque pixel de l'image peut être codé avec l'une des couleurs suivantes :
black, blue, cyan, darkGray, gray, green, lightGray
magenta, orange, pink, red, white, yellow
Pour utiliser ces couleurs vous pouvez faire référence à la constante Color (Color.black, Color.green, etc). Pour cela vous devez ajouter au debut de votre fichier
import java.awt.Color;
clearImage(num);
Permet de remettre à la couleur "blanc" tous les pixels de l'image de travail num.
setPixel(num, x, y, c);
Initialise le pixel de coordonnées x,y (de type int) de l'image de travail num à la couleur c spécifiée (type Color).
(exemple Color.black)
isPixelColor(num, x, y, c);
Fonction booléenne renvoyant vrai ou faux suivant que le pixel de coordonnées x,y de type int de l'image de travail num a pour couleur la valeur spécifiée par le paramètre c de type Color.

Les fonctions sur les pixels (niveau II).

La couleur d'un pixel est représentée par un entier sur 4 octets ( soit 32 bits) tel que :
AAAAAAAA RRRRRRRR GGGGGGGG BBBBBBBB
A: Alpha R: Red G: Green B: Blue
Par exemple :
00000000 00000000 11111111 00000000
Correspond à la couleur Vert foncée
Red, Green et Blue correspondent aux composantes couleurs.
Alpha correspond à la transparence.
Une valeur de alpha égale à 0xff (=255) correspond à une opacité totale.
Une valeur de alpha égale à 0 correspond à une transparence totale.
Pour mettre la composante alpha à zéro
codeCouleur = codeCouleur & 0x00ffffff;
Pour fixer une couleur
codeCouleur = (alpha << 24) | (red << 16) | (green << 8) | blue;
setPixel(num, x, y, c);
Initialise le pixel de coordonnées x,y (de type int) de l'image de travail num à la couleur c spécifiée (type int).
getPixelColor(num, x, y);
Renvoie au format int la couleur du pixel de coordonnées x,y (de type int) de l'image de travail num.
codeCouleur(Color);
Renvoie le code en int de la couleur spécifiée.
isPixelColor(num, x, y, c);
Fonction booléenne renvoyant vrai ou faux suivant que le pixel de coordonnées x,y de type int de l'image de travail num a pour couleur la valeur spécifiée par le paramètre c de type int.
getAlpha(code);
Renvoie au format int la valeur de la composante Alpha comprise entre 0 et 255 de la couleur spécifiée (de type int).
getRed(code);
Renvoie au format int la valeur de la composante Red comprise entre 0 et 255 de la couleur spécifiée (de type int).
getGreen(code);
Renvoie au format int la valeur de la composante Green comprise entre 0 et 255 de la couleur spécifiée (de type int).
getBlue(code);
Renvoie au format int la valeur de la composante Blue comprise entre 0 et 255 de la couleur spécifiée (de type int).

Les fonctions de tracés géométriques.

drawSegment(num, x1, y1, x2, y2, c);
Trace un segment d'extrémitées (x1,y1) et (x2,y2) (type int) dans l'image de travail num en utilisant une couleur de tracé c de type Color.
drawRect(num, x, y, w, h, c);
Trace un rectangle de position et de dimensions spécifiées (x,y,w,h de type int) dans l'image de travail num en utilisant une couleur de tracé c de type Color.
drawFillRect(num, x, y, w, h, c);
Même fonction que précédemment, mais le rectangle est rempli.
drawOval(num, x, y, w, h, c);
Trace un ovale de position et de dimensions spécifiées (x,y,w,h de type int) dans l'image de travail num en utilisant une couleur de tracé c de type Color.
La taille de l'oval est définie par les dimensions du rectangle englobant
drawFillOval(num, x, y, w, h, c);
Même fonction que précédemment, mais l'ovale est rempli.
drawString(num, Str, x, y, c);
Ecrit la chaîne str (type String) à la position x,y (type int) dans l'image de travail num en utilisant une couleur de tracé c de type Color.

Les fonctions de manipulations avancées.

ConvolveImage(num,mask);
Effectue une convolution de l'image num avec le masque spécifié
Il peut être utile de recopier préalablement l'image à l'aide de la fonction copyImage(num1,num2,borderwidth)
Le masque doit être du type :
float[ ] masque = {
0.1f, 0.1f, 0.1f,
0.1f, 0.2f, 0.1f,
0.1f, 0.1f, 0.1f};
resizeImage(num, w, h);
Redimensionne l'image de travail num aux dimensions spécifiées (w,h de type int).
resizeImageWithHint(num, w, h);
Même fonction que précédemment mais en utilisant un algorithme donnant de meilleurs résultats (mais plus long à l'execution)
rotateImage(num, angle);
Fait subir une rotation à l'image de travail num suivant l'angle spécifié (type int).
Il peut être utile de recopier préalablement l'image à l'aide de la fonction copyImage(num1,num2,borderwidth) de manière à éviter la perte d'une partie importante de l'image

Les fonctions de copie d'images.

copyImage(num1, num2);
Cette fonction permet de faire une copie de l'image de travail num1 vers l'image de travail num2.
copyImage(num1, num2, x, y, w, h);
Cette fonction permet de faire une copie d'une partie de l'image de travail num1 vers l'image de travail num2.
La partie rectangulaire de l'image est définie par les coordonnées x et y (de type int)de son coin supérieur gauche et par sa largeur w et sa longueur h (de type int)
copyImage(num1, num2, borderWidth);
Cette fonction permet de faire une copie de l'image de travail num1 vers l'image de travail num2. En ajoutant une bordure supplémentaire de largeur borderWidth (de type int). Utile avant de faire appel à la fonction de rotation d'une image
cutImage(num1, num2, x, y, w, h);
Cette fonction permet de prélever (rogner) une partie de l'image de travail num1 et de la recopier vers l'image de travail num2.
La partie rectangulaire de l'image est définie par les coordonnées x et y (de type int)de son coin supérieur gauche et par sa largeur w et sa longueur h (de type int)

Travailler sur les images à partir d'un tableau.

Ce proglet vous permet de travailler directement sur des tableaux d'entiers définis de la façon suivante :
int [][] pixMap= new int[200][200];
createImageFromPixMap(num,pixmap, width, height);
width et height sont des int permet de charger l'image de travail [1,2,3 ou 4] depuis un tableau de pixels .
Le tableau pixMap correspond à un tableau défini de la façon suivante :
int [][] pixMap= new int[200][200];
loadImageToPixMap(num,pixmap);
permet de charger le tableau de pixels à partir de l'image de travail [1,2,3 ou 4]
La taille de l'image (width et height) doit être récupérée à partir des fonctions getImageWidth(num) et getImageHeight(num)
Le tableau pixMap correspond à un tableau défini de la façon suivante :
int [][] pixMap= new int[200][200];
Voici ci-dessous un exemple d'utilisation :
void main(){
int [][] pixMap= new int[200][200];
    for (int x=0; x < 200; x++)
    for (int y=0; y < 200; y++)
    pixMap[x][y]=x*y;
    createImageFromPixMap(1,pixMap,200,200);
    showImage(1);
}

Fonctions élémentaires de lecture/Ecriture.

Avant toute opération sur le fichier il faut commencer par l'ouvrir en lecture (openFileReader) La fonction (readNextCode()) permet de récupérer les codes du fichiers un par un. Elle retourne le code (type int) du code lu ou la valeur (-1) si la fin du fichier est atteinte. Enfin il est important de ne pas oublier de fermer le fichier (closeFileReader) pour libérer les ressources réservées lors de son traitement.

Les fonctions de lecture de fichier.

openFileReader(String nomFichier)
ouverture du fichier en lecture.
readNextCode()
Renvoie le prochain code (1 octet de type int) lu dans le fichier et -1 si on est arrivé en fin de fichier.
closeFileReader()
fermeture du fichier.

Les fonctions d'écriture de fichier.

openFileWriter(String nomFichier)
ouverture du fichier en écriture.
writeNextCode(int code)
Ecris dans le fichier le code suivant (1 octet).
closeFileWriter()
fermeture du fichier.