TP n°1 : Numérisation des images ================================ 1. Mise en route ---------------- Lisez le document ``Introduction à MegaWave2'' en exécutant les commandes pas à pas. Choisissez une image dans le répertoire $MEGAWAVE2/data/tp1. Vous pouvez obtenir la liste de ces images en tapant ls $MEGAWAVE2/data/tp1 et visualiser n'importe laquelle de ces images à l'aide de la commande cview & L'image source sera dans ce qui suit désignée par src. Vous pouvez copier une image de votre choix dans le fichier src (taper ccopy src afin d'utiliser telles quelles les commandes de l'énoncé). Exemple : ccopy lena.img src 2. Transformée de Fourier ------------------------- Pour calculer le transformée de Fourier d'une image, on dispose de la commande fft2d. Par exemple, fft2d -A re -B im src calcule la partie réelle et imaginaire de la transformée de Fourier de l'image src. Naturellement, ces images sont à valeurs réelles (Fimage) donc il est préférable d'utiliser la commande fview pour les visualiser : fview re & fview im & Malheureusement, on constate qu'une telle visualisation directe n'est pas très adaptée, essentiellement à cause de la répartition très inhomogène des valeurs. Pour visualiser la transformée de Fourier d'une image, on utilisera donc de préférence la commande fft2dview, qui échelonne la dynamique de façon plus appropriée (et, accessoirement, centre le point (0,0) au milieu de l'image). Essayez les diverses visualisations offertes par cette commande en changeant la valeur du paramètre t dans fft2dview -t 0 src & 3. Echantillonnage direct ------------------------- Nous allons maintenant simuler l'échantillonnage d'une image réelle en une image numérique. On peut approximer ce processus physique par un problème de sous-échantillonnage : la transformation d'une image de grande résolution en une image de résolution plus faible. Dans cette partie, src désigne donc une des images de grande taille (512x512 ou plus) du répertoire $MEGAWAVE2/data/tp1 (utilisez la commande ccopy pour la définir). Commençons par le procédé le plus naïf, consistant à sous-échantillonner une image u(k,l) d'un facteur p entier, autrement dit à produire l'image v(k,l) = u(pk,pl) Pour cela, utilisez la commande fsample : fsample src ech 3 cview ech & et faites varier le facteur p (ci-dessus, 3). Observez notamment les contours (edges) de l'image ainsi produite, et la reproduction des motifs filaires, rayés et texturés. Q1: L'image obtenue vous paraît-elle être une réduction raisonnable de l'original ? Quels types d'altérations constatez-vous ? 4. Cas d'une onde pure ---------------------- Pour bien préciser le phénomène observé, nous allons le recréer dans un cas très simple : celui d'une onde sinusoïdale pure. Pour créer une telle image, utilisez les commandes fconst re 0 256 256 fpset re 50 70 1 re fft2d -i -A onde re puis visualisez l'image onde (avec fview) et sa transformée de Fourier (avec fft2dview). Appliquez ensuite un sous-échantillonnage de facteur 2 à cette image au moyen de la commande fsample onde ech 2 puis visualisez le résultat et sa transformée de Fourier. Q2: Expliquez géométriquement la nouvelle position des pics dans l'image réduite. 5. Simulation de capteurs jointifs (``antialiasing'') ----------------------------------------------------- Le sous-échantillonnage direct d'un facteur p d'une image modélise des capteurs dont le côté est approximativement 1/p fois le pas de la grille, ce qui pour p>=2 est assez sévère et explique l'aliasing obtenu. Comme nous l'avons vu en cours, les capteurs jouent aussi un rôle dans l'atténuation spectrale qui précède l'échantillonnage. Réduisons l'image source d'un facteur 3 (par exemple) en simulant des capteurs jointifs. Ceci revient donc à convoler l'image par un noyau discret constant de support 3x3 avant échantillonnage. fsepconvol -c 3 src capteur fsample capteur ech 3 Q3: Quel est l'effet de cette opération par rapport à un sous-échantillonnage direct ? Parvient-on à éliminer totalement l'aliasing ? Pourquoi ? La méthode que nous venons de voir est appelée (un peu abusivement) antialiasing en synthèse d'images. Elle permet notamment de représenter des contours brusques (issus par exemple de figures géométriques, ou de caractères typographiques) de façon adoucie, en simulant des capteurs jointifs sur une image binaire à haute résolution (à titre d'exemple, essayez de réduire l'image texte.gif d'un facteur 10 avec puis sans antialiasing). Comme nous le verrons, cette méthode n'est pas optimale (du point de vue de la qualité de l'image produite) et l'on peut réaliser de meilleures atténuations spectrales avec des noyaux de convolution plus adéquats. 6. Echantillonnage après coupure fréquentielle brutale ------------------------------------------------------ Pour réaliser exactement la condition du théorème de Shannon en perdant le minimum d'information, l'idéal est d'opérer une coupure fréquentielle, c'est-à-dire d'éliminer toutes les fréquences interdites par la grille d'échantillonnage. La commande fftzoom utilisée avec l'option -i nous permet de simuler exactement ce procédé : elle calcule la transformée de Fourier d'une image, met à zéro les hautes fréquences pour ne garder que celles compatibles avec la nouvelle grille spécifiée par le facteur z, puis prend la transformée de Fourier inverse du domaine conservé pour calculer la nouvelle image. Réduisez l'image source d'un facteur 2 selon ce principe au moyen de la commande fftzoom -i -z 2 src reduced et visualisez lez résultat (n'hésitez pas à utiliser le zoom donné par cview -z). Q4: Que constatez-vous près des contours de l'image ? Comment se nomme ce phénomène et à quoi est-il dû ?