Brevet FR3088160A1 — publié le 20200508

CAPTEUR D'IMAGE POUR LA RECONNAISSANCE OPTIQUE DE CODE(S) DOMAINE TECHNIQUE La présente invention concerne les capteurs d'image matriciels de type CMOS, à pixels actifs (structure de pixel à élément photosensible et transistors de commande) utilisés dans les dispositifs de reconnaissance optique de codes. Il y a les codes-barres qui sont des codes symboliques, linéaires (code barre 1 D) ou matriciels (OR code, Data Matrix, Aztec, ...etc.). Ces codes sont par exemple imprimés (étiquettes, billets, affiches) ou gravés sur des produits industriels ou de grande distribution, des produits médicaux ou de laboratoire, ou des livres, ou ils s'affichent comme une image sur un Smartphone par exemple (code électronique). Ils sont utilisés pour des applications aussi variées que la traçabilité (fabrication, distribution, soins de santé), la vente, la gestion de stock, la billetterie (transports, musées) et plus généralement l'accès à des services payants, ou encore le renvoi vers des contenus enrichis (pages de site web). Le code à reconnaître peut aussi être une chaîne(s) alphanumérique(s), imprimée ou gravée sur un document papier ou une plaque (plaque d'immatriculation), et les applications concernées sont notamment la gestion d'accès sécurisée et/ou payante à des services, comme par exemple, la reconnaissance de plaques minéralogiques au passage de péages routiers, ou l'accès à des parkings automobiles. ETAT DE LA TECHNIQUE Un système de reconnaissance optique de code assure deux fonctions : la capture d'image et la reconnaissance ou lecture de code(s), par 25 traitement numérique de l'image, qui lui permet d'associer le code reconnu à un produit, un contenu informatif, un service, ...etc. La capture d'image est réalisée par un capteur d'image intégré dans un lecteur (lecteur de code) qui intègre aussi le système d'éclairage (une source lumineuse telle que des leds et/ou un laser, associée à un ensemble optique 30 (miroirs, lentilles) et une électronique de commande qui, sur activation externe (par un moyen mécanique tel qu'un bouton ou une gâchette, ou électronique, tel qu'un système de détection de présence), commande 2 l'éclairage de l'objet cible et déclenche la prise d'image par le capteur. Un viseur laser peut aussi être prévu (mire de centrage). Chaque image est transmise à un système externe de traitement numérique qui analyse l'image pour détecter (localiser) et reconnaître (décoder) le ou les codes contenus 5 dans l'image, par des logiciels de traitement numérique adaptés, et déclencher les fonctions applicatives associées. Ce système doit être capable de reconnaître le ou les codes rapidement, et utilise pour cela des ressources matérielles d'analyse d'image (mémoires, micro-processeurs DSP), pour mettre en oeuvre différents algorithmes complexes de traitement 10 d'image, pour la localisation, la recherche de type de code (critères géométriques), la réorientation dans une direction de déchiffrage, le déchiffrage. Plusieurs images peuvent être nécessaires pour cela, selon la qualité d'image, notamment en fonction du contraste : le système déclenche alors le 15 lecteur, en changeant des paramètres de capture d'image tels que temps d'exposition, éclairage, gain. Avec un capteur d'image CMOS, à pixels actifs, le système de traitement peut aussi spécifier une ou des régions d'intérêt, permettant de limiter l'acquisition des données d'images à ces régions particulières. 20 Une qualité essentielle des systèmes de reconnaissance d'optique de code, c'est leur vitesse de traitement. Cette vitesse de traitement est dépendante de la qualité d'image, qui peut être variable en fonction du contexte de prise d'image (éclairage, temps d'exposition), de l'objet cible lui-même (qualités du support : planéité, qualité de réflexion, rayures ou autres), et de la position relative de l'objet face à la caméra de capteur. Le contraste d'image peut être amélioré par traitement numérique (rehaussement) ou en commandant une nouvelle capture d'image utilisant plus, ou moins, de puissance d'éclairage. On peut aussi ajuster le temps d'exposition, pour avoir un meilleur histogramme d'image (courbe de densité des niveaux de gris dans l'image), et/ou le gain de conversion. Mais la vitesse de traitement dépend aussi de la quantité de données numérique à traiter, c'est-à-dire de la taille de l'image de capture. Or une tendance actuelle est d'utiliser des capteurs d'image CMOS de grande résolution, ce qui permet notamment de relâcher les contraintes de 35 distance de capture (distance entre le plan de capture du capteur et l'objet 3 cible) et à grande dynamique de codage, par exemple 8, 10 ou 12 bits. On utilise ainsi des capteurs d'image qui fournissent en sortie des images de quelques Mégabits de données. Un inconvénient à cela, est que cela impacte directement les 5 systèmes de traitement numérique, tant dans le dimensionnement (et la consommation) des ressources matérielles (puissance de calcul et capacité mémoire) que dans le temps de traitement. RESUME DE L'INVENTION 10 Un objet de l'invention est d'améliorer les performances des systèmes de reconnaissance optique de code(s), notamment pour réduire leur consommation (puissance de calcul, mémoire) et améliorer leur temps de réponse. Une façon d'améliorer cela est de permettre à ces systèmes de se focaliser sur l'information utile de l'image de capture qui est transmise. Cette 15 information utile (le ou les codes) correspond à une petite fraction de l'image de capture, c'est-à-dire une ou des régions d'intérêt dans l'image. On peut alors focaliser la puissance de calcul sur ces régions. On a ainsi cherché à résoudre la problématique technique suivante : intégrer dans le capteur d'image des fonctions permettant de fournir en 20 sortie, en plus des données d'image de capture, des données supplémentaires, qui seraient des informations de localisation de code(s), avec un indice de confiance suffisant (données fiables) ; et le faire à moindre coût sur le capteur, c'est-à-dire sans impacter le temps trame de fourniture d'image et sans impacter la taille du capteur (compacité - intégration sur la 25 puce de capteur). Une caractéristique commune des codes, est que leur image contient beaucoup d'information haute fréquence spatiale (contrastes noir/blanc), dans une direction ou plusieurs directions selon les codes et leur orientation dans l'image, au contraire de la zone d'image autour d'un code. C'est cette 30 caractéristique qui est d'ailleurs exploitée dans les algorithmes de détection de contour utilisés pour la reconnaissance. Dans l'invention on propose de faire une extraction d'information haute fréquence, ou plus généralement d'une information représentant une caractéristique spatiale de code, dans le capteur d'image lui-même, par le 35 calcul d'au moins un résultat de convolution en chaque point d'image de 4 capture, l'amplitude de ce résultat (sa valeur absolue), et un seuillage binaire, permettant de séparer l'information recherchée du bruit dans l'image, pour obtenir une information dont la valeur 0 ou 1 qui est une information de localisation du code : la valeur 1 veut dire que le pixel est potentiellement 5 dans une zone de code. Dans un exemple, le calcul de convolution est un calcul de gradient et ce qui nous intéresse, c'est l'amplitude de ce gradient (donc sa valeur absolue), comme indicative d'information de localisation. Il s'agit de faire l'extraction de cette information dans le capteur lui- 10 même, à moindre coût. Notamment, cela ne doit pas affecter la vitesse d'acquisition et de transmission des données d'image de capture. C'est-à-dire que l'extraction doit être faite dans le temps d'acquisition de l'image de capture, et les données porteuses d'information de localisation doivent être intégrées dans la trame de transmission de l'image de capture, vers le 15 système externe de reconnaissance de code. Cela ne doit pas non plus nécessiter de ressources matérielles conséquentes, telles que des mémoires d'image ou des processeurs dédiés complexes. On doit pouvoir intégrer les ressources matérielles nécessaires à la réalisation de cette fonction d'extraction sur la puce même de circuit intégré de capteur d'image CMOS, 20 avantageusement d'une façon programmable ou paramétrable, permettant une adaptation facile (flexibilité) aux différents codes et systèmes applicatifs de reconnaissance optique. Enfin l'information extraite et transmise doit avoir une grande fiabilité, pour permettre son utilisation directe par le système de reconnaissance externe, permettant d'optimiser sa puissance de calcul et 25 améliorer sa vitesse de traitement. La solution à ces différentes contraintes techniques est apportée dans l'invention par un capteur d'image CMOS intégrant un bloc de traitement numérique qui pour chaque prise d'image de capture, est synchronisé sur le signal de sélection de ligne (lecture) dans la matrice de pixel, et configuré 30 pour calculer une macro-image, dans le temps d'acquisition de l'information par les pixels (temps d'exposition des pixels, et lecture séquentielle ligne par ligne), pour la fournir en pied de trame d'image de capture, à la suite des données d'image de capture, et qui est telle que chaque point de la macroimage correspond à un pavé de points de l'image de capture et la valeur de 5 chaque point de la macro-image est une information indicative de localisation de code dans le pavé de points correspondant dans l'image de capture. Telle que caractérisée, l'invention concerne donc un capteur d'image CMOS configuré pour réaliser une prise d'image, sur commande externe et 5 transmettre en sortie, vers un système de reconnaissance optique de code, les données d'image de capture dans une trame d'image correspondante, le capteur d'image intégrant sur une même puce de circuit intégré, une matrice de pixels comportant N lignes et M colonnes et un circuit de lecture séquentiel des N lignes de pixels de la matrice, caractérisé en ce que le 10 capteur intègre en outre un circuit de traitement numérique configuré pour appliquer un processus de calcul sur les données d'image de capture au fur et à mesure de leur acquisition par le circuit de lecture séquentiel et de façon synchrone, pour calculer une macro-image binaire à partir des données d'image de capture correspondant à des informations de localisation de 15 code(s) dans ladite image de capture, et la transmettre en pied de ladite trame d'image, à la suite desdites données d'image de capture, ladite macroimage étant telle que chaque point de macro-image correspond à un pavé de points de l'image de capture, et ledit processus de calcul comprenant au moins 20 - pour chaque pixel de la matrice : - une première étape de calcul d'au moins un filtre qui établit pour le pixel, une première valeur numérique à partir des données d'image de capture fournies par le circuit de lecture séquentiel pour le pixel considéré et des pixels voisins définis par un masque du filtre centré sur ledit pixel, ladite 25 première valeur numérique étant codée sur le même nombre de bits (r) que lesdites données d'image de capture ; - une deuxième étape de binarisation de la première valeur numérique, établissant une première valeur binaire pour ledit pixel ; et - pour chaque pavé de pixels de la matrice 30 - une troisième étape de calcul d'une deuxième valeur numérique par sommation desdites premières valeurs binaires des pixels du pavé concerné dans un registre d'accumulation à Q=b1+b2 bits de sortie, avec b1 le nombre de lignes de pixels du pavé et b2 le nombre de colonnes de pixels du pavé. 6 Selon un aspect de l'invention, la deuxième valeur numérique est une valeur codée sur q bits où q=1 à Q. Dans une variante, le processus de calcul comprend une quatrième étape de binarisation de ladite deuxième valeur numérique. 5 Dans un perfectionnement, on applique à la suite de la quatrième étape, sur les valeurs binaires obtenues, un traitement morphologique à érosion puis dilatation, dans le but d'améliorer l'indice de confiance sur l'information de localisation de code. De préférence, le filtre calculé est un filtre haute fréquence, non 10 directionnel, c'est-à-dire que l'on ne considère par le signe du résultat, et on peut utiliser un calcul de un ou plusieurs filtres en parallèle, en particulier au moins un gradient vertical et un gradient horizontal pour obtenir, par addition, une valeur informative plus grande. Selon un autre aspect de l'invention, le calcul de filtre de la première 15 étape applique au moins un filtre de la liste suivante : un calcul de filtre haute fréquence non directionnel combinant un ou plusieurs calculs de gradient, un calcul de gradient dans une direction déterminée, un filtre correspondant à des caractéristiques spatiales représentatives d'un type de code. Le capteur peut être avantageusement configuré pour appliquer un 20 premier filtre de calcul sur les données d'une première image de capture d'un objet cible et un autre filtre de calcul différent du premier sur les données d'une deuxième image de capture du même objet cible. On peut ainsi augmenter un indice de confiance sur les données de localisation des macroimages. Dans une variante, la deuxième image de capture correspond à un 25 zoom sur une région d'intérêt déterminée à partir de la macro-image calculée sur les données de la première image de capture. L'invention permet d'offrir une solution très flexible, par des facilités de programmation des paramètres de calcul et de compression, en fonction des 30 conditions de prise d'image de capture (éclairage, distance de capture), et/ou au(x) type(s) et taille(s) de code. Notamment le nombre, la dimension et les coefficients des filtres peuvent être programmés en fonction de l'application. Les valeurs de seuil de binarisation peuvent aussi être définis en fonction de l'application, voire adaptées aux conditions réelles de prise d'image 7 (éclairage, distance) en fonction d'autres caractéristiques calculées sur les images de capture, tel que des histogrammes. D'autres caractéristiques, détails et avantages de l'invention 5 ressortiront à la lecture de la description suivante, faite en référence aux dessins annexés à titre d'exemple et qui représentent respectivement : - la figure 1, un schéma-bloc fonctionnel d'un capteur d'image CMOS conforme à l'invention ; - la figure 2, un chronogramme des signaux d'horloge et de données d'une 10 trame d'image de capture selon l'art antérieur ; - la figure 3, un chronogramme des signaux d'horloge et de données d'une trame d'image de capture incluant l'extraction et la transmission dans cette trame de données complémentaires, dans le pied de trame, selon l'invention ; 15 - la figure 4, un organigramme détaillant les différentes d'étapes d'extraction par calcul des données complémentaires, au fur et à mesure de l'acquisition des données d'image de capture, et montrant une simulation des images correspondant aux données extraites et calculées aux différentes étapes ; - la figure 5, un schéma explicatif de la première étape de calcul en chacun 20 des points d'image de capture ; - la figure 6, un schéma explicatif de la deuxième étape de calcul, pour former une macro-image selon l'invention ; - la figure 7, un schéma illustrant une étape supplémentaire utilisant des opérateurs morphologiques, pour augmenter l'indice de confiance sur les 25 données d'une macro-image binaire ; et - la figure 8, un schéma mettant en évidence la relation entre la taille de pavé de pixels utilisé pour former une macro- image selon l'invention et la taille de code(s) à détecter dans l'image. 30 DESCRIPTION DETAILLEE Un lecteur de code comprend un capteur d'image CMOS, une source de lumière pour éclairer une cible (un ou des codes apposés sur un objet, une plaque minéralogique ...) à travers une fenêtre de numérisation ; et un système optique qui permet de renvoyer la lumière réfléchie par la cible sur la matrice de pixels du capteur. La source lumineuse est généralement à 8 base de diodes LEDs pour éclairer la cible pour la prise d'image, par flash. Certains systèmes peuvent en outre intégrer une source laser associée à une optique diffractive, dans le but d'aider l'opérateur à centrer le code cible préalablement à la prise d'image, par projection d'un motif particulier (croix, 5 angles,...etc.). Cette opération est connue sous le terme anglo-saxon "aimer'. Cette source laser est normalement éteinte, avant le flash des LEDs pour la prise d'image. La prise d'image par le lecteur est déclenchée par un mécanisme électronique ou manuel : le lecteur sort d'un mode de veille (basse consommation) et active la source de lumière et le capteur, pour faire 10 la prise d'image et la transmettre à un système externe de reconnaissance de code externe au capteur. Le capteur d'image CMOS comprend classiquement, comme représenté à la figure 1, une matrice 1 de pixels comprenant N lignes et M colonnes (N, M entiers). Les signaux de commande des transistors des 15 pixels, sont générés par un circuit 2 de contrôle (noté SEQ) qui est activé par le signal de déclenchement Trig de lecture de code. Ces signaux de commande des pixels servent à contrôler le temps d'exposition des pixels, de manière globale ("Snapshot"), ou défilante, ligne par ligne ("rolling shutter"), puis la lecture séquentielle ligne par ligne. Notamment, le circuit SEQ fournit 20 un signal de synchronisation horizontale Lsync vers le circuit 3 de sélection des lignes de pixel, pour cadencer la lecture séquentielle des lignes de pixels, par le circuit de lecture. Le circuit de lecture comprend une chaîne de conversion analogique numérique (CAN), généralement associée à un étage de contrôle de gain (CAG), et les M valeurs numériques lues pour la ligne de 25 pixels courante sélectionnée en lecture sont délivrées en sortie à la cadence d'horloge Clkpx, pendant la période d'activation ligne (Lsync) correspondante. C'est ainsi que comme illustré sur la figure 2, pendant chaque impulsion Lsync correspondant à une sélection de ligne de pixels Li, le circuit de lecture délivre en sortie les M données numériques correspondantes, 30 successivement, par exemple dans l'ordre de rang croissant des colonnes. On désigne par DATA-Li les M données lues sur la ligne de pixel de rang i entier égal 1 à N). La succession des N DATA-Li forme le flux DATA de données d'image de capture qui est transmis au circuit d'interface I/O du capteur, pour constituer la trame d'image de capture correspondante DATA- 9 OUT fournie vers un système externe de reconnaissance de code (non représenté). Une constitution classique de la trame d'image de capture est illustrée sur la figure 2. On a représenté le signal de synchronisation trame FSync, 5 dont l'activation marque le début de la phase de lecture des N lignes d'image, et qui reste actif jusqu'à la fin de cette phase de lecture. A chaque période d'activation Lsync, on a un flux de donnée DATA-Li correspondant. La trame de données d'image transmises au système de reconnaissance externe comprend en pratique un entête (header) et un pied 10 (footer) de trame qui encadrent le flux de données des N lignes d'image. Dans l'entête, on vient notamment mettre des informations comme la quantité de données de l'image (taille d'image). On peut en effet effectuer une capture d'image complète, ou seulement dans des régions d'intérêt. On vient généralement mettre également les valeurs des paramètres de capture 15 de l'image qui vient d'être prise. Il s'agit notamment de la durée Tint de temps d'exposition, de la dynamique de codage (nombre de niveaux de gris codés), du gain de conversion. Ces valeurs sont fournies par un registre 5 de paramètres du capteur, pendant un temps d'activation d'un signal correspondant, F-h, avant l'activation du signal de synchronisation trame 20 Fsync. On transmet ces valeurs car elles sont utiles pour exploiter l'image et juger des conditions de la prise d'image. Cela permet notamment au système externe de commander une nouvelle prise d'image avec des valeurs différentes, si l'image reçue n'est pas bonne, par exemple sous exposée, ou sur exposée. Dans le pied de page, on va généralement transmettre des 25 données calculées sur l'image, par exemple des histogrammes calculés sur tout ou partie de l'image. Ces histogrammes permettent notamment de juger de la bonne exposition d'une image. La taille (nombre de bits) de l'entête et du pied de trame est petite devant la taille du corps de trame, réservé aux données d'image proprement 30 dite. Dans un exemple, on dispose pour l'entête ou le pied de page d'un nombre de bits qui correspond au nombre de bits des données d'une ligne d'image. Ces rappels généraux étant faits, nous allons pouvoir décrire le perfectionnement de capteur d'image CMOS pour lecteur de code barre 35 perfectionné, qui est proposé dans l'invention. 10 Selon l'invention, un capteur d'image CMOS intègre des moyens de calcul qui permettent d'extraire sur les données d'image, des données qui correspondent à des informations de présence ou localisation de(s) code(s ) dans l'image, de façon fiable, et qui sont fournies de façon complémentaire 5 au système externe de reconnaissance dans le pied de trame d'image, pour lui permettre de focaliser sa puissance de calcul et mémoire sur les données d'image de capture dans des zones d'image qu'il peut identifier grâce à ces données complémentaires. Le capteur d'image comprend ainsi des moyens 7 de traitement 10 numérique (Figure 1) qui sont configurés pour calculer une petite image ou macro-image, qui est une image dont chaque point correspond à un pavé de points de l'image de capture ; et la valeur de chaque point de macro-image est une indication de présence/localisation de code dans la portion d'image de capture correspondante (le pavé de points). 15 De manière conventionnelle, les capteurs comportent généralement des moyens de traitement numérique qui utilisent des opérateurs de calcul élémentaires (additionneurs, multiplicateurs, diviseurs, comparateurs), qui sont par exemple utilisés pour calculer des histogrammes. Les calculs d'histogrammes sont utiles au capteur pour lui permettre d'adapter le temps 20 d'exposition des pixels, défini à une valeur par défaut pour une application donnée, lorsque l'histogramme montre que l'image est sur ou sous exposée. Le capteur peut aussi adapter le gain de conversion dans la chaîne de lecture, pour augmenter le contraste. Le calcul de macro-image selon l'invention utilise ces mêmes opérateurs élémentaires, peu encombrants et 25 simples à intégrer sur la puce de capteur, pour calculer la valeur de chaque point de macro-image à partir des données d'image de capture, au fur et à mesure de leur acquisition, par calcul de filtres représentatifs d'une caractéristique spatiale des codes. Ce circuit 7 comprend une mémoire de lignes ML temporaire de profondeur limitée (nombre de lignes), adaptée à la 30 taille des masques de(s) filtre(s). Cette mémoire de ligne conserve les données des lignes de pixels lues juste avant la ligne de lecture courante. Les tailles habituelles des masques sont 3x3 et 5x5. Pour un masque 3x3 par exemple, deux lignes de mémoire sont suffisantes pour faire les calculs de filtre à la volée sur chaque pixel. Dans tous les cas, la mémoire de lignes 35 a une profondeur de moins d'une dizaine de lignes, ce qui est facilement 11 intégrable sur la puce de capteur. Le circuit de traitement numérique 7 comprend aussi des moyens Acc d'accumulation/mémorisation, pour accumuler au fur et à mesure de leur calcul, les données de points de macroimage. A la fin de la lecture de la matrice de pixels, ces moyens fournissent 5 les données de macro-image Macro-data vers le circuit d'interface I/O. Au plan de la réalisation pratique, ces moyens Acc peuvent comprendre autant de registres d'accumulation que de points de macro-image à calculer. Mais on pourrait aussi avoir autant de registres que de points dans une ligne de macro-image, associés à une mémoire de macro-image, pour mémoriser au 10 fur et à mesure du calcul à la volée, les valeurs des points de chaque ligne de macro-image. Dans la suite, pour simplifier, on parle d'un registre d'accumulation (Acc). Le processus de calcul à la volée selon l'invention, pour l'extraction 15 d'une signature numérique spatiale, mis en oeuvre dans le circuit numérique 7, va maintenant être expliqué avec l'aide du chronogramme de la figure 3, de l'organigramme de la figure 4 et des détails des étapes du processus de calcul illustrés sur les figures 5 et 6. Pour cette description, on choisit un processus de calcul 100 qui utilise des masque(s) de taille 3x3 pour le 20 filtrage. Le processus de calcul 100 utilise deux lignes de mémoire notées ML1 et NIL2 de la mémoire de ligne ML. Comme illustré de façon schématique sur la figure 5, en se plaçant dans le cas conventionnel d'une lecture séquentielle des N lignes de pixel par le même circuit de lecture en pied de colonnes (Figure 1), en commençant par la ligne de rang 1, L1, jusqu'à la 25 ligne de rang N, LN, si la phase de lecture courante (Lsync) est celle de la ligne Li, la mémoire de ligne ML1 contient les données de lecture de la ligne Lm et la mémoire de ligne ML2 contient les données de lecture de la ligne 14_2. A la phase de lecture suivante (lecture de la ligne 14,1), les données de la ligne Li passent dans la mémoire de ligne ML1 qui "poussent" les données de 30 la ligne Lm qu'elle contenait, dans la mémoire de ligne 14-2. Egalement, on prend en exemple un processus qui permet l'extraction d'une signature haute fréquence de l'image de capture, dans le but d'obtenir une macro-image correspondante qui doit permettre d'identifier les régions de code(s) qui contiennent une grande densité d'alternances de 35 noir et de blanc, ou de deux niveaux de gris très contrastés, dans au moins 12 une direction, alors que le reste de l'image (dans le contexte applicatif considéré) en contient peu. C'est-à-dire que l'on s'attend à pouvoir identifier dans cette macro-image, des "boîtes" blanches, dont la taille pourrait correspondre à du code. 5 Pour cette extraction, on applique un calcul de gradient(s) dans au moins une direction, et on retient comme information, l'amplitude du gradient (c'est-à-dire la valeur absolue du gradient, sans s'intéresser au signe). De préférence, on applique un calcul de gradient dans au moins deux directions de manière à obtenir une valeur la plus grande possible en chaque point, par 10 sommation de leur amplitude respective. En effet, les codes "capturés" dans l'image ne sont pas nécessairement alignés par rapport aux axes de la matrice de pixels. Ce sera souvent le cas dans les applications dans lesquelles le lecteur de code est fixe, et les objets à scanner arrivent sur un tapis défilant devant la caméra du lecteur. Egalement, certains codes ont une 15 signature haute fréquence dans différentes directions, notamment les codes symboliques 2D et les chaînes alphanumériques. Il est intéressant pour permettre une localisation la plus fiable possible, d'obtenir une information haute fréquence en chaque point qui soit la plus complète (la plus grande). Le processus de calcul 100 comprend ainsi une première étape 101 20 de calcul de filtre(s). Dans cette étape 101 (Figure 4), on applique dans l'exemple un premier filtre Fcv1, correspondant à un gradient horizontal GH, utilisant un masque de convolution respectif [a], (Figure 5) ; et un deuxième filtre Fcv2, correspondant à un gradient vertical Gy, utilisant un masque de convolution respectif [a]2. Le sens horizontal correspond de manière 25 conventionnelle à la direction des lignes de pixels et le sens vertical, à celui des colonnes de pixels. Les deux calculs de filtres sont effectués en parallèle, à la volée, pour chaque point de l'image de capture au fur et à mesure de l'acquisition des données de ce point et des points voisins, à l'intérieur de la fenêtre de masque centrée sur le point d'image de capture 30 concerné (fenêtre Wi_li pour le point d'image correspondant au pixel placé sur la ligne i-1 et la colonne j dans la matrice de pixels, Figure 5). Et obtient deux valeurs correspondantes notées VGH et VGV, dont on somme les valeurs absolues (l'amplitude de gradient, sans considération du signe), pour obtenir une valeur VF qui est le résultat du calcul de filtrage réalisé à l'étape 13 101, et qui ici représente la quantité d'information haute fréquence en ce point, sans considération de la direction. En pratique, le calcul est fait à la volée au fur et à mesure de la fourniture des données des pixels par le circuit de lecture, ligne par ligne. 5 Pour chaque pixel, le résultat de calcul de chaque filtre (combinaison linéaire des coefficients de filtre avec les valeurs des points d'image dans la fenêtre de voisinage centrée sur le pixel) est obtenu après que le processus a pu avoir les valeurs numériques du pixel et de ses pixels voisins, définis par la fenêtre de masque centrée sur le pixel concerné. Si on prend la figure 5, on 10 obtient les valeurs VGH, VGV et VF pour le pixel PX;_ti lorsque la ligne de sélection courante de lecture est la ligne L. On note Vpx la valeur numérique d'un point d'image de capture, qui est la valeur fournie par le circuit de lecture 4, et qui représente la quantité de signal intégrée par un pixel correspondant dans la matrice pendant le temps 15 d'exposition de prise d'image. Cette valeur est codée sur r bits, dans l'exemple (Figure 4), 12 bits. Les valeurs VGH, VGV et VF, sont des valeurs codées sur le même nombre de bits. Sur la figure 4, on a représenté ce que pourrait être les images calculées correspondantes, si pour chacune on collectait toutes les données 20 calculées dans une mémoire d'image respective (ce que l'on ne fait pas dans la réalité - il s'agit ici seulement de simulation) et qu'on les affichait, en prenant en exemple une image de capture d'un objet cible comportant plusieurs codes de type symbolique, 1D et 2D, de différentes tailles. On voit ainsi l'image IHD correspondant à l'ensemble des données Vpx 25 (ensemble DATA formé des N DATA-14). Et les images calculées correspondantes, de gradient horizontal (IGH), vertical (IGH) et d'information haute fréquence, non directionnelle, (IF) dans l'étape 101 du processus de calcul selon l'invention. Toutes ces images IHD, IGH, IGH ET IF ont N lignes, M colonnes et une profondeur de 12 bits. 30 L'étape 102 suivante du processus de calcul, correspond à une binarisation de l'image haute fréquence obtenue, qui permet de séparer le bruit du signal haute fréquence de l'image. En améliorant le rapport signal sur bruit, on augmente l'indice de confiance sur l'information de localisation 35 de code que l'on fournit en sortie du capteur. En pratique, la binarisation se 14 fait comme précédemment, à la volée, sur chacune des valeurs VF sortant du processus de calcul de l'étape 101 de filtrage (Figures 4 et 5). Et elle consiste à comparer la valeur VF à un seuil de binarisation, Vs1. En pratique, on peut prévoir que cette valeur Vs1 est fournie au circuit de traitement 5 numérique 7 par un registre de paramètres (5) du capteur et qu'elle est programmée à une valeur par défaut, qui correspond généralement à un niveau de gris moyen. La valeur de seuil par défaut (dans le registre) peut être modifiée par un utilisateur ou par le système de reconnaissance, par exemple en fonction des caractéristiques d'images test obtenues dans le 10 contexte applicatif (valeur moyenne des niveaux de gris calculées sur des images test ou réelles). On peut aussi prévoir que le circuit de traitement numérique adapte cette valeur de seuil au fur et à mesure du calcul, sur la base des valeurs de niveaux de gris des données d'image de capture déjà traitées. Dans ce cas, la valeur de seuil utilisée n'est pas nécessairement 15 constante sur la hauteur d'image. On obtient une valeur binaire VB1 par point d'image de capture. L'image simulée correspondante IB1 comprend N lignes, et M colonnes, sur une profondeur de 1 bit. A ce stade, on a des informations ponctuelles qui ne sont pas des informations de localisation de code. Il faut pouvoir relier ces 20 informations, pour constituer des informations signifiantes de localisation de code, prenant en compte la taille des codes susceptibles d'être présents dans l'image. C'est la fonction des étapes suivantes 103 et 104, par laquelle on vient constituer la macro-image binaire de localisation de code(s) dans 25 l'image de capture. Ces étapes sont comme les autres, réalisées à la volée, au fur et à mesure de la réception des données nécessaires pour calculer la valeur de chaque point de la macro-image. De manière imagée, il s'agit ici de relier les informations entre elles pour essayer de constituer des "boîtes signifiantes", 30 correspondant à des emplacements de code dans l'image, et d'une façon simple, par calcul à la volée, mais fiable, c'est-à-dire que l'information obtenue en sortie a un indice de confiance élevé. Pour cela on procède en deux étapes qui sont détaillées sur la figure 6. 15 La première étape 103 correspond à un pavage, qui va permettre de faire correspondre à chaque pavé B de points de l'image de capture, un point de macro-image, pour lequel on calcule une valeur notée VEq à partir des valeurs binaires VBIN1 des points du pavé B. Autrement dit, en se 5 référant à la simulation d'image 1B1, on compte le nombre de points blancs dans le pavé concerné : la valeur VEq est bien indicative de ce que le pavé B concerné pourrait correspondre à un emplacement de code dans l'image. Ce passage est réalisé par une opération d'accumulation Eq dans un élément de registre Acc correspondant au pavé traité, c'est-à-dire que l'on additionne au 10 fur et à mesure de leur calcul à la volée (étapes 101 et 102), les valeurs binaires VBIN1 des points du pavé B concerné. L'opération de pavage correspond à une division de l'image de capture par pavés de n=nbl lignes et m=2b2 colonnes. Cela dimensionne l'élément de registre d'accumulation des valeurs binaires des nxm points d'un 15 pavé : c'est un registre Q bits, avec Q=b1+b2. On choisira de préférence un pavage carré, avec b1=b2, adapté à tous les codes et toutes les orientations. Par exemple si on prend b1=b2=6, on a alors 4096 points d'image de capture par pavé B et l'élément de registre d'accumulation Acc pour chaque pavé permet de compter de 0 (tous les 20 points ont la valeur 0) à 4096 (tous les points ont la valeur 1). Avantageusement, la valeur VLq fournie en sortie pour chaque pavé, peut être une valeur tronquée ou non. L'indice q est un paramètre qui indique cela, et il a ainsi une valeur qui peut être égale à 1, 2, 3, ..., ou Q bits. Si q =4 par exemple, alors la valeur VEq fournie en sortie pour chaque 25 pavé, sera une valeur codée sur seulement 4 bits. La macro-image correspondante lEg (figure 4) comprend ainsi n lignes, m colonnes et a une profondeur de q bits. Plus la valeur de q est grande, plus l'information de localisation contenue dans la macro-image sera riche. 30 Le choix des valeurs n, m et q dimensionne la taille de macro-image ILq. Ainsi, en fonction de la taille de pavé, plus petit ou plus grand, on peut choisir une valeur q qui sera aussi plus petite (pour un pavé petit), et plus grande (pour un pavé plus grand) de manière à obtenir une taille de macroimage (nombre de bits) permettant son calcul à la volée dans le temps 35 d'acquisition d'une image de capture, et aussi son intégration dans le pied de 16 trame. C'est-à-dire qu'il faut faire un compromis entre temps de traitement, dimension de macro-image et richesse de l'information. La dimension du pavé (nombre de lignes et de colonnes) dépend d'abord du nombre de lignes et de colonnes de la matrice de pixel. Ensuite, 5 elle ne doit pas être trop petite, pour obtenir le niveau de compression voulue (temps de calcul, intégration dans le pied de trame). Mais elle ne doit pas non plus être plus grande que la taille des codes dans l'image, sous peine de perdre l'information de localisation correspondante. On reviendra sur ces aspects plus loin. 10 Dans un exemple réaliste, pour une matrice de pixels de N= 1920 lignes et M= 2560 colonnes, on peut définir une taille de pavé de 64 lignes par 64 colonnes. On obtient une macro-image lEg de n=30 lignes et m=40 colonnes. Si q =12 bits, la quantité de bits correspondante de macro-image est 14 400 bits. Si q = 8bits, elle est de 9600 bits et si q =4, elle est de 4800 15 bits. La taille de pavé est adaptée pour des codes dans l'image de taille supérieure, par exemple 100 sur 100 pixels. Dans une variante, on veut fournir une macro-image binaire IB2 (Figures 4 et 6). On réalise alors de préférence une accumulation avec 20 troncature dans l'étape 103, avec une valeur de q supérieure à 1 mais inférieure à Q. Par exemple on choisit q = 4 bis, pour binariser ensuite la valeur obtenue, par rapport à un nouveau seuil. L'opération de compression est de meilleure qualité. C'est l'étape 104 de binarisation BIN2 de la valeur VEq, par rapport à un seuil Vs2, qui est illustrée sur les figures 4 et 6. Le seuil 25 Vs2 peut être comme Vs1, fixé à une valeur fournie par le registre 5 de paramètres, et définie en fonction du contexte applicatif, ou ajustée à partir de macro-images calculées sur des images test ou réelles. On peut aussi envisager un calcul de niveau de gris moyen par portion de macro-image lEq, définissant un niveau de seuil Vs2 adaptatif. On obtient une nouvelle valeur 30 binaire VB2, pour chaque point de la macro-image binaire correspondante IB2, qui est une image en noir et blanc illustrée à la figure 4, qui montre des formes de "boîtes" blanches qui correspondent à l'emplacement des codes dans l'image de capture IHD. On peut voir que ces formes ne sont pas "parfaites" avec des bords 35 crantés, ou des petites excroissances. 17 Dans un perfectionnement illustré à la figure 7, on applique une étape de calcul supplémentaire 105 de calcul morphologique, comprenant une érosion suivie d'une dilatation, permettant d'améliorer le contenu signifiant de la macro-image binaire IB2. Ces opérations d'érosion puis dilatation s'opèrent 5 sur chaque point de la macro-image IB2, sur la base du même ensemble de pixels de voisinage, où le voisinage est délimité par une structure appelée élément structurant. L'élément structurant est adapté aux critères géométriques du ou des codes à détecter. Par exemple, l'élément structurant, centré sur le pixel, a une forme en croix et les paramètres sont 10 notamment la largeur et la longueur des branches (nombre de pixels). La figure 7 rend compte des améliorations sur l'image : les formes des boîtes blanches sont mieux définies ; et du bruit a été éliminé. Au final, le processus de calcul mis en oeuvre dans le capteur d'image 15 permet d'obtenir une petite image au contenu signifiant sur la localisation des codes dans l'image de capture, et qui peut être transmise dans le pied de trame de transmission d'image, à la suite des données d'image de capture. Ces données de localisation sont directement exploitables par le système externe de reconnaissance de code, qui peut alors focaliser ses algorithmes 20 de traitement d'image sur la ou les zones d'image de capture identifiées dans la macro-image comme contenant de l'information haute fréquence. La figure 8 permet d'expliquer en quoi la taille de pavé pour l'opération 103 est un critère de performance du processus d'extraction mis en oeuvre 25 dans l'invention. On montre une image de capture qui comprend trois codes 1 D, dont l'un est plus petit que les autres, noté Code-1, et qui dans l'exemple est orienté en diagonale, contrairement aux deux autres codes, sensiblement orientés horizontalement. On note au passage que dans cet exemple, si pour les deux codes alignés à l'horizontal, le calcul de gradient 30 vertical ne donnera aucune information intéressante, pour le petit code "Code-1" il en va différemment, du fait de son orientation en diagonale. Par ailleurs, si l'on utilise un pavé B de taille plus grande que ce petit code, par exemple 64x64, on voit sur l'image 11 qui correspond à la petite image binaire obtenue en sortie du processus 100 (après l'étape 104 ou 35 après l'étape 105), que le petit code Code-1 n'a pas été localisé. L'image 111 18 simule une superposition de l'information de la petite image 11 sur l'image de capture 10. Avec un pavé plus petit, dans l'exemple 32x32, on voit que le petit code est bien localisé (image 12 et l'2). 5 Le processus 100 de calcul de la macro-image mis en oeuvre par le circuit de traitement numérique 7 qui vient d'être décrit, se déroule de façon synchrone avec la lecture (l'acquisition) des données d'image de capture par le circuit de lecture 4, pour traiter les données des lignes de pixels une à une, en séquence. C'est-à-dire que le circuit de traitement numérique 7 est 10 cadencé (Figure 1) comme la matrice de pixel, le circuit de lecture et le circuit d'interface I/O par les signaux d'horloge de synchronisation trame Fsync (nouvelle image), de synchronisation ligne Lsync (nouvelle ligne) et d'horloge pixel Clkp, (pixel suivant). A chaque nouvelle trame (Fsync), le circuit de traitement numérique 15 est réinitialisé ; notamment la mémoire de ligne ML et le registre d'accumulation Acc sont remis à zéro. Ensuite, les étapes 101 à 103, 101 à 104 ou 101 à 105, du processus se déroulent, au fur et à mesure de la disponibilité des valeurs intervenant dans chaque calcul, pour chaque pixel, de façon glissante en x et en y (Figure 5), à la cadence de l'horloge pixel. 20 La trame d'image correspondante est illustrée à la figure 3 qui montre de manière schématique comment la petite image est en effet calculée de façon synchrone et au fur et à mesure, pour constituer les données Macrodata dans le registre accumulateur Acc, qui sont intégrées dans le pied de trame, à la suite des données d'images DATA-Li transmises dans le corps de 25 trame. Le processus de calcul qui vient d'être décrit, pour l'extraction d'une signature haute fréquence de l'image de capture, peut s'appliquer de la même manière pour extraire d'autres signatures spatiales (de répétition, de 30 direction...etc.). Pour un même objet, si on effectue plusieurs prises d'image successives, on peut ainsi calculer différentes signatures spatiales, sur tout ou partie de l'image, ce qui permet d'enrichir l'information de localisation par passes successives. En particulier, on peut réaliser une capture d'image en zoomant (utilisation d'une lentille grossissante du système optique du lecteur 35 de code intégrant le capteur) sur une partie de la scène qui correspond à une 19 région d'intérêt déterminée à partir de la petite image extraite sur l'image complète, et on peut obtenir une signature spatiale plus précise, basée sur d'autres critères géométriques. Pour prendre un exemple numérique : si la taille d'un code dans une image de capture prise pour une distance de 5 capture donnée, occupe 256 sur 256 pixels, dans la macro-image on obtiendra une boite "blanche" correspondante qui ne fera pas plus de 4 sur 4 pixels, mais qui donne bien une information de localisation (position et taille dans l'image de capture). Le système de reconnaissance peut commander une deuxième prise d'image avec un zoom sur la région d'intérêt 10 correspondante, pour obtenir des informations spatiales plus précises, sur des critères haute fréquence comme décrit précédemment ou sur d'autres critères géométriques de code. A chaque fois, cela reste un calcul de filtre (ou des calculs de filtres en parallèle). Ce qui change, ce sont les masques utilisés, c'est-à-dire les 15 coefficients des filtres, et éventuellement la taille de masque (5x5 par exemple au lieu de 3x3). On peut donc aisément prévoir dans le capteur, une mémoire de masques [a]k, et un ou des masques sont utilisés pour une prise d'image donnée. Egalement les différents seuils du processus, à savoir Vsl , Vs2 et la valeur q de troncature peuvent être paramétrés, ainsi que les 20 dimensions de pavé B. Cela peut être fait de différentes façons, par une valeur de pointeur pour une mémoire de paramètres correspondants (mémoire de masques par exemple), ou par la valeur elle-même du paramètre. L'homme du métier sait comment implémenter cela en pratique. Le capteur comprend alors des paramètres correspondants dans un ou des 25 registres de paramètres (registre 5, REVENDICATIONS1. Capteur d'image CMOS configuré pour réaliser une prise d'image, sur commande externe (Trig), et transmettre en sortie, vers un système de reconnaissance optique de code, les données d'image de capture dans une trame d'image correspondante (DATA-OUT), le capteur d'image intégrant sur une même puce de circuit intégré, une matrice (1) de pixels comportant de N lignes et M colonnes et un circuit de lecture séquentiel (4) des N lignes de pixels de la matrice, caractérisé en ce que le capteur intègre en outre un circuit de traitement numérique (7) configuré pour appliquer un processus de calcul (100) sur les données d'image de capture au fur et à mesure de leur acquisition par le circuit de lecture séquentiel (4) et de façon synchrone, pour calculer une macro-image à partir des données d'image de capture correspondant à des informations de localisation de code(s) dans ladite image de capture, et la transmettre en pied de ladite trame d'image (DATA- OUT), à la suite desdites données d'image de capture, ladite macro-image étant telle que chaque point de macro-image correspond à un pavé (B) de points de l'image de capture, et ledit processus de calcul comprenant au moins - pour chaque pixel de la matrice : - une première étape (101) de calcul d'au moins un filtre (Fcv) qui établit pour le pixel, une première valeur numérique (VF) à partir des données d'image de capture fournies par le circuit de lecture séquentiel (4) pour le pixel considéré et des pixels voisins définis par un masque du filtre centré sur ledit pixel, ladite première valeur numérique étant codée sur le même nombre de bits (r) que lesdites données d'image de capture ; - une deuxième étape (102) de binarisation (BIN1) de la première valeur numérique, établissant une première valeur binaire (VB1) pour ledit pixel ; et - pour chaque pavé (B) de pixels de la matrice - une troisième étape (103) de calcul d'une deuxième valeur numérique (VE) par sommation desdites premières valeurs binaires (VB1) des pixels du pavé concerné dans un registre d'accumulation à 0=b1+b2 bits de sortie, avec b1 le nombre de lignes de pixels du pavé et b2 le nombre de colonnes de pixels du pavé. 21 2. Capteur d'image selon la revendication 1, dans lequel la deuxième valeur numérique est une valeur codée sur q bits (VEq), où q=1 à Q. 5 3. Capteur d'image selon la revendication 1 ou 2, dans lequel le processus de calcul (100) comprend une quatrième étape (104) de binarisation (BIN2) de ladite deuxième valeur numérique. 4. Capteur d'image selon la revendication 3, dans lequel le processus 10 de calcul (100) comprend une cinquième étape (105) de traitement morphologique par érosion puis dilatation qui est appliqué sur les valeurs binaires établies par la quatrième étape. 5. Capteur d'image selon l'une des revendications 1 à 4, comportant 15 une mémoire de masques de filtres paramétrables. 6. Capteur d'image selon l'une des revendications 1 à 5, configuré pour appliquer dans ladite première étape, un calcul d'au moins un filtre haute fréquence, et la première valeur numérique représente une grandeur 20 correspondante, qui est une valeur absolue. 7. Capteur d'image selon l'une des revendications 1 à 5, dans lequel ladite première étape de calcul applique en parallèle au moins un calcul de gradient horizontal et un calcul de gradient vertical sur les données d'image 25 de capture dudit pixel et desdits pixels voisins, et la première valeur numérique (VF) est la somme des valeurs absolues desdits gradients calculés. 8. Capteur d'image selon l'une des revendications 1 à 5, configuré 30 pour appliquer dans ladite première étape (101) un calcul de filtre parmi au moins un filtre de la liste suivante : un calcul de filtre haute fréquence non directionnel combinant un ou plusieurs calculs de gradient, un calcul de gradient dans une direction déterminée, un filtre correspondant à des caractéristiques spatiales représentatives d'un type de code. 22 9. Capteur d'image selon la revendication 8, dans lequel le capteur est configuré pour appliquer un premier filtre de calcul de ladite liste sur les données d'une première image de capture d'un objet cible, et un autre filtre de calcul différent du premier sur les données d'une deuxième image de 5 capture du même objet cible. 10. Capteur d'image selon la revendication 9, dans lequel la deuxième image de capture correspond à un zoom sur une région d'intérêt déterminée à partir de la macro-image calculée sur les données de la première image de 10 capture. 11. Capteur d'image selon l'une quelconque des revendications 1 à 10, dans lequel la taille de pavé de pixels est fonction de la taille de code(s) dans l'image de capture. 15 12. Capteur d'image selon la revendication 11, dans lequel la taille de pavé est paramétrable. 13. Capteur d'image selon l'une quelconque des revendications 1 à 20 12, dans laquelle les étapes de binarisation utilisent une valeur de seuil respective (Vs1, Vs2), paramétrable.