Home Zaurus Debian RioUtil Projets Imac Atari mp3 | |
TNS: Binarisation Rééchantillonnage Java: Applets Ftp Divers: Calculatrice Killer Disk Usage | |
Rééchantillonnage d'imagesTraitement Numérique du Signal |
|
Christophe Boyanique Emmanuel Pinard |
Avril 1999 |
L'utilisation courante d'applications utilisant des images nécessite la possibilité de pouvoir modifier leur taille.
L'utilisation de différents algorithmes plus ou moins
évolués permet de minimiser le phénomène
d'aliasing plus ou moins visible suivant le type d'image et le
facteur de redimensionnement.
Une image numérique est l'échantillonnage d'une image
analogique à une certaine fréquence:
Etude théorique
Le signal correspondant à une image est donc un signal discret.
Le redimensionnement d'une image correspond donc à un
changement de cette fréquence d'échantillonnage. Puisque l'on ne
dispose que d'une image échantillonnée (et non pas de l'image
analogique initiale), le rééchantillonnage provoquera
une perte d'information ou l'apparition de bruits parasites.
La technique de redimensionnement brut ou du point le plus
proche consiste à choisir comme couleur du pixel de l'image
de destination la couleur du pixel le plus proche
de l'image source en supposant que l'on superpose les deux images.
Dans le cas d'un agrandissement d'image, on va dupliquer
certains échantillons et introduire ainsi une redondance
d'informations:
Dans le cas d'un retrécissement d'image on va ignorer
un certain nombre d'échantillons ce qui entrainera une perte
d'information:
Une méthode simple pour éliminer le phénomène
d'aliasing est d'utiliser l'interpolation bilinéaire. On
utilise donc les 4 points les plus proches des coordonnées
calculées dans l'image source en les pondérant par des
coefficients inversement proportionnels à la distance et
dont la somme vaut 1:
Le poids affecté à chaque point est:
La valeur du point obtenu par interpolation sur les 4 points les
plus proches est:
Le rééchantillonnage consiste à calculer la
transformée de Fourier du signal (image) d'entrée. On
recalcule ensuite le signal à la nouvelle fréquence
d'échantillonnage.
Le signal d'entrée étant un signal discret, celui-ci
est en forme de marches d'escalier. Pour atténuer cet effet
il faut donc supprimer les brusques changements temporels, c'est
à dire supprimer les hautes-fréquences. On utilise
donc un filtre passe-bas h sur la transformée de Fourier:
Mais il plus aisé de travailler dans le domaine temporel et
de multiplier le signal réél par un sinus cardinal (dont
la Transformée de Fourier est une porte):
On obtient donc pour le filtre h:
Pour obtenir le signal reconstruit il faudrait théoriquement
faire la double somme sur l'infini (la largeur et la hauteur totale
de l'image). On se limitera à une double somme sur une largeur
restreinte suivant k1 et k2:
Il est possible de calculer directement le signal discret de
destination S' sans calculer le signal de départ reconstruit S: on
échantillonne le signal de départ convolué avec
le sinus cardinal en utilisant la relation:
On obtient donc au final pour la reconstruction du signal
d'arrivée:
Redimensionnement brut
Interpolation bilinéaire
Rééchantillonnage idéal
Signal discret de départ:
Transformée de Fourier du signal discret:
Transformée de Fourier multipliée par une porte:
Signal discret de sortie:
(agrandissement) |
(retrécissement) |
Les différents algorithmes de redimensionnement ont été programmés en langage C ANSI. Ces programmes ne font que les conversions, il faudra donc utiliser un utilitaire externe pour visualiser les images. Les sources de ces programmes sont largement commentés.
Tous les programmes utilisent des fichiers au format PGM ASCII (PGM en 256 niveaux de gris et PPM en 8 ou 24 bits).
Pour utiliser le redimensionnement brut:
./redim -r input.p[gp]m output.p[gp]m
Pour utiliser l'interpolation bilinéaire:
./redim -b input.p[gp]m output.p[gp]m
Pour utiliser le rééchantillonnage idéal:
./redim -sx input.p[gp]m output.p[gp]m
où x est le coefficient de largeur: la largeur de la matrice utilisée est de 1+2*x.
La possibilité de choisir la valeur de x permet de tester
l'importance de la taille du masque de convolution. Il faut noter que
le fait de choisir x égal à 0 revient à
considérer un masque de convolution réduit à un
unique point (le plus proche des coordonnées calculées) ce
qui donnera un résultat strictement identique à celui
du redimensionnement brut.
Voir les Résultats.
On remarque que sur des images aussi basiques, seule la méthode
de redimensionnement brute semble parfaite. Dans le cas du
retrécissement d'image, la méthode d'interpolation
linéaire est encore acceptable tandis que dans tous les cas, le
rééchantillonnage idéal fait apparaitre des images
plus ou moins floues suivant le masque utilisé. Il semble probable
que le logiciel Xv sous Linux utilise la méthode de
redimensionnement brut.
Voir les Résultats.
Ces images font apparaitre le phénomène d'aliasing en
redimensionnement brut et sur les images redimensionnées par Xv.
Ce logiciel utilise donc assurément la méthode de
redimensionnement brut.
L'interpolation bilinéaire corrige relativement bien ce
phénomàene tandis que le rééchantillonnage
idéal compense ce phénomène par un flou sur
l'ensemble des images redimensionnées qui est d'autant plus
important que le masque utilisé est important. Dans le cas de
retrécissement d'image, ce flou est beaucoup plus discret et la
méthode de rééchantillonnage devient acceptable
si on utilise un masque suffisement petit (3x3).
Voir les Résultats.
Dans le cas du retrécissement, seuls l'interpolation
biliniéaire et le rééchantillonnage idéal
avec un masque (3x3) donnent de bons resultats.
Dans le cas d'agrandisssement, seule la méthode d'interpolation
donne une image acceptable ou n'apparaissent ni le phénomàene
d'aliasing ni des images floues.
Voir les Résultats.
Il n'apparait pas de nouveaux éléments de comparaison
hormis le critère subjectif d'appréciation de la photographie.
On observe toujours le phénomène d'aliasing en
méthode brute ainsi que sur l'agrandissement d'image en
rééchantillonnage idéal. L'interpolation
bilinéaire est encore la meilleure méthode de
redimensionnment de photographie.
Voir les Résultats.
Dans la partie retrécissement, on observe la perte du bouton
de WindowMaker en méthode brute. Les deux autres méthodes
étant acceptables en retrécissement.
Il apparait que la meilleure méthode quel que soit le type
de redimensionnement d'image est la méthode d'interpolation
bilinéaire.
La méthode de rééchantillonnage idéal
est également très acceptable si on utilise un masque de
type 3x3 au-délà l'image redimensionnée devient floue
et on perd l'intérêt du phénomène d'antialiasing
de cette méthode.
Quant à la méthode brute, elle est trop simple et rapide
pour être efficace; en outre, celle-ci ne compense pas le
phénomène d'aliasing. Il est par conséquent surprenant
de constater que le logiciel Xv sous Linux l'utilise.
Application à différents types d'images
Texture (traces verticales)
Texture (traces diagonales)
Image de synthèse 2D
Image photographique
Image variée
Conclusion