11. I.3. APERCU SUR LES IMAGES BITMAP
Il est difficile de séparer la reconnaissance des
formes percues sur les images et les images bitmap. Parlant de la
reconnaissance des formes perçues sur les images, nous ne cesserons pas
de jetter un projecteur sur les images matricielles. Ce type d'images
correspond le mieux pour la reconnaissance des formes vue sa facilité
d'accès aux pixels.
o Les images matricielles
Les images matricielles, appellées aussi les images
bitmap, sont les images représentées par une matrice des pixels.
Une matrice est en quelques sorte un tableau des pixels(élément
d'image). Le pixel à son tour est le plus petit élement
constituant une image bitmap,ces pixels ont une forme rectangulaire, et chacun
d'entre eux possède une quelconque couleur, et le rassemblement de ces
pixels donne l'image matricielle globale. Les limites entre les pixels ne sont
pas visibles à l'oeil nu sauf si l'image est agrandie jusqu'o laisser
voir l'effet d'escalier.
Les images matricielles peuvent être directement
capturée par des périphériques comme les scanners, les
appareils photo numériques, des tablèttes digitales, les radars,
etc, ou tout simplement synthétisées sur des ordinateurs par des
logiciels spéciaux comme le photoshop, paint,etc.
La figure suivante montre comment des chiffres sont
vicualisés en images matricielles :
La lourdeur de ces images par rapport aux JPEG fait qu'elles
ne soient pas beaucoup plus utilisées pour d'autres fins
délicats ; bien qu'elles soient utilisées pour d'autres
comme la reconnaissance des formes du fait qu' elles occasionnent moins de
perte d'information ;
a) La résolution d'une image
bitmap.
La résolution d'une image numérique est le
nombre de pixels par pouce, une pouce étant égal à 2.54
centimetres. Elle définit le degré de détail de l'image.
Ainsi, plus la résolution est élévée, meilleure est
la restitution, grande est la taille et très longue est
l'impression.Tant que la résolution d'une image est grande autant
l'image est nette et bonne. Autrement dit, plus la hauteur et la largeur de
l'image sont longues, plus l'image détient plus de pixels et plus la
taille en octet augmente.
b) La définition d'une image
La définition d'une image est à peu près
la même chose que la résolution sauf que la définition
correspond au nombre de pixels la composant, c'est-à-dire le nombre de
points en hauteur et en largeur, par exemple une image de 200 pixels par 450
pixels, abregé en « 200x450 ».
Alors que la résolution est exprimée par
unité de surface, généralement le ppp, ainsi une
résolution de 300ppp signifie 300 colonnes et 300 rangées de
pixels sur une pouce carré ce qui donne 90 000 pixels sur une pouce
carré.
Nous avons utilisé les images bitmap de 24 bits pour
collorer un pixel ; pour ces images, les octets de l'entête et du
corps ne peuvent déppasser la valeur 255. Il dévient alors
difficile de créer des images bitmap lorsqu'on a qu'une matrice des
chiffres du corps. D'où, il faut chercher à savoir les nombres
à écrire dans les octets de l'entête : si nous savons
le nombre des lignes et le nombre des colonnes de la matrice.
Dans la mésure où ce nombre dépasse 255,
il faut alors renvoyer à des divisions par 256 jusqu'à ce que le
reste inférieur à 256.
Illustrons ça par un exemple concret : si nous
détenons d'une matrice 600x600, dans l'entete de l'image, nous
n'écrirons pas :
· Hauteur :600
· Ni largeur :600, il faudra aux octets de la
hauteur écrire d'abord 88 qui est le modulo de la division euclidienne
et dans l'octet suivant écire 2.
La fonction nous a aidé de faire cette
tâche et nous renvoie quatre valeurs de quatre octets
inférieur à 256 correspondants au nombre entré en
argument:
static int[] calculOctet(int valeur){
int aa=0,bb=0,cc=0,dd=0;
if(valeur>256){
aa=valeur%256;
valeur=valeur/256;
if (valeur<256)bb=valeur;
}else{
aa=valeur;
valeur=0;
}
if(valeur>256){
bb=valeur%256;
valeur=valeur/256;
if(valeur<256)cc=valeur;
}else{
bb=valeur;
valeur=0;
}
if(valeur>256){
cc=valeur%256;
valeur=valeur/256;
if(valeur<256)dd=valeur;
}else{
cc=valeur;
valeur=0;
}
if(valeur>256){
dd=valeur%256;
}else{
dd=valeur;
}
int[] tOctet=new int[4];
if(bb>aa){
tOctet[0]=bb;
tOctet[1]=aa;
tOctet[2]=cc;
tOctet[3]=dd;
}else{
tOctet[0]=aa;
tOctet[1]=bb;
tOctet[2]=cc;
tOctet[3]=dd;
}
return tOctet;
}
o Les images vectorielles
Ces images sont composées d'entités
géométriques telles qu'un cercle, une ligne, un rectangle, une
courbe, un segment,etc. Ces entités géométriques sont
réprésentées par des formules mathématiques( par
exemple, le rectangle est définit par deux points, le cercle par un
centre et un rayon, une courbe par un plusieurs points et une équation.)
c'est le processeur qui se chargera de traduire ces formules en informations
interprétables par la carte graphique.
L'interêt avec ces types d'images ce qu'on peut les
agrandir sans perte de qualité c'est-à-dire sans aucun effet
d'éscalier car un dessin vectoriel est dessiné à nouveau
à chaque visualisation, ce qui engendre des calculs sur la machine. On
se sert de ce type d'images pour représenter des formes simples et non
pas pour dessiner un home ou un animal, même si dans certains cas, on
peut y arriver après beaucoup des tournures souvent trop lourdes.
Nous allons nous limiter pour ce mémoire aux images
matricielles étant donné que nous allons effectuer des
extractions des parties d'images et en produire d'autres. Le langage postscript
crééra alors un pont entre les images bmp et les images JPEG
pour produire facilement nos états de sortie en html.
|