English | Autres langues

La vision artificielle, une réalité grâce à un processeur de signaux numériques
Par Stephen Albanese, Matrox Imaging
Compte tenu de la puissance et de la flexibilité qu'ils confèrent aux applications exigeantes comme les inspections de la qualité et la visualisation médicale en direct, les processeurs de signaux numériques sont des composants de choix pour les cartes de traitement d'images. Toutefois, le concepteur de système sait qu'une solution efficace comporte plus qu'un processeur DSP intégré à une carte. En traitement d'images, la conception de cartes doit aussi prendre en compte un fort débit entrée/sortie et le besoin toujours grandissant d'un rendement plus élevé.
Les développeurs de systèmes d'imagerie scientifique, médicale et industrielle, font face aux pressions du marché pour la réduction des coûts et du delai de mise en marché, et aux besoins d'accroître la performance. Le PC est devenu un allié formidable grâce, en partie, aux technologies contributives telles que PCI, Windows NT, les processeurs Pentium Pro, les périphériques à prix modique, la convivialité et l'abondance croissantes des outils de développement de logiciels. En imagerie haut de gamme, les processeurs d'image PCI architecturés autour de processeurs DSP sont utilisés à des fins de vision industrielle, d'imagerie médicale et d'analyse d'images, alors que par le passé les OEM et les intégrateurs de systèmes s'en sont remis à des solutions exclusives ou architecturées autour du bus VME. Matrox, fournisseur chevronné de systèmes d'imagerie, vient de mettre en marché un système auxiliaire architecturé autour d'une plate-forme PC, conçu pour surpassser le ratio prix/performance des autres solutions matérielles et logicielles proposées tout en offrant une voie de migration intégrée vers une performance accrue.
Le Matrox Genesis fait appel à un processeur DSP optimisé pour des opérations de traitement d'images, le TMS320C80 de Texas Instruments. Le Matrox Genesis possède des fonctions d'acquisition, de traitement et d'affichage incorporées à une même carte PCI de performance évolutive par ajout de cartes processeurs auxiliaires. L'intégration poussée du système et son évolutivité flexible simplifient sa complexité tout en réduisant le total des coûts.
Le DSP vous propose de la puissance
Les applications de traitement d'image haut de gamme sont typiquement exigeantes quant au traitement pixel et les besoins de performances en temps réel. Évidemment, la notion de temps réel est relative. Il est peut-être nécessaire d'inspecter les étiquettes de 20 000 bouteilles/heure, ou un produit qui requiert un étalonnage couleur en direct de plusieurs pieds/seconde. En imagerie médicale, l'exécution de convolutions à grand noyau dans des affichages haute résolution de 30 images/seconde, est une pratique courante.
Pour de telles applications, le matériel de traitement d'images doit comporter une mémoire d'images et une fonction de traitement intégrées à la carte. Le processeur TI C80 DSP est un point de départ à la fois excellent et économique pour ces besoins de rendement, offrant une puissance et une flexibilité de programmation suffisantes pour l'exécution de plusieurs opérations de traitement d'images, malgré les contraintes de temps réel. Pour décharger les tâches de gestion de données et permettre au DSP de réaliser son plein potentiel de traitement, Matrox a conçu une interface vidéo ASIC (VIA). Cette interface exécute des transferts optimisés à la carte ou en provenance de celle-ci, gère les flux de données, contrôle l'accès du bus et accomplit d'autres tâches afin d'assurer une performance maximale.
Le TI C80 est un multiprocesseur DSP qui comporte un processeur maître RISC (PM), quatre processeurs parallèles (PP) ayant chacun leur propre mémoire SRAM et reliés par réseau crossbar. L'acheminement des données est exécuté par un contrôleur de transfert dédié. Tel qu"illustré dans le schéma fonctionnel de la carte principale (Illustration 1), le Matrox Genesis utilise cette puce comme l'un des composants de sa fonction de traitement.
Image 1
Illustration 1
Circuits ASIC - une puissance accrue
Bien que le TI C80 puisse exécuter, sur une image 512 x 512 x 8 bits, des opérations en 2 ou 3 ms (par exemple point à point), les opérations de voisinage telles que les convolutions ou la morphologie, fondamentales en traitement d'images, sont beaucoup plus lentes. Le processeur ASIC accélérateur d'opérations de voisinage (NOA) de Matrox, disponible en option, supplée à ce manque de puissance du TI C80. Il consiste en une matrice de cellules MAC (multiplication/somme) pouvant effectuer simultanément 32 sommes de produits à 50 MHz, et exécute les opérations de voisinage jusqu'à 20 fois plus rapidement que le TI C80 travaillant seul.
Interface avec toutes les unités périphériques
Les applications de traitement d'images requièrent non seulement des composants de traitement puissants mais également une flexibilité d'acquisition. Compte tenu de la large gamme de caméras utilisées, le matériel de traitement d'images pressenti pour les applications scientifiques, médicales et industrielles doit pouvoir s'interfacer à une gamme complète de capteurs. En plus des caméras standard RS-170/CCIR et RVB; les caméras non standard, couleur et monochrome, analogiques et numériques, progressives; les caméras à cadence d'images plus élevée (60 images/sec ou plus); les caméras à sorties multiples et les caméras de résolution plus élevée; sont utilisées de plus en plus fréquemment. Les applications d'inspection industrielle requièrent normalement une interface à des caméras à balayage linéaire. On utilisera, pour l'inspection de cartes à circuits intégrés, des caméras numériques dont les images sont plus précises et contiennent moins de bruit que celles des caméras analogiques.
Afin de satisfaire ces besoins de saisie d'image, le module d'acquisition du Matrox Génésis, en mezzanine à la carte principale, est entièrement programmable. On peut l'interfacer pratiquement à toutes les caméras : analogiques, numériques, monochrome, couleur, ou à balayage linéaire. En plus de contrôler le flux des données, la puce d'interface VIA peut reformater, à l'entrée, les données pixel reçues en temps réel de dispositifs vidéo produisant des données de pixels non contigus.
Affichage haute performance
Les besoins d'affichage varient selon les applications, mais il est probable qu'il sera nécessaire d'afficher en temps réel les images traitées et qu'un opérateur devra intervenir. Il en va de même pour l'affichage de plusieurs fenêtres dans un espace de travail efficace; il faut un grand bureau virtuel. Il est aussi possible, pour marquer les secteurs d'intérêt et les bordures, que vous deviez superposer à une fenêtre vidéo en direct des rectangles ou des réticules, dans l'exécution de tâches telles que l'alignement de composants. En imagerie scientifique ou médicale, il est possible que vous utilisiez des graphiques ou du texte pour annoter des affichages.
La fonction d'affichage intégrée à la carte principale du Matrox Genesis est régie par une deuxième puce d'interface VIA et inclut le processeur graphique MGA 2064W de Matrox, jusqu'à 8 Mo de mémoire WRAM, et une puce RAMDAC 220 MHz pour des résolutions atteignant 1600 x 1200 à 85 Hz, gage d'une accélération graphique et d'un grand bureau électronique. Deux mémoires tampon, une pour l'image (8 ou 24 bits) et la deuxième pour le recouvrement (8 bits) permettent de superposer, de façon non destructive, votre bureau électronique et d'autres images, à votre fenêtre de vidéo en direct.
Solutions entrées/sorties
Pour éviter les goulets d'étranglement, un système auxiliaire de traitement d'images doit pouvoir satisfaire les besoins entrées/sorties résultant de l'acquisition, du traitement et de l'affichage simultanés de vidéo ultra-rapide. Le Matrox Genesis maintient un fort débit entrée/sortie grâce au VIA, qui gère et contrôle toutes les interfaces de données et qui utilise la mémoire SDRAM comme mémoire principale. De multiples bus dédiés, ultra-rapides, assurent le transfert de données entre les unités de la carte principale et des cartes processeurs, entre les cartes elles-mêmes, vers des ressources externes comme le PC hôte, ou en provenance de celles-ci (voir illustration 2).
Image 2
Illustration 2
Blocs de traitement pour un système flexible
Les besoins en performances d'un système varient d'une application à l'autre. Pour résoudre ce problème, Matrox a retenu le concept des noeuds de traitement, qui sont les éléments de base de la puissance de traitement du Matrox Génésis. La carte principale est munie d'un noeud de traitement alors que chaque carte processeur auxiliaire en possède un ou deux. Un noeud comprend un processeur TI C80, un processeur NOA ASIC (en option), une puce VIA ASIC et jusqu'à 64 Mo de mémoire SDRAM.
Les opérations soumises à un noeud de traitement sont traitées automatiquement, le noeud ayant recours à toutes les ressources nécessaires pour que les opérations soient exécutées à la vitesse maximale. Il n'est pas nécessaire que le développeur optimise le processeur maître du TI C80, les processeurs parallèles ou le processeur NOA. Un contrôle d'optimisation est cependant disponible, si nécessaire.
Une évolutivité flexible
Pour les applications qui le requièrent, il est possible d'utiliser de multiples noeuds de traitement en ajoutant des cartes processeurs auxiliaires à la carte principale (voir illustration 2). Ces noeuds peuvent être utilisés en parallèle, conformément au modèle SIMD (single instruction, multiple data), ou selon le modèle MIND (multiple instructions, multiple data).
Il y a plusieurs façons de répartir les tâches d'une application entre les noeuds. Le développeur peut choisir de laisser chaque noeud saisir une partie différente des données reçues et de traiter cette partie seulement. On obtient ainsi le temps d'attente le plus court pour produire une image, mais cette approche n'est pas appropriée pour certains algorithmes qui requièrent qu'un seul processeur ait accès à toute l'image. Une autre approche serait de permettre à chaque noeud de saisir et de traiter les données d'une image complète, chaque image subséquente étant dirigée vers un noeud différent. La période d'attente sera plus longue, mais la performance sera directement proportionnelle au nombre de noeuds utilisés et vous pourrez exécuter presque n'importe quel algorithme (car chaque noeud aura accès à une image complète). Une autre façon serait d'affecter un noeud à la saisie et de le laisser exécuter la première partie du traitement avant de soumettre les résultats partiels obtenus au noeud suivant du pipeline.
En d'autres mots, le Matrox Genesis supporte les topologies parallèle et pipeline, ou toute combinaison de ces deux approches. La nature de l'application en cause déterminera quelle approche sera la meilleure, mais diverses caractéristiques du Matrox Genesis aideront le développeur à programmer un algorithme multitraitement. Premièrement, les images saisies sont présentées à tous les noeuds d'un système. Chaque noeud peut prendre toute l'image ou une partie seulement, réduisant ainsi les transferts internoeuds. Deuxièmement, le canal VM relie tous les noeuds; il est donc facile d'acheminer les résultats vers un noeud spécifique pour un traitement plus poussé ou pour affichage. De plus, chaque TI C80 a un accès direct à chaque noeud du bus PCI. Normalement, on utilisera cette caractéristique pour l'acheminement de messages ou pour le partage d'une quantité limitée de données.
Chaque application étant différente, les exigences de traitement varieront. Elles seront influencées par la résolution de la caméra, la profondeur de bits ainsi que par le nombre et les types d'opérations à exécuter à l'intérieur des contraintes de traitement en temps réel. Par exemple, une caméra haute résolution, 60 images/seconde, impose des contraintes de temps réel plus sévères que celles d'une caméra standard à 30 images/seconde. Certaines opérations, comme la corrélation normalisée, font appel à des algorithmes de plus haut niveau qui requièrent une plus grande puissance de traitement qu'un simple ajout à une image, par exemple. Le cas échéant, l'évolutivité du Matrox Genesis donne aux développeurs une voie de migration facile vers une performance accrue; on peut donc développer les algorithmes ultérieurement. Les deux exemples suivants illustrent de quelle façon un développeur jouit d'une maîtrise complète en ce qui a trait à la configuration optimale du traitement par noeuds multiples.
Exemple de traitement parallèle
Maintes applications d'imagerie médicale requièrent l'acquisition, le traitement et l'affichage d'images pour fins de visualisation et d'étude. Le traitement typique peut comprendre un filtrage des parasites et un filtrage temporel, la mise en évidence des bordures, et l'ajustement luminance/contraste. La carte principale peut suffire pour exécuter ces opérations sur une image 512 x 512 x 8 bits à 30 trames/seconde, mais il faudra peut-être ajouter une carte processeur dans le cas d'une image 1k x 1k x 10 bits à 30 trames/seconde.
Dans l'exemple d'algorithme que nous avons retenu, un seul noeud prendra environ 20 ms pour accomplir le filtrage des parasites et le filtrage temporel d'une image 1k x 1k x 10 bits à 30 trames/seconde. La mise en évidence des bordures, au moyen de grandes convolutions 7 x 7, requerra 26 ms, alors qu'il faudra 11 ms pour l'ajustement luminance/contraste. Parce que cet algorithme requiert approximativement 57 ms s'il est exécuté par un seul noeud, on aura normalement recours à trois noeuds pour le traitement en temps réel (l'utilisation de 3 noeuds laisse amplement de puissance si, par la suite, on devait ajouter des opérations supplémentaires à l'algorithme).
Tel qu'illustré (voir Illustration 3), les images sont saisies et transmises simultanément aux trois noeuds. Chaque noeud saisit un secteur d'intérêt différent pour le traiter. Un secteur a la dimension de 1024 x 350 pixels (on utilise un léger chevauchement pour éviter les effets de bordure). Le VIA primaire de chaque noeud achemine pour affichage, par le canal VM, les résultats de chaque secteur traité; le VIA du module d'affichage de la carte principale "recolle" l'image ensemble, en temps réel.
Image 3
Illustration 3
Traitement pipeline/rotation
La façon traditionnelle de satisfaire les fortes exigences de l'inspection en temps réel a été de recourir à une architecture pipeline. Bien que cette approche puisse satisfaire certains besoins, elle peut parfois coûter cher et être inflexible. De même, quoique le traitement pipeline puisse être accompli par la carte principale et les cartes processeur du Matrox Génésis, il serait plus efficace de laisser traiter chaque bloc de données d'image par un noeud alors disponible.
Dans l'exemple suivant (voir Illustration 4), voici l'algorithme qu'il faut utiliser pour faire l'inspection d'un boîtier BGA et détecter les billes manquantes. En premier lieu, il faut repérer des coins opposés du boîtier pour en déterminer l'orientation précise. Ensuite, on procédera à l'alignement de l'image source à l'image de référence et à la soustraction d'image. Finalement, un compte des taches (bille manquante) sera fait. Souvent, en vision artificielle, les algorithmes se prêtent mal à la subdivision d'une image. Par exemple, les opérations comme le filtrage ou l'analyse de taches exigent une recherche de l'image en son entier.
Image 4
Illustration 4
Chaque filtrage, pour trouver l'image de référence qui montre les deux coins opposés du boîtier, dure environ 5 ms (x 2=10 ms). L'alignement, à une fraction de pixel près, avec l'image de référence (rotation avec interpolation bilinéaire des pixels) demandera 22 ms. La soustraction d'image de l'image de référence exigera 4 ms et l'analyse de tâches pour repérer les billes manquantes prendra en moyenne 10 ms. Le temps de traitement requis pour cet exemple est donc de 46 ms. Pour une exécution en temps réel, il faudra recourir à deux noeuds de traitement (c'est-à-dire un traitement de moins de 33 ms puisque l'exemple donné fait usage d'une caméra standard RS-170). Dans ce cas-ci, la configuration optimale serait probablement l'utilisation d'une carte principale avec une carte processeur comportant un seul noeud.
Le premier noeud traitera une image complète. Comme 46 ms sont requises pour traiter une image complète, un deuxième noeud traitera l'image suivante (n + 1) pendant que le premier noeud termine sa tâche. Si l'on dispose d'assez de noeuds, il sera possible de maintenir un traitement en temps réel, même dans le cas d'algorithmes complexes, de caméras plus rapides, ou de résolutions plus élevées. De plus, il sera facile d'écrire un programme pour que l'application utilise autant de noeuds que nécessaire pour une exécution en temps réel.
Soutien logiciel multiniveaux
Comme le développement de logiciel peut constituer l'investissement le plus important en ce qui a trait à la solution d'une application, les outils de développement de logiciel comme les bibliothèques devraient, non seulement offrir une fonctionnalité globale, mais aussi la flexibilité requise pour exécuter, au besoin, des opérations personnalisées. Matrox offre trois niveaux de programmation pour le Matrox Genesis : une bibliothèque non tributaire du matériel - Matrox Imaging Library (MIL), une bibliothèque Matrox Genesis Native Library adaptée à la carte, et la trousse d'outils Matrox Genesis Developer's Toolkit (DTK). La trousse DTK est utilisée pour la programmation directe du processeur TI C80 DSP, de concert avec les outils de développement de logiciel TMS320C80 de Texas Instruments.
Des bibliothèques globales
MIL et Native Library possèdent un ensemble considérable de fonctions préétablies et optimisées pour le traitement point à point, la morphologie, les opérations de voisinage, les statistiques, les transformations géométriques ainsi que les analyses de taches, la reconnaissance des formes et l'alignement, le jaugeage, et la compression JPEG. Bien que ces deux bibliothèques aient généralement les mêmes commandes, Native Library possède quelques commandes supplémentaires pour exploiter les caractéristiques de la carte.
La bibliothèque MIL fera appel aux commandes équivalentes de Native Library lorsqu'on l'utilise pour mettre une application au point. La bibliothèque Native Library est un ensemble de programmes de substitution, un pour chaque code opérationnel supporté. Les commandes de Native Library sont enclenchées par le processeur hôte et adressent des appels de procédure à distance aux fonctions de traitement du C80 (les commandes en langage machine {Shell} de Native Library sont dans la mémoire SDRAM du processeur). Les commandes répartissent les tâches, automatiquement, entre les processeurs multiples (les processeurs parallèles du TI C80 et le processeur d'opérations de voisinage NOA). Cependant, un ensemble de commandes a été prévu pour assurer le contrôle des processeurs, si désiré (il n'est pas nécessaire d'utiliser la trousse DTK pour répartir les tâches entre les processeurs).
Flexibilité maximale et extensibilité pour l'utilisateur
Pour mettre votre application au point, vous pouvez vous servir de MIL, de Native Library, de DTK ou de toute combinaison de ces trois approches. Pour mettre au point du code surtout portable, le développeur est en mesure d'utiliser des commandes MIL pour écrire la majeure partie de l'application, et de faire appel à la programmation en mode naturel de MIL pour exécuter des commandes Native Library pour certaines tâches.
Si la portabilité n'est pas un impératif, vous pouvez écrire toute l'application avec Native Library. L'extensibilité de Native Library permet à l'utilisateur de personnaliser des fonctions du TI C80 pour des applications spéciales. On peut utiliser la trousse DTK pour ajouter des fonctions spécialisées à la bibliothèque. On ajoutera, de façon transparente, ces fonctions personnalisées au programme de l'application. Les applications complètes mises au point avec Native Library peuvent être portées, au besoin, au TI C80 pour traitement interne.
Conclusion
En misant sur la puissance de processeurs de signaux numériques optimisés pour le traitement d'images tel le TI C80, les fournisseurs comme Matrox pourront utiliser la technologie PC, même pour les applications les plus exigeantes en imagerie médicale, industrielle et scientifique. Occupant une seule carte, flexible et offert en magasin, le Matrox Genesis est un système auxiliaire qui apporte une solution aux problèmes d'entrée/sortie et aux besoins de traitement; son évolutivité rend possible pratiquement n'importe quel niveau de performance.
Haut de page
Plan du Site Contactez-Nous Procédures E-mail Matrox