APPLICATIONSCREATION GRAPHIQUE ★ TRAITEMENT DE L'IMAGE: 2ème Partie (B) ★

Traitement de l'Image Part2b|CPC Revue)Applications Creation Graphique

Vous avez certainement trouvé le visage qui se cachait derrière l'image segmentée de notre dernier article. Si vous êtes impatient de vérifier votre idée, jetez un coup d'oeil sur la figure n° 6. Le deuxième listing source "trimbis" ne contient qu'un ensemble de routines très courtes, mais quelles routines ! Elles couvrent l'ensemble du traitement de l'image binaire qui nous intéresse : l'érosion, la dilatation, l'extraction des contours, les opérateurs directionnels.


Fig. 6

De plus, les macro-instructions que vous pouvez ajouter au BASIC, peuvent compléter cette ttste par l'amincissement et toute autre fonction que vous pouvez Imaginer et qui sera obtenue par une suite de traitements. Avant d'aborder les routines dans le détail, voyons quelle est l'Idée génératrice qui a permis ieur élaboration.

La plupart des auteurs proposent des routines distinctes pour chaque fonction. Ces routines sont basées sur les principes mathématiques que nous avons étudiés dans la première partie de nos articles. Il s'agit la plupart du temps d'une suite de tests, effectués pour les huit points du voisinage Immédiat, et ceci pour chaque point de l'Image. Ces tests sont différents pour chaque fonction. Quoi que parfaitement exactes et compilées en langage machine, ces routines ne sont pas adaptées au traitement Informatique en temps réel. Plus le nombre de points de l'Image est grand, plus cette lourdeur de calcul pèse. En conclusion, la méthode locale de traitement n'est pas valable. Je vous propose la méthode globale, ou, pour être plus Juste, la méthode dont le principe est global et l'exécution ml-séquentlelle, ml-globale. Cette méthode est basée sur deux principes élémentaires, liés d'une part au micro-processeur et d'autre part à l'organisation de la mémoire-écran.

La partie séquentielle correspond au transfert de l'image d'un écran à l'autre et au décalage de l'image d'un pixel, dans un sens orthogonal ou choix.
 

Fig. 8

Fig. 7

La partie globale correspond (même si elle est exécutée séquentiellement, adresse par adresse) à la logique booléenne entre deux écrans. Voyons le cheminement logique de l'Idée. Prenons pour exemple le cas de la dilatation. Que font toutes les routines de dilatation, quelle que soit leur méthode ? Elles augmentent les réglons de couleur de l'encre de l'épaisseur d'un pixel en repoussant le contour vers l'extérieur de la région. L'érosion fait le contraire. Il suffit donc de décaler l'Image d'un pixel par rapport à l'original et d'effectuer un OU (OR) logique des deux Images dans le cas de dilatation. Pour l'érosion, le décalage est le même, seule la logique change : ET (AND). On peut donc utiliser la même routine en changeant un seul octet, celui de l'Instruction AND ou OR. Et le contour ? C'est ni plus ni moins un XOR, OU EXCLUSIF de l'Image d'origine et de l'image érodée. Donc tou|ours la même routine IA partir de là, toutes les possibilités sont ouvertes. Au lieu d'effectuer les déplacements dans les huit directions. Il suffit de limiter ceux-ci en fonction d'un opérateur directionnel. Nous pouvons donc diriger l'expansion de l'Image par dilatation, en choisissant le ou les sens. Grâce à ces principes, les routines sont universelles, très courtes et quasi-Instantanées, ce qui est très apprécié pour les traitements en temps réel. De plus, en combinants les effets partiels et globaux à partir d'un programme d'application en BASIC, on peut obtenir, à peu près, tout ce que l'on veut. Voyons comment.

APPLICATIONS, EROSION, DILATATION, CONTOUR

Revenons à notre programme d'applications. Toutes les fonctions sont maintenant disponibles (si toutefois vous avez saisi et assemblé les routines binaires, qui doivent être sur la même disquette que le programme d'applications). Les fonctions de l'érosion, de la dilatation et de l'utilisation des opérateurs directionnels sont appelés par les touches comportant leurs Initiales E, D ou O. L'écran du CPC en mode 2 a une résolution de 640 par 200 points. En effet, les 200 points dans le sens vertical correspondent aux 400 pixels ou à 200 paires de points ayant obligatoirement la même couleur.
 

Fig. 9

Fig. 10

Fig. 11

C'est très gênant pour le traitement de l'Image, car en théorie, seuls les voisins immédiats doivent intervenir. Or, Ici, cela n'est pas possible. Alors de deux choses l'une : ou nous laissons l'Impression de déformation verticale s'accentuer au fur et à mesure des dilatations successives (routines normales-"1"). ou nous tâchons d'améliorer l'Image en supprimant le décalage vers le bas (routines aménagées - "0"). Les Images Illustrant notre article sont toutes obtenues par l'utilisation des routines normales. Mais, oublions la technique et tournons-nous vers les effets graphiques. Etudions d'abord l'effet de nos fonctions sur un portrait. La figure n° 7 montre l'Image après l'érosion. Tous les points Isolés ont disparus et les zones de la couleur de l'encre (noir sur l'Image) ont rétréci d'un pixel au pourtour. Mais ce qui nous intéresse le plus, c'est l'effet d'un cliché photographique SUREXPOSE. Tout le visage est flou et noyé dans la lumière, les détails fins sont perdus. La personne photographiée est méconnaissable.

Voyons maintenant l'effet Inverse, celui de la dilatation. Examinons la figure n° 8. Les points Isolés du fond (blancs) ont disparu, alors que ceux de l'encre ont grossi et les réglons de l'encre ont augmenté de taille d'un pixel sur le pourtour. Nous avons obtenu l'effet d'une photographie SOUS-EXPOSEE. Les détails sont moins Ans mais soulignés, le visage est dur et le contraste est plus grand. Notez que la comparaison est toujours à faire avec l'Image d'origine, figure n° 6. Avant d'examiner l'effet de la troisième fonction, qui est le contour sur le portrait, voyons son effet sur une autre Image figurative. Rappelez-vous l'Image du cosmonaute, devant la navette au dessus du globe terrestre (figure n° 1 de notre précédent article). La figure n° 9 montre la même Image ou plutôt ce qui reste après l'extraction des contours. Quel beau dessin à la plume ! SI nous Inversions les couleurs du fond et de l'encre en ce moment, nous obtiendrions le dessin à la pointe sèche : fil blanc sur fond noir. Ce dessin fourmille de détails. Les étoiles sont trop Importantes. Mais nous pouvons très facilement simplifier et alléger l'ensemble, en effectuant une dilatation, pub une érosion et enfin l'extraction des contours. La figure n° 10 vous montre le résultat de ces trois opérations. On dirait une Incrustation vidéo. Mais si vos préférences vont au graffitis, continuez le traitement par deux dilatations successives, vous ob-tiendrez l'Image de la figure n° 11. Testez sur une (mage (et six son Inverse) les trois routines et les combinaisons Imaginables et notez le résultat ! Revenons au portrait. SI vous désirez durcir le visage et augmenter le contraste, mais sans favoriser les points Isolés comme c'était le cas de la simple dilatation (figure n° 8), vous devez effectuer plusieurs dilatations successives, puis le même nombre d'érosions, pour conserver la taille Initiale.
 

Fig. 12

Fig. 13

Fig. 14

Fig. 15

L'image est d'un aspect contrasté, mais nette et comme ciselée. Voyez la figure n° 12. Certaines fonctions ne sont pas bonnes pour toutes les Images. C'est le cas du contour (figure n° 13) et de son Inverse, ou "négatif (figure n° 14). Ces opérations ne peuvent être utilisées que pour la préparation (un état Intermédiaire) pour un traitement définitif. Ainsi le double contour peut être obtenu par contour. Inversion, et de nouveau contour. Observez le résultat sur la figure n° 15 et notamment le double contour bien visible sur le texte "MARILYN". Le personnage est de nouveau reconnalss-able. En poursuivant le traitement de simple contour de la figure n° 13 par quatre dilatations successives, vous obtiendrez le dessin au gros pinceau de la figure N° 16.

Il est évident qu'il existe un nombre quasi Infini de combinaisons mais que nous ne pouvons pas présenter tous les cas possibles. A vous de faire votre propre expérience sur différentes innages.

Passons maintenant à la fonction, ou plutôt aux nombreuses fonctions liées aux opérateurs directionnels. Le sous-menu vous donne le choix entre treize opérateurs de base. Encore une fols, toutes les combinaisons entre les opérateurs et autres fonctions sont possibles. Il s'agit en réalité d'une succession de traitements, à volonté. Là non plus, nous ne pouvons pas étudier ni montrer tous les cas. Ceux-ci sont si nombreux qu'ils demandent un chapitre entier, que vous trouverez dans le prochain numéro.

APPLICATIONS,
OPERATEURS DIRECTIONNELS

Pour aborder ce vaste domaine, rappelons le rôle des opérateurs directionnels : avantager une ou plusieurs directions dans le cas de l'expansion des réglons (dilatation). Les mêmes opérateurs désavantagent les mêmes directions dans le cas de l'érosion. Notre programme d'applications agit toujours en expansion (test OR). Il est possible de le modifier (test AND), pour le faire agir en érosion.

Le sous-menu de la fonction "opérateur" affiche treize shémas du voisinage Immédiat figurant l'effet de différents opérateurs. Chaque shéma porte un numéro de code, de 1 à D (HEXA). Il suffit de donner le code pour déclencher l'action de l'opérateur. Les effets des opérateurs peuvent être combinés entre eux et avec tous les autres traitements. Les textes se prêtent particulièrement bien à ce traitement et l'effet sur un texte est peut-être plus facile à cerner. La figure n° 17 montre un ensemble de dessins représentant toujours le même texte, mais après un traitement différent, et accompagné d'un nota Identifiant les fonctions utilisées. Tous les opérateurs ne sont pas représentés, faute de place ; quant aux combinaisons, elles sont Innombrables. Les opérateurs sont très utiles pour le traitement des portraits, des natures mortes et même des paysages. Ils permettent de modifier non seulement la forme , mais aussi la *pacture" des Images scannérisées. Ceci est très Important, car une Image photo peut être transformée en dessin, peinture, croquis, graffitis, etc. en simulant la technique voulue. Prenons le cas de l'opérateur n° 3. L'expansion des réglons de l'encre se fera conformément au shéma, selon la diagonale de bas en haut et de gauche à droite. Cet exemple est montré sur la figure n° 18. Le portrait semble être exécuté au crayon par fines touches. Le gros feutre ou le petit couteau de peintre peuvent être simulés par l'emploi successif des deux opérateurs n° 3 et n° 5 (flgure n° 19). Les coups de crayon du traitement précédent peuvent être accentués par un deuxième passage de l'opérateur n° 3 (figue n° 20). L'effet de mosaïque est obtenu par la suite des opérateurs 9. A, B, C (flgure n° 21). Ces quelques exemples devraient suffire pour vous mettre sur les rails. Seule votre expérience personnelle sur des cas concrets peut vous en apprendre plus. De nombreux tests seront parfois nécessaires pou obtenir l'effet désiré. Peu Importe, tant que vous conservez l'Image d'origine et, éventuellement, les Images Intermédiaires sur votre disquette de travail. Les routines sont suffisamment rapides pour permettre ia recherche du meilleur procédé. Bien entendu, vous aurez aussi des déceptions. Un cas typique vous est montré par la flgure n° 23, Image Inverse du portrait d'origine. Le personnage est méconnaissable su ce négatif. C'est normal, mais cette Image peut être un bon stade Intermédiaire, qui serait parfois Indispensable, comme c'était le cas du double contou. Signalons, aussi, que vous pouvez créer vos propres opérateurs ainsi que toute autre fonction de votre choix basée su une succession de traitements, soit par les routines complètes, soit par les sous-routines. Examinez les lignes 3240 à 3420. Elles comportent tous les traitements par opérateurs. Le numéro de ligne d'entrée pou chaque opérateu est Identifiable à partir de la ligne 3220 (ON GOSB). N'oubliez pas que vous pouvez aussi Jouer sur les octets comportant le code de la loi booléenne utilisée. Voyez l'exemple lignes 3340 et 3360 pour l'adresse &8BF4. (Il y a deux autres octets : &8C69 et &8C93, LOISBIS et LOITER, voir listing source).

AUTRES POSSIBILITES DE TRAITEMENT

Si, après avoir chargé le programme d'application pour la première fols, vous lancez l'exécution par mRUN 1030", les matrices de seuil ne seront pas créées. Les caractères correspondants, représentant les neuf niveaux de gris, ne seront ni créés ni positionnés à la place des caractères standard ASCII 200 à 208. Néanmoins, vous pouvez utiliser la fonction de régionalisation. A la place des niveaux de gris la routine placera les caractères standard, mais toujours en fonction de la moyenne locale. La flgure n° 24 montre ce cas. Il est donc possible de remplacer l'Image binaire par le texte. Pour pouvoir faire le choix de caractères, nous vous proposons un petit additif au programme d'application. Saisissez ces quelques lignes du listing n° 2 BASIC et sauvegardez-les sous le nom "MOVESYMB', sur la disquette comportant le programme principal. A l'allumage (ou après RESET) de la machine lancez "MOVESYMB". Le programme vous demandera le code ASCII du premier caractère de la suite des neuf qui seront utilisés. Pour utiliser les caractères A à I, le code à donner est celui de la lettre A, donc : 65. La flgure n° 25 représente l'Image d'origine après la régionalisation par les lettres A à I. Compte-tenu du coefficient de remplissage de ces caractères, qui ne sont pas forcément dans l'ordre croissant, l'Image obtenue ressemble plus à l'Image Inverse qu'à l'original. Pou améliorer l'aspect. Il faut choisir le bon Intervalle ou Inverser la vidéo. C'est le cas de l'Image n° 26, utilisant les chiffres 0 à 8, encre blanche sur fond noir.


Fig. 16

Qu'avons-nous sur les images des deux dernières figures ? Rien que du texte, SI ce texte est en vidéo normale et composé uniquement de chiffres en mode 2, Il peut être traité par les programmes en BASIC de notre série d'Initiation. Il suffit de convertir les programmes pour ie mode 2. Après ça, on brouille l'Image par un filtre moyen associé à un générateu de bruit et on obtient l'image-énlgme, semblable à celle que nous avons présentée au tout début de nos articles sur le traitement de l'Image. Ainsi la boucle est bouclée ! Il ne vous reste plus qu'à traiter vos plus belles Images. En associant un utilitaire de saisie à nos routines, complétées par toutes les routines dont Je suis l'auteur et qui sont déjà publiées dans CPC : écriture évoluée, trames et collages, symétries et fenêtres symétriques, vous obtenez un ensemble de puissants logiciels de traitement graphique. Le produit final peut être une copie d'un ou de plusieurs écrans su l'Imprimante, de dimensions variées. La largeu sera limitée à la largeur de votre papier et la longueur est pratiquement celle que vous voulez. Les affiches, les Illustrations, les portraits, les créations originales, etc. Tout est maintenant à votre portée.

Alors, profitez-en !

CPC n° 38- Octobre 1988

★ EDITEUR: CPC Revue
★ ANNÉE: 1988
★ CONFIG: 64K + AMSDOS
★ LANGAGE:
★ LICENCE: LISTING
★ AUTEUR: D. VASILJEVIC

Page précédente : Traitement de l'Image Part2a (CPC Revue)

CPCrulez[Content Management System] v8.7-desktop/cache
Page créée en 039 millisecondes et consultée 725 fois

L'Amstrad CPC est une machine 8 bits à base d'un Z80 à 4MHz. Le premier de la gamme fut le CPC 464 en 1984, équipé d'un lecteur de cassettes intégré il se plaçait en concurrent  du Commodore C64 beaucoup plus compliqué à utiliser et plus cher. Ce fut un réel succès et sorti cette même années le CPC 664 équipé d'un lecteur de disquettes trois pouces intégré. Sa vie fut de courte durée puisqu'en 1985 il fut remplacé par le CPC 6128 qui était plus compact, plus soigné et surtout qui avait 128Ko de RAM au lieu de 64Ko.