LINE SCAN BAR >

Rapide, précis et compact

sur toute la longueur

Plus

CAPTEURS A BASE DE PRISME >

2ème partie de notre série sur la technologie couleur linéaire

Plus

La Vision sur le bout des doigts >

Demandez notre Guide !

Plus

Traitement de l’image sur la carte graphique : la GPU l’emporte sur la CPU

Il existe de nombreux moyens d’augmenter les vitesses d’exécution dans le traitement de l’image. Dans la dernière version de la bibliothèque Common Vision Blox, STEMMER IMAGING ouvre une nouvelle voie : certaines opérations de traitement peuvent être délocalisées vers la carte graphique du système informatique ce qui permet de multiplier par 10 la vitesse de traitement de l’image.

La plupart du temps, l’exécution des algorithmes de traitement de l’image mobilise de grandes capacités de calcul. Il convient toutefois de remarquer que, dans de nombreux cas, la puissance de calcul, en augmentation constante, des unités centrales (CPU) utilisées dans les ordinateurs modernes suffit à venir à bout de toutes les tâches requises dans le temps imparti. En dépit de quoi, les grands fournisseurs de matériels et logiciels informatiques pour le traitement de l’image mènent un travail permanent de prospection afin de découvrir de nouvelles voies, encore plus rapides, leur permettant de satisfaire aux exigences posées en matière de vitesses qui paraissent actuellement encore inatteignables.

Parmi les méthodes couramment appliquées pour élever la vitesse de traitement de l’image, citons la répartition des opérations de calcul entre plusieurs processeurs double cœur et quadri-cœur (dual and quad core) ou bien encore l’emploi de puces programmables spécialisées (FPGA). Chacune de ces technologies a ses avantages et ses inconvénients, mais elles partagent un point commun : elles n’utilisent généralement pas le processeur le plus rapide du système afin d’exécuter les algorithmes de traitement de l’image, à savoir le processeur de la carte graphique, aussi dénommé GPU (unité de traitement graphique).

Ce sprinteur parmi les processeurs a connu des évolutions incroyables au cours des dernières années. Cet essor a été favorisé par les besoins de l’industrie des jeux en matière de représentation graphique afin d’obtenir des scènes de jeu et des éléments en mouvement toujours plus proches de la réalité. Les consoles de jeu vendues à des millions d’exemplaires ont assuré une demande forte, une production à grande échelle et des gains conséquents ce qui a été bénéfique au développement et au perfectionnement des composants graphiques. Cette évolution profite désormais aussi à d’autres branches industrielles, telles que le traitement de l’image.

Même comparés sur le plan technique avec les puces FPGA les plus rapides disponibles sur le marché, les processeurs graphiques l’emportent par la supériorité de leurs résultats dans quelques domaines (voir tableau). Ils jouissent notamment d’une cadence de 10 à 20 fois plus élevée que les FPGA courantes et atteignent, avec leurs capacités de mémoire plus importantes, des débits de données jusqu’à 500 fois supérieurs à ces dernières.

Il convient cependant de noter que cette vitesse accrue n’est pas complètement mise à la disposition de l’application de traitement de l’image. En effet, l’externalisation de l’algorithmique sur les composants de la GPU induit un ralentissement du flux des données entre l’acquisition des images et le traitement des données. En dépit de cet effet, diverses études ont démontré un doublement des performances pour des opérations de calculs intensives, voire un accroissement facteur 10, lorsqu’elles sont réalisées par la GPU et se prononcent donc en sa faveur au détriment de l’unité centrale (CPU), cette dernière pouvant, par ailleurs, être utilisée en parallèle pour accomplir d’autres tâches.

La mise en œuvre relativement récente de cette technologie dans le traitement de l’image s’explique de deux manières. Premièrement, les cartes graphiques contenaient il y a encore peu plusieurs processeurs dédiés à diverses tâches. Cette architecture a été radicalement bouleversée par l’arrivée d’une nouvelle génération de processeurs graphiques, tels le GeForce 8800 de Nvidia ou d’autres produits similaires, comme ceux du fabricant ATI : à titre d’exemple, il est désormais possible d’assigner dynamiquement des opérations données, telles des calculs géométriques ou de pixels, à une partie des 681 millions de transistors contenus dans le processeur GeForce 8800. Deuxièmement, la connexion PCIe permet désormais un transfert de données rapide entre la méoire centrale et la carte VGA.

« L’architecture d’un composant graphique est toujours très complexe », explique Martin Kersting, directeur du développement chez STEMMER IMAGING. « L’interface de programmation API DirectX et le compilateur HLSL (langage de shading de haut niveau) de Microsoft couplés à quelques fonctions de notre bibliothèque logicielle Common Vision Blox permettent aux développeurs de logiciel de traitement de l’image d’échanger des images entre la mémoire centrale et la GPU et, de cette manière, d’optimiser l’emploi de tous les processeurs dans le système. »

Comme déjà évoqué, l’échange de données entre la carte VGA et la GPU provoque un certain ralentissement entre l’acquisition des images et le traitement des données sur la carte graphique. Cette technologie comporte cependant un avantage décisif, comme l’expose Martin Kersting :« En exploitant judicieusement la GPU pour traiter des images, il est possible de réaliser des applications exigeant un débit de données extrêmement élevé sans devoir acquérir du matériel spécialisé. »

Afin que les programmeurs en traitement de l’image puissent tirer profit des atouts de cette technologie basée sur la GPU de la manière la plus efficace possible, les développeurs de STEMMER IMAGING, société spécialisée dans le traitement de l’image, ont intégré cette possibilité dans leur bibliothèque logicielle Common Vision Blox (CVB). « Pour ce faire, nous avons incorporé plus de 40 nouvelles fonctions dans la CVB qui peuvent être appelées depuis une de ses applications », précise Martin Kersting.

Présentement, ces fonctions englobent, entre autres, des tâches, telles le filtrage d’image, les corrections pixel à pixel entre deux images, le traitement parallèle de quatre images monochromes, les transformations du format RVB au HSI et du format Bayer au RVG, des corrections de non-uniformité (Flat Field) ainsi que des rotations d’images et des changements d’échelle.

Entretemps, Martin Kersting et son équipe ont testé à plusieurs reprises les accroissements de vitesse permis par cette nouvelle technologie. Ainsi, des images provenant d’une caméra CCIR monochrome de type JAI A11 ont été converties sur un système informatique doté d’une carte graphique Nvidia 8800 au format 2k x 2k pixels, puis affichées sur l’écran de l’ordinateur. Simultanément à quoi, le processeur graphique calculait à la vitesse de 30 images par seconde un filtre Sobel 3 x 3 sur une image. Dans un test comparatif direct, un biprocesseur Intel Core 2 de 2,4 GHz et la carte Nvidia 8800 ont effectué des calculs pour un filtrage 5 x 5. La Nvidia 8800 s’est révélée être cinq fois plus rapide que l’Intel (voir figure 2).

Figure 2 : Dans un test comparatif direct entre un biprocesseur Intel Core 2 et une carte Nvidia 8800, cette dernière a accompli la tâche de traitement de l’image cinq fois plus vite que son concurrent.