|
||||||||||||||||||||||||||||||||||||||||||||
|
Une station de travail de traitement d'images peu coûteuse mais puissante peut être construite autour de l'Amiga. Le traitement d'images consiste à utiliser un ordinateur afin de manipuler des images numérisées à tonalité continue. Un poste de travail de traitement d'images doit offrir trois fonctions de base : les moyens de numériser, d'afficher et de manipuler les données de l'image. Le poste de travail peut également fournir un moyen de stocker et de distribuer ces données. Il n'y a pas si longtemps, un poste de travail de traitement d'images pouvait facilement coûter plus de 100 000 $. Aujourd'hui, avec du matériel et des logiciels innovants, vous pouvez construire un système performant pour moins de 2500 $. Je vais décrire ici une telle station de travail basée sur l'ordinateur personnel Amiga 1000. La station de travail Le matériel de cette station de travail consiste en un ordinateur Amiga 1000 avec 1 Mo de mémoire et deux lecteurs de disquette, un numériseur vidéo Digi-View et une caméra vidéo noir et blanc. L'équipement optionnel comprend des éléments tels qu'une caméra 35 mm ou un magnétoscope pour capturer votre production et un support de copie pour augmenter la stabilité de l'installation de numérisation. L'ordinateur Amiga constitue la base de la station de travail. Il est particulièrement adapté au traitement d'images en raison de ses graphismes haute résolution, de sa mémoire facilement extensible et de sa capacité à traiter de grandes quantités de données. Les puces graphiques spécialisées de l'Amiga peuvent afficher une image de 640 colonnes sur 400 rangées de pixels de 4 bits. À ce jour, il s'agit de la plus haute résolution d'affichage standard sur un ordinateur personnel. Le seul autre ordinateur personnel qui s'en rapproche est un IBM PC équipé de la technologie EGA (Enhanced Graphics Adapter), qui a une résolution maximale de 640 colonnes par 350 rangées de pixels de 6 bits (ainsi, chaque pixel peut disposer de 64 couleurs possibles). Bien que cette configuration semble avoir une meilleure gamme dynamique de pixels (6 bits contre 4 bits), vous pouvez faire correspondre les pixels de l'Amiga grâce à l'utilisation d'une palette mémoire à 16 des 4096 couleurs possibles. Les 64 couleurs de l'EGA sont fixes, ce qui rend difficile l'affichage acceptable d'images monochromes ou en couleur à tons continus. L'architecture de l'Amiga permet un accès facile à de grandes quantités de mémoire. C'est peut-être l'aspect le plus important de l'utilisation d'un Amiga comme station de travail de traitement d'images. Tout d'abord, l'Amiga utilise un processeur Motorola 68000, qui adresse la mémoire comme un tableau linéaire de mots. Cette caractéristique vous permet de charger une image complètement dans la mémoire et de la traiter simplement comme un grand tableau via un langage de haut niveau ou un programme en langage d'assemblage. Deuxièmement, pour ajouter de la mémoire, il suffit de brancher une carte dans un connecteur de bus d'expansion sur le côté de la machine. Pour cet article, j'ai utilisé un Alegra 512K/2M qui peut être configuré avec 512 ko ou 2 Mo de mémoire ; le mien a 512 ko. Vous pouvez acheter des cartes de 2 et 4 Mo, et vous pouvez souvent relier les cartes en guirlande ou les brancher dans des boîtes d'extension pour remplir complètement les 8 Mo d'espace d'adressage réservés à la mémoire utilisateur. Sur le PC IBM, l'ajout de plusieurs Mo de mémoire est une simple question de branchement de cartes mémoire sur le bus interne. Cependant, le PC original (et même le PC AT avec les versions actuelles de MS-DOS) ne peut pas accéder directement à plus de 640 ko de mémoire (divers fabricants de logiciels et de matériels proposent des moyens de contourner ce problème, mais ils ont tous tendance à être non standard, sont difficiles à appeler depuis un programme et ralentissent l'accès à la mémoire). La manipulation des images dans l'espace d'adressage restreint de 640 ko est au mieux difficile. L'Amiga est également plus facile à programmer pour les applications de traitement d'images en raison de la manière dont il adresse la mémoire. Concrètement, pour déclarer un tableau de 128 000 octets sur Amiga en C, vous pouvez utiliser la syntaxe suivante :
En raison de la nature de l'architecture, les tableaux de plus de 64 535 octets sont difficiles à manipuler sur l'IBM PC et ses compatibles. Heureusement, ce ne sera pas le cas pour les machines à base de 80386. Ainsi, le coût, l'architecture et les capacités graphiques inhérentes de l'Amiga lui confèrent la position la plus favorable en termes de prix/performance pour les applications de traitement d'images. Capturer des images Avant de pouvoir afficher et manipuler une image, vous devez disposer d'une image. Vous résolvez ce problème avec un élément de matériel tel que le Digi-View de NewTek. Ce périphérique permet de connecter une caméra vidéo noir et blanc standard au port parallèle de l'Amiga. Lorsque vous combinez certains logiciels et ce matériel, l'installation complète de numérisation coûte moins de 400 $, en incluant une caméra noir et blanc (NewTek vend une caméra Panasonic CCTV modèle WV-1410, qu'elle a fournie avec le Digi-View pour cet article). Cet ensemble peut numériser des images en noir et blanc à des résolutions de 640x400 ou 320x200, avec 16 nuances de gris, ou des images en couleur à des résolutions de 320x200. Cette configuration dispose de deux modes de numérisation en couleur. Le premier utilise la palette de 32 couleurs de l'Amiga pour afficher des images en couleur ; le second utilise le mode "Hold And Modify" de l'Amiga pour afficher une image de 4096 couleurs à l'écran. J'ai utilisé exclusivement le mode noir et blanc 640x400. Les logiciels Deux types de logiciels contribuent à la viabilité de l'Amiga en tant que station de travail de traitement d'images. Le premier type comprend les langages de traitement d'images courants tels que C, Fortran 77 et LISP. Certains des langages les plus récents sont également disponibles pour l'Amiga, notamment FORTH, Modula-2 et Pascal. Vous pouvez également écrire des applications de traitement d'images dans le dialecte BASIC fourni avec la machine, mais ces programmes ont tendance à être plutôt lents. Il existe plusieurs outils pour manipuler les images et les données graphiques. Certains d'entre eux ont été écrits par Electronic Arts et sont tombés dans le domaine public en même temps que la spécification du format de fichier interchangeable IFF. D'autres ont été conçus pour la manipulation des graphismes mais sont utiles ici aussi. Tous les outils IFF que j'ai utilisés se trouvent sur la disquette de distribution IFF, qui est disponible auprès de Commodore et de nombreux babillards aux États-Unis. Vous trouverez à la fin de cet article des informations sur la façon de vous en procurer une copie. La norme IFF est complexe car elle est très flexible : elle permet de décrire de la musique, du texte, des animations, etc. Les outils IFF ILBM2Raw et Raw2ILBM (ILBM signifie "interleave bit map") convertissent les images complexes du format IFF en un format "brut" beaucoup plus simple, et vice versa. Le format brut pour les images 640x400 consiste en 4 plans de bits, chacun d'entre eux étant de 640x400 bits, suivis d'un tableau de 16 mots de cartes de couleurs sans en-tête ou autre information. En complément des outils de la disquette IFF, j'ai écrit deux routines C, ReadImage() et WriteImage(), pour gérer les images au format brut. Ces routines permettent de lire et d'écrire des images brutes, tandis que Pixel() et SetPixel() permettent de lire et de définir des pixels individuels dans une image [NDLR : les programmes décrits dans cet article sont disponibles sur disquette, en version imprimée et sur BIX. Ils sont également disponibles sur BYTEnet. Les fichiers sont IMAGEIO.C et EDGE.C. Vous aurez besoin d'un Amiga et de Lattice C pour les utiliser]. Lorsque vous avez fini de traiter un fichier, vous pouvez le reconvertir au format IFF et l'utiliser avec d'autres programmes. Utilisation du système Le déroulement typique d'une recherche en traitement d'images est généralement un processus en six étapes. Les étapes sont l'acquisition d'une image numérisée, le développement d'un algorithme pour la traiter, le traitement de l'image, la comparaison du résultat avec les résultats souhaités, la modification de l'algorithme, et le retour à la troisième étape jusqu'à ce que vous soyez satisfait. Je vais couvrir chaque étape pour démontrer comment utiliser l'Amiga comme une station de travail de traitement d'image. Acquisition de l'image L'utilisation du Digi-View est très simple. Après avoir lancé la version haute résolution du logiciel Digi-View, vous focalisez la caméra vidéo sur l'image à numériser. Sélectionnez ensuite l'option "Digitize", et l'image sera numérisée en mémoire. À ce stade, le logiciel vous permet de manipuler les données de l'image de plusieurs façons utiles. Vous pouvez notamment régler le contraste, la luminosité et la netteté de l'image. Une fois que l'image est ajustée à votre satisfaction, vous l'enregistrez avec l'option "Save IFF" (Enregistrer IFF) dans le menu "Project" (Projet). Le format IFF est inutilement complexe pour le traitement d'images, vous utilisez donc l'outil ILBM2Raw IFF à partir de l'interface de ligne de commande de l'Amiga pour convertir l'image en format brut plus simple. Développement de l'algorithme Pour cet article, j'ai utilisé un dérivé de l'algorithme de détection des contours de Sobel. L'algorithme classique de Sobel crée une image de bord en calculant la dérivée bidimensionnelle de l'image source. L'algorithme calcule cette dérivée en examinant chaque pixel de l'image source et ses huit voisins les plus proches. Le pixel d'intérêt et ses voisins sont traités comme un tableau de 3x3 (voir figure 1). ![]() Figure 1 : l'algorithme de Sobel pour le traitement des images décompose les réseaux de pixels en sous-réseaux de 3 par 3 L'algorithme calcule la moyenne des intensités des trois pixels situés de part et d'autre de chacune de ces lignes (pour la ligne d-e-f, par exemple, il compare la moyenne des pixels a, b et c avec la moyenne des pixels g, h et i). L'algorithme remplace ensuite le pixel central par la plus grande différence absolue des quatre opérations de calcul de la moyenne. Après avoir construit une nouvelle image de bord de cette manière, le programme fait passer l'image par un filtre à seuil. Le filtre examine chaque pixel et lui attribue un 0 ou 1, selon que sa valeur est supérieure à un seuil donné. Dans cette image binaire, tous les pixels "dedans" représentent des bords supérieurs au seuil donné. Malheureusement, cet algorithme présente deux inconvénients majeurs. Le premier est sa lenteur ; l'analyse de chaque pixel pendant l'opération de seuillage nécessite 16 additions et 8 divisions suivies ensuite d'une comparaison de magnitude. Le second problème est le bruit. Le Digi-View fournit des images remarquablement propres, mais la caméra est sensible à une certaine quantité de bruit gaussien (causé par l'émission spontanée occasionnelle d'électrons provenant de l'excitation du phosphore sur la face du tube Vidicon). Ce bruit se manifeste par des pixels individuels dont l'intensité est beaucoup plus élevée ou beaucoup plus faible que celle de leurs voisins. Lorsque vous utilisez l'algorithme de Sobel, ce bruit peut fausser les moyennes des trois groupes de pixels. Une solution au problème du bruit est d'obtenir une image avec moins de bruit. NewTek a modifié la nouvelle version du logiciel de numérisation pour y parvenir en faisant la moyenne de plusieurs images provenant de la caméra. L'autre solution serait d'augmenter la taille de la matrice de pixels à 5 par 5 ; cependant, cela la ralentirait encore plus. Pour lutter contre le problème de vitesse, j'ai modifié l'algorithme de Sobel pour prendre en compte les extrémités de chaque ligne, plutôt que les moyennes utilisées dans l'algorithme original. Le nouvel algorithme compare la magnitude absolue du changement d'intensité entre ces deux points à une valeur seuil spécifiée par l'utilisateur. Si ce seuil est dépassé, l'algorithme définit le pixel correspondant dans l'image de destination comme indiquant un bord et ne fait aucune autre analyse sur ce pixel. Si aucune des quatre magnitudes possibles ne dépasse le seuil, la valeur du pixel de l'image source est copiée dans l'image de destination. On obtient ainsi une image résultante avec les bords détectés par l'algorithme superposés à l'image originale. Il permet également d'obtenir une image traitée en environ un sixième du temps. Traitement de l'image Le programme qui implémente cet algorithme et traite l'image s'appelle "EDGE.C". Il utilise les routines du module IMAGEIO pour manipuler l'image en mémoire et pour déplacer l'image vers et depuis le disque. Comparaison de la sortie avec les résultats souhaités Les photos 1, 2 et 3 montrent respectivement l'entrée, la sortie avec une valeur de seuil de 2 et la sortie avec un seuil de 4. J'ai d'abord fait passer ces images par l'outil Raw2ILBM pour les convertir au format IFF, puis j'ai utilisé SeelLBM pour les afficher. ![]() Photo 1 : L'image originale telle que numérisée par le Digi-View ![]() Photo 2 : l'image de la photo 1, dont les bords ont été détectés par le programme de traitement d'images décrit dans le texte, avec un seuil fixé à 2. ![]() Photo 3 : l'image de la photo 1, dont les bords ont été détectés par le programme de traitement d'images décrit dans le texte, avec un seuil fixé à 4. Modifier l'algorithme et continuer Cet algorithme d'arêtes n'est pas parfait : il détecte parfois des arêtes qui ne sont que des taches et peut manquer des arêtes graduelles. L'algorithme n'utilise pas non plus d'informations telles que la ligne de symétrie sur laquelle se trouve le bord ou l'importance de la différence que représente le bord. Ces deux éléments seraient des indices utiles qu'un système de vision pourrait utiliser pour identifier la direction des bords et ignorer les fausses indications de bords. Sauvegarde de votre travail Vous pouvez aborder cet aspect de la configuration de trois façons. La plus simple est d'utiliser l'Amiga comme appareil de visualisation et de stocker les images traitées dans des fichiers sur disque. L'Amiga possède un port de sortie vidéo composite conforme à la spécification vidéo NTSC. Vous pouvez l'utiliser pour enregistrer ce qui est à l'écran sur une bande vidéo - afficher une image, l'enregistrer, faire une pause, créer une nouvelle image, l'enregistrer, faire une pause, et ainsi de suite. Vous pouvez ensuite emporter la cassette vidéo avec vous et l'utiliser comme un "carrousel de diapositives" magnétique. C'est beaucoup plus pratique que de trimballer un ordinateur lourd, un moniteur, un lecteur de disquette, un logiciel, etc. Vous pouvez également aborder la question de la copie papier de trois façons. La première consiste à photographier l'écran avec un appareil photo. J'ai utilisé cette technique pour les photos de cet article. La deuxième consiste à utiliser une "imprimante vidéo" telle que la Polaroid Palette. Cette technique a l'avantage de garantir une bonne exposition puisqu'elle élimine les erreurs dues aux reflets ou à l'alignement de l'écran. La dernière consiste à utiliser la capacité de l'Amiga à décharger des graphismes sur n'importe quelle imprimante graphique connectée au port d'imprimante. En fonction de votre imprimante, cette méthode peut être la moins satisfaisante. Une combinaison puissante La combinaison de l'Amiga et du numériseur NewTek est puissante. Je n'ai traité que le cas des images en noir et blanc, mais le matériel est capable de traiter la couleur, ce qui ajoute un autre niveau de complexité au système. Le système existant fournit suffisamment de puissance pour de nombreux types différents d'applications de traitement d'images. Il offre également un moyen facile d'augmenter cette puissance. Des cartes mémoire de plusieurs mégaoctets, des cartes avec coprocesseur arithmétique, des disques durs et même des cartes accélératrices 68020 sont disponibles pour l'Amiga. Elles augmentent toutes la vitesse et les capacités de la machine. A propos du système Les outils IFF mentionnés dans cet article sont disponibles auprès de BIX, BYTEnet Listings, Commodore ou Fred Fish (qui gère une bibliothèque de logiciels du domaine public pour Amiga). Pour les obtenir auprès de Commodore, envoyez un chèque de 20 $ et une note demandant le "Standard for Interchange Format Files (EA IFF) Documentation and Disk" à Commodore Business Machines, 1200 Wilson Dr., West Chester, PA 19380, à l'attention de Kim Montgomery. Pour obtenir les outils auprès de Fred Fish, envoyez un chèque de 6 $ et une note demandant le "Volume 16" à Fred Fish, 1346 West 10th Place, Tempe, AZ 85281. Votre groupe d'utilisateurs ou votre revendeur local peut également avoir les outils sous le nom de "Fish Disk 16". Tous ces outils sont dans le domaine public. Les autres logiciels que j'ai utilisés dans cet article comprennent le compilateur C 3.10 de Lattice Inc. et le logiciel Digi-View 1.0 fourni avec le Digi-View. Le matériel utilisé est un Amiga 1000 avec une carte mémoire Alegra de 512 ko et un disque dur MicroBotics MAS-20, l'unité Digi-View et une caméra vidéo Panasonic CCTV modèle WV-1410. J'ai pris des photos avec un appareil Canon AE-1 35 mm SLR, en utilisant un film Kodak Ektachrome 100 tourné au 1/15 de seconde avec un F-stop de 2.8. L'auteur de cet article Charles McManis (1.141 Vasquez Ave., Sunnyvale, CA 94086) est ingénieur chez Sun Microsystems. Il a obtenu son B.S.E.E. de l'Université de Californie du Sud en 1983 et programme des ordinateurs de manière professionnelle depuis 1976.
|