Brevet FR2773928A1 — publié le 19990723

La présente invention concerne un dispositif et un procédé de codage de signal numérique, ainsi que le dispositif et le procédé de décodage correspondant. La nature du signal à coder est quelconque. Le signal est de manière générale un ensemble de données représentatives de grandeurs physiques. On s'intéressera dans la suite à une image numérique, à titre d'exemple. Une image numérique classique est une matrice de par exemple 512 sur 512 pixels codés sur huit bits. La transmission d'une telle image sur un canal à bas débit nécessite plusieurs dizaines de minutes. Des techniques de compression d'image ont été développées pour réduire le temps de transmission. La quantification vectorielle est fréquemment utilisée pour le codage d'image. Une telle quantification utilise un dictionnaire de vecteurs de code, qui peut être un réseau, par exemple de type D,, dont chaque élément est représenté par exemple par ses coordonnées cartésiennes, ou par une représentation polaire. Pour respecter les statistiques des données, il est préférable de représenter un vecteur de code du réseau par ses coordonnées polaires, à savoir sa norme et un indice représentant sa position sur une isonorme. Le codage de l'indice d'un vecteur de code est le codage d'un événement parmi un groupe connu d'événements. Pour cela, il est connu de coder chaque événement sur un nombre de bits correspondant à la puissance de deux supérieure au nombre d'événement. Chaque événement est ainsi codé de manière unique. Cependant, cette technique utilise un nombre important de bits. Une autre technique connue est le codage entropique, par exemple de type Huffman. Cette technique nécessite un grand temps de calcul et génère des tables, qui occupent une place mémoire importante, notamment lorsqu'il y a beaucoup d'événements à coder. La présente invention vise à remédier à ces inconvénients en fournissant un procédé de codage d'événement compris dans un groupe connu d'événements, qui fournit un code plus compact. A cette fin, I'invention propose un procédé de codage d'un événement compris dans un groupe connu d'événements, caractérisé en ce qu'il comporte les étapes de: - détermination d'un premier nombre et d'un second nombre de bits utilisables pour coder un événement, en fonction du nombre d'événements du groupe, - codage de l'événement en utilisant le premier nombre de bits ou le second nombre de bits en fonction d'un critère de sélection. Corrélativement, I'invention propose un dispositif de codage d'un événement compris dans un groupe connu d'événements, caractérisé en ce qu'il comporte: - des moyens de détermination d'un premier nombre et d'un second nombre de bits utilisables pour coder un événement, en fonction du nombre d'événements du groupe, - des moyens de codage de l'événement en utilisant le premier nombre de bits ou le second nombre de bits en fonction d'un critère de sélection. Le procédé et le dispositif génèrent un code de longueur variable, dont le décodage est unique. Le code de longueur variable est plus compact qu'un code basé sur les puissances de deux. En outre, le codage et le décodage sont rapides à mettre en oeuvre, car ils n'impliquent que des calculs simples. Notamment, I'invention ne nécessite aucune table à mémoriser, contrairement au codage de Huffman. L'invention s'applique plus particulièrement au codage d'un vecteur de code compris dans un groupe connu de vecteurs de code. Le procédé comporte alors les étapes de: - détermination d'un premier nombre et d'un second nombre de bits utilisables pour coder un vecteur de code, en fonction du nombre de vecteurs du groupe, - codage du vecteur de code en utilisant le premier nombre de bits ou le second nombre de bits en fonction d'un critère de sélection. Un indice est alors associé au vecteur de code, par exemple pour représenter sa position sur une isonorme, ou son rang dans un dictionnaire. L'invention concerne également un procédé de codage d'un ensemble de données représentatives de grandeurs physiques, caractérisé en ce qu'il comporte les étapes de: - division en vecteurs de l'ensemble de données, puis, pour chacun des vecteurs issus de la division, - quantification vectorielle du vecteur, en utilisant un ensemble connu de vecteurs de code, - détermination d'un groupe de vecteurs de code auquel appartient le vecteur de code utilisé pour quantifier le vecteur, - détermination d'un premier nombre et d'un second nombre de bits utilisable pour coder le vecteur de code, en fonction du nombre de vecteurs de code appartenant au groupe, - codage du vecteur de code en utilisant le premier nombre de bits ou le second nombre de bits en fonction d'un critère de sélection. Grâce à l'invention, le taux de compression exprimé en bits par symbole est proche de l'entropie. Selon des caractéristiques préférées, la détermination du premier nombre de bits comporte le calcul du logarithme en base deux du nombre d'événements du groupe, et la détermination du second nombre de bits comporte le calcul du logarithme en base deux du nombre d'événements du groupe augmenté d'une unité. La longueur des codes utilisés est ainsi directement liée au nombre d'événements à coder et est simple et rapide à déterminer. Selon une autre caractéristique préférée, la sélection du premier nombre de bits ou du second nombre de bits comporte les étapes de: - affectation d'un indice entier à l'événement, - détermination d'une borne, - comparaison de l'indice avec la borne, pour sélectionner le premier nombre de bits ou le second nombre de bits en fonction du résultat de la comparaison. La sélection du premier ou du second nombre de bits est très rapide car elle n'implique que des calculs simples. Lorsque la sélection est effectuée, I'invention comporte les étapes de - codage de l'indice diminué de la moitié de la borne, en utilisant le premier nombre de bits, si l'indice est supérieur ou égal à la borne, - codage de l'indice en utilisant le second nombre de bits, si l'indice est inférieur à la borne. Le codage proprement dit de l'indice est ainsi très rapide. Selon une autre caractéristique préférée, la borne dépend du nombre d'événements contenus dans le groupe. Dans un autre aspect, I'invention concerne un procédé de décodage d'un événement compris dans un groupe connu d'événements, ledit événement étant codé en utilisant un premier ou un second nombre de bits, le second nombre étant supérieur au premier nombre, caractérisé en ce qu'il comporte les étapes de: - lecture du premier nombre de bits, - comparaison de la valeur lue avec une borne, pour déterminer si l'événement est codé en utilisant le premier ou le second nombre de bits. Corrélativement, I'invention propose un dispositif de décodage d'un événement compris dans un groupe connu d'événements, ledit événement étant codé en utilisant un premier ou un second nombre de bits, le second nombre étant supérieur au premier nombre, caractérisé en ce qu'il comporte: - des moyens de lecture du premier nombre de bits, - des moyens de comparaison de la valeur lue avec une borne, pour déterminer si l'événement est codé en utilisant le premier ou le second nombre de bits. Le procédé et le dispositif de décodage permettent de retrouver très simplement l'indice représentant l'événement codé. Comme déjà précisé, I'événement peut être un vecteur de code. Les caractéristiques et avantages de la présente invention apparaîtront plus clairement à la lecture de plusieurs modes de réalisations illustrés par les dessins annexés, dans lesquels: - la figure 1 est un bloc diagramme d'un mode de réalisation d'un dispositif de codage de signal numérique selon l'invention, - la figure 2a représente schématiquement une image numérique à transmettre par le dispositif de la figure 1, - la figure 2b représente schématiquement une image divisée en vecteurs dans le dispositif de la figure 1, - la figure 3 représente un réseau de vecteurs de code en dimension 2, - la figure 4 représente un réseau de vecteurs de code en dimension 2, - la figure 5 représente est un bloc diagramme d'un mode de réalisation d'un dispositif de décodage de signal numérique selon l'invention, - la figure 6 représente un mode de réalisation d'un algorithme de codage de signal numérique selon l'invention, - la figure 7 représente un mode de réalisation d'un algorithme de codage d'un vecteur de code inclus dans l'algorithme de la figure 6, - la figure 8 représente un mode de réalisation d'un algorithme de codage d'indice inclus dans l'algorithme de la figure 6, - la figure 9a représente un exemple de codage de vecteurs de code selon l'invention, - la figure 9b représente un exemple de codage de vecteurs de code selon la technique antérieure, - la figure 10 représente un mode de réalisation d'un algorithme de décodage de signal numérique selon l'invention, - la figure 11 représente un mode de réalisation d'un algorithme de décodage d'indice inclus dans l'algorithme de la figure 9, - la figure 12 représente un mode de réalisation d'un algorithme de décodage d'un vecteur de code, inclus dans l'algorithme de la figure 10. Selon le mode de réalisation choisi et représenté à la figure 1, un dispositif de codage selon l'invention est destiné à coder un signal numérique dans le but de le compresser. Le dispositif de codage est intégré dans un appareil 100, qui est par exemple un appareil photographique numérique, ou un camescope numérique, ou un système de gestion de base de données, ou encore un ordinateur. Le signal numérique à compresser SI est dans ce mode particulier de réalisation une suite d'échantillons numériques représentant une image. Le dispositif comporte une source de signal 1, ici de signal d'image. De manière générale, la source de signal soit contient le signal numérique, et est par exemple une mémoire, un disque dur ou un CD-ROM, soit convertit un signal analogique en signal numérique, et est par exemple un camescope analogique associé à un convertisseur analogique-numérique. Le signal d'image SI est une suite de mots numériques, par exemple des octets. Chaque valeur d'octet représente un pixel d'une image IM à 256 niveaux de gris, ou image noir et blanc. La source d'image 1 peut également générer une sous-bande d'une image résultant d'une décomposition en sous-bande de fréquence de l'image. La sous-bande comporte des coefficients qui seront traités dans la suite comme les pixels d'une image. Une sortie 11 de la source de signal est reliée à un circuit de division en vecteurs 2. Ce circuit reçoit depuis la source 1 L'image IM représentée à la figure 2a qui est une matrice à L lignes et C colonnes comportant L.C pixels P11 à Ploc, L et C étant des entiers par exemple égaux à 512. Le circuit de division 2 divise l'image IM par bloc, ou vecteur, en une image divisée IMD montrée à la figure 2b. L'image IMD comporte N vecteurs V1 à VN , où N est un entier. Les vecteurs formés sont adjacents et un vecteur quelconque Vn, avec n compris entre 1 et N, est un bloc rectangulaire de pixels adjacents de l'image IM. Le vecteur Vn a une taille prédéterminée, par exemple 4x4 pixels. La formation des vecteurs, connue en soi, peut être réalisée de différentes manières. Par exemple, les vecteurs se chevauchent, ou sont des groupes de pixels non adjacents dans l'image d'origine. En référence de nouveau à la figure 1, le circuit de division en vecteurs a une sortie 21 reliée à un circuit de quantification vectorielle sur réseau 3. La quantification vectorielle sur réseau, dite LVQ, d'après l'Anglais "Lattice Vector Quantization", consiste globalement à coder un vecteur Vn en recherchant le vecteur de code VCk qui est son plus proche voisin, au sens d'une norme prédéterminée, parmi les vecteurs d'un réseau. La quantification vectorielle sur réseau est par exemple décrite dans l'article "A fast encoding method for lattice codes and quantizers" de J.H. Conway et N.J.A. Sloane, paru dans IEEE Transactions on Information Theory, n" 29, 1983, pages 820 à 824. Le réseau est de préférence choisi pour être le plus compact possible, de manière à rendre la quantification optimale. Le réseau est ainsi par exemple un réseau dit D,, où n est la dimension de l'espace contenant les vecteurs de code. Les figures 3 et 4 représentent un réseau à deux dimensions, ici le réseau A2, ou réseau hexagonal. Ce réseau est utilisé pour quantifier des vecteurs à deux composantes. Une fois que le vecteur à coder est quantifié par le circuit 3, ce circuit fournit le vecteur de code à un circuit de codage 4 qui réalise un codage par multicode, selon lequel un vecteur est représenté par plusieurs paramètres, ou codes, qui sont ici sa norme et un indice. Pour cela, I'on considère tout d'abord une norme. Par exemple, à la figure 3, la norme L1, correspondant à la somme des valeurs absolues des composantes du vecteur, est envisagée. Les vecteurs qui ont la même norme L1 sont disposés sur une isonorme, ici un même losange en dimension 2, une hyperpyramide dans le cas général. A la figure 4, la norme L2, correspondant à la somme des carrés des composantes du vecteur, est envisagée. Les vecteurs qui ont la même norme sont disposés sur une isonorme, ici un cercle en dimension 2, une hypersphère dans le cas général. Un vecteur de code VCk est par conséquent représenté par une représentation polaire, ici sa norme Nk et un indice lk représentant sa position parmi tous les vecteurs de code ayant la même norme. L'indice du vecteur de code est un entier qui représente sa position sur l'hyperpyramide ou l'hypersphère, dans le cas des normes L1 et L2 L'indice lk est compris entre zéro et le nombre M de vecteurs de code situés sur l'isonorme diminué de une unité. En variante, d'autres types de représentations polaires utilisant plus de deux paramètres sont utilisables dans le cadre de l'invention. Par exemple, le réseau est divisé en secteurs, auxquels sont affectés des codes de représentations respectifs. Les vecteurs de code sont alors représentés par leur secteur, leur norme et leur indice. L'indice lk est calculé à partir des composantes du vecteur de code, comme exposé dans la suite en référence à la figure 7, ou en variante est déterminé à l'aide d'une table de correspondance. Le circuit 4 fournit l'ensemble des normes Nk des vecteurs de code VCk utilisés pour quantifier l'image IM à un circuit 5 de codage entropique, par exemple un circuit de codage de Huffman. D'autres types de codage peuvent être utilisés pour coder les normes des vecteurs de code. Le circuit 4 fournit l'ensemble des indices lk des vecteurs de code VCk utilisés pour quantifier l'image IM à un circuit 6 de codage selon l'invention. Ce circuit code de manière générale un événement parmi un ensemble connu d'événements, chaque événement étant représenté par un indice entier. Le codage réalisé par le circuit 6 est décrit dans la suite en référence à la figure 8. Les circuits 5 et 6 ont des sorties respectives Si et 61 reliées à un circuit de transmission 7. Le circuit de transmission 7 transmet de manière classique l'image codée vers un dispositif de réception exposé dans la suite. Le circuit 7 comporte notamment des circuits de modulation du signal à transmettre. En variante, le circuit de transmission est remplacé par un circuit de mémorisation de l'image codée. En référence à la figure 5, le dispositif de décodage réalise globalement des opérations inverses de celles du dispositif de codage. Le dispositif de décodage est intégré dans un appareil 200, qui est par exemple un lecteur d'image numérique, ou de séquence vidéo numérique, ou un système de gestion de base de données, ou encore un ordinateur. Un même appareil peut comporter à la fois le dispositif de codage et le dispositif de décodage selon l'invention, de manière à effectuer des opérations de codage et de décodage. Le dispositif de décodage comporte une source de données codées 10 qui comporte par exemple un circuit de réception associé à une mémoire tampon. Une première sortie 101 du circuit 10 est reliée à un circuit Il de décodage de la norme Nk de chacun des vecteurs de code d'une image codée. Le circuit Il effectue un décodage correspondant au codage du circuit 5. Une première sortie lli du circuit Il est reliée à un circuit 12 de décodage de l'indice 1k de chacun des vecteurs de code de l'image codée considérée. Une seconde sortie 102 du circuit 10 est reliée au circuit 12. Le décodage réalisé par le circuit 12 correspond au codage réalisé par le circuit 6 et sera décrit dans la suite en référence à la figure 11. Le circuit Il a une seconde sortie 112 reliée à un circuit 13 de décodage des multicodes. Le circuit 12 a une sortie 121 reliée au circuit 13. Le circuit 11 fournit au circuit 13 la norme Nk de chacun des vecteurs de code VCk de l'image codée, et le circuit 12 fournit l'indice lk de chacun des vecteurs de code. A partir de la norme et de l'indice de chacun des vecteurs de code VCk de l'image codée, le circuit 13 détermine les vecteurs de code VCk dans le réseau. Le fonctionnement du circuit 13 correspond au codage effectué par le circuit 4, et est décrit dans la suite en référence à la figure 12. Une sortie 131 du circuit 13 est reliée à un circuit de formation d'image 14. Le circuit 13 fournit les vecteurs de code VCk décodés au circuit 14. Ce dernier construit l'image décodée et possède une sortie 141 reliée à un circuit 15 d'exploitation des données décodées, comportant par exemple des moyens de visualisation d'image. Selon un mode préféré de réalisation de l'invention, les circuits de division en vecteurs 2, de quantification vectorielle 3, de codage 4, 5 et 6, et de transmission 7, tous inclus dans le dispositif de codage représenté à la figure 1, sont réalisés par un microprocesseur associé à des mémoires vives et mortes. La mémoire morte comporte un programme pour coder l'image IM, et la mémoire vive comporte des registres adaptés à enregistrer des variables modifiées au cours de l'exécution du programme. De même, les circuits de décodage 11, 12 et 13, de formation d'image 14 et d'exploitation 15, inclus dans le dispositif de décodage représenté à la figure 5, sont réalisés par un second microprocesseur associé à des mémoires vives et mortes. La mémoire morte comporte un programme pour décoder les images, et la mémoire vive comporte des registres adaptés à enregistrer des variables modifiées au cours de l'exécution du programme. En référence à la figure 6, un procédé de codage selon l'invention d'une image IM, mis en oeuvre dans le dispositif de codage, comporte des étapes El à E9. L'étape El est la division de l'image à coder en vecteurs Vn, comme représenté à la figure 2b. L'étape suivante E2 est une initialisation pour considérer le premier vecteur à coder. Les vecteurs sont traités dans un ordre a priori quelconque, mais prédéterminé. L'étape E2 est suivie de l'étape E3 qui est la quantification vectorielle sur réseau du vecteur à coder courant Vn. Le résultat de cette étape est un vecteur de code VCk sélectionné dans le réseau considéré. L'étape suivante E4 est le codage par multicode du vecteur de code VCk sélectionné à l'étape précédente. Cette étape a pour résultat la norme Nk et l'indice 1k du vecteur de code VCk. La norme Nk est calculée de manière classique. L'indice 1k est un entier qui représente la position du vecteur de code sur une isonorme. L'indice lk est compris entre zéro et le nombre de vecteurs de code situés sur la même isonorme diminué de une unité. L'étape E4, avec le calcul de l'indice Ik pour un vecteur de code à quatre composantes est exposée en détail en référence à la figure 7. L'étape E4 est suivie de l'étape E5 qui est un test pour vérifier si le vecteur courant Vn est le dernier de l'image en cours de codage. Lorsque la réponse est négative, L'étape E5 est suivie de l'étape E6 pour considérer le vecteur à coder suivant. L'étape E6 est suivie de l'étape E3 précédemment décrite. Lorsque tous les vecteurs à coder Vn ont été traités, L'étape E5 est suivie de l'étape E7 de codage de la norme de chacun des vecteurs de code VCk utilisés pour coder l'image en cours de traitement. Comme précédemment exposé, le codage de la norme des vecteurs de code est un codage entropique, par exemple un codage de Huffman. L'étape suivante E8 est le codage des indices lk de chacun des vecteurs de code. L'étape E8 est décrite en détail à la figure 8. L'étape suivante E9 est la transmission des formes codées des vecteurs de code. II est à noter que l'ordre des étapes précédemment décrites peut être modifié. Ainsi, les étapes E7, E8 et E9 peuvent être réalisées entre les étapes E4 et E5. Pour le codage de la norme Nk, on utilisera alors un codage entropique prédéterminé. La figure 7 représente l'étape E4, comportant le calcul de la norme Nk et le calcul de l'indice 1k d'un vecteur de code, dans le cas d'un vecteur de code à quatre composantes. Ces calculs sont représentés sous la forme d'un algorithme comportant des étapes E40 à E55. On considère le vecteur de code VCk, ayant quatre composantes notées (x1, x2, x3, x4). L'étape E40 est une initialisation au cours de laquelle un paramètre de travail IND est initialisé à la valeur nulle, et une matrice A est considérée. La matrice A est une matrice carrée dont la taille, ici 4x4, dépend du nombre de composantes du vecteur de code considéré, et dont tous les coefficients valent 1/2, sauf ceux d'une diagonale qui valent -1/2. La matrice A a pour fonction de réduire l'espace de recherche de l'indice 1k L'étape suivante E41 est la détermination du vecteur leader VLk du vecteur de code considéré VCk. Le vecteur leader VLk est le vecteur dont les composantes sont celles du vecteur de code considéré, réordonnées par ordre décroissant. Par exemple, les composantes du vecteur leader sont (x3, x2, x4, x1). Le vecteur leader est situé sur l'isonorme à laquelle appartient le vecteur de code considéré. L'étape suivante E42 est le calcul de la norme du vecteur de code VCk. La norme choisie est par exemple la norme L1. En variante, une autre norme peut être utilisée, par exemple la norme L2. A partir de l'étape suivante E43, est considéré un vecteur de recherche V, dont les composantes sont (v1, V2, V3, V4). Les étapes E43 à E46 et E52 à E55 forment des boucles imbriquées au cours desquelles la composante v1 varie entre la valeur -Nk/2 et Nk/2, la composante v2 varie entre -Nk/2 et v1, la composante v3 varie entre -Nk/2 et v2 et la composante V4 varie entre -Nk/2 et V3, de manière à respecter un ordre décroissant des composantes du vecteur de recherche V. Ainsi, le vecteur V est de la forme d'un vecteur leader. A chaque étape, le pas des variations est de une unité. L'étape E47 est la formation du vecteur de recherche courant V, avec les composantes déterminées par les étapes précédentes E43 à E46. Un vecteur intermédiaire Y est formé, par multiplication de la matrice A avec le vecteur de recherche courant V. Le vecteur intermédiaire Y est également un vecteur leader. La norme Ny du vecteur intermédiaire Y est déterminée. L'étape suivante E48 est un test pour déterminer si la norme Ny du vecteur intermédiaire Y est égale à celle du vecteur de code VCk. Si la réponse est négative, cela signifie que le vecteur intermédiaire Y n'est pas situé sur l'isonorme à laquelle appartient le vecteur de code VCk. Ce vecteur Y n'est plus considéré, et l'étape E48 est suivie de l'étape E52 pour poursuivre le bouclage sur la composante V4. Si la réponse à l'étape E48 est positive, cela signifie que le vecteur Y considéré est situé sur l'isonorme à laquelle appartient le vecteur de code VCk. L'étape E48 est suivie de l'étape E49 à laquelle il est testé si le vecteur intermédiaire Y est égal au vecteur leader VLk. Si la réponse est négative, l'étape E49 est suivie de l'étape E50, à laquelle est déterminé le nombre PER de permutations possibles des composantes du vecteur intermédiaire Y, conduisant à la formation de vecteurs différents. Ce nombre dépend d'une part du nombre de composantes à permuter, et d'autre part au nombre de ces composantes qui sont égales entre elles. Ainsi, pour quatre composantes, le nombre PER peut prendre cinq valeurs différentes, entre 1 et 24, en fonction du nombre de composantes égales. La valeur du paramètre IND est augmentée du nombre PER. L'étape E50 est suivie de l'étape E52 pour poursuivre le bouclage. Lorsque la réponse est positive à l'étape E49, cela signifie que les étapes E43 à E49 ont abouti à retrouver le vecteur leader VLk du vecteur de code VCk. Cette étape est suivie de l'étape E51 à laquelle est déterminé un numéro de permutation NP entre le vecteur de code VCk et le vecteur leader VLk, égal au vecteur Y. Le numéro de permutation NP est déterminé par une méthode connue en soi, par exemple par application de la méthode de Schalkwijk, qui est décrite dans l'article "Algorithm for source coding" paru dans IEEE Transactions on Information Theory, mai 1972, n"3, pages 395 à 399. L'indice est égal au paramètre IND augmenté de la valeur NP. Le procédé de détermination de l'indice du vecteur de code s'applique quel que soit le nombre de composantes du vecteur de code considéré, à condition que ce vecteur de code soit issu d'un réseau D,, avec n quelconque supérieur ou égal à deux. La figure 8 représente l'étape E8 qui est détaillée sous la forme d'un algorithme comportant des étapes E81 à E88. L'étape E81 est une initialisation au cours de laquelle est considéré un premier vecteur de code VCk parmi les vecteurs de code utilisés pour coder l'image IM. Les vecteurs sont considérés dans un ordre quelconque, prédéterminé. L'étape suivante E82 est la détermination du nombre M de vecteurs de code ayant la même norme que le vecteur considéré. L'étape E82 est suivie L de l'étape E83 à laquelle sont calculées les nombres L = log2(M) et B = (M-2 ). L'étape suivante E84 est un test pour déterminer si l'indice à coder lk est inférieur à la quantité 2.B. Si la réponse est positive, L'étape E84 est suivie de l'étape E85 à laquelle l'indice lk est codé sur (L+1) bits. Si la réponse est négative à l'étape E84, alors cette dernière est suivie de l'étape E86 à laquelle la quantité (Ik-B) est codée sur seulement L bits. Les événements sont ici supposés équiprobables. Il est à noter que l'invention s'applique également à un ensemble d'événements non équiprobables. Dans ce cas, il est possible d'affecter les codes les plus courts aux événements les plus probables. Les étapes E85 et E86 sont suivies de l'étape E87 qui est un test pour vérifier si le vecteur courant VCk est le dernier vecteur de code de l'image en cours de traitement. Si la réponse est négative, l'étape E87 est suivie de l'étape E88 pour considérer le vecteur de code suivant. L'étape E88 est suivie de l'étape E82 précédemment décrite. Si la réponse à l'étape E87 est positive, cela signifie que le codage de l'image considérée est terminé. L'étape E87 est alors suivie de l'étape E9 précédemment décrite. La figure 9a représente un tableau résumant les résultats obtenus pour 18 événements à coder, chaque événement étant représenté par un indice entre 0 et 17. Les calculs ont pour résultat: M = 18, L = 5, B = 2 (étapes E82 et E83) Un premier jeu d'indices comporte les indices de 0 à 3 qui seront codés sur 5 bits, et un second jeu d'indices comporte les indices pour lesquels la quantité (lk-B) sera codée sur4 bits. Le coût de codage est en moyenne de 4,22 bits par événement, soit, pour 10000 événements à coder, un coût total d'environ 42 222 bits. II En référence à la figure 10, un procédé de décodage selon l'invention d'une image IM, mis en oeuvre dans le dispositif de décodage, est représenté sous la forme d'un algorithme comportant des étapes E10 à E13. L'étape E10 est le décodage de la norme Nk de chacun des vecteurs de code VCk utilisés pour coder l'image considérée. Le décodage dépend du codage réalisé, par exemple un codage entropique. L'étape suivante El 1 est le décodage de l'indice lk de chacun des vecteurs de code VCk. Pour un vecteur de code considéré, la norme Nk indique sur quelle isonorme se trouve le vecteur, et son indice 1k permet de retrouver sa position exacte sur l'isonorme. L'étape El 1 est détaillée en référence à la figure 11. L'étape suivante E12 est la détermination des composantes de chacun des vecteurs de code en fonction de sa norme et de son indice. Les composantes d'un vecteur sont égales par construction aux valeurs des pixels du vecteur. Les vecteurs sont mémorisés. Cette étape est globalement l'inverse de l'étape E4, et est détaillée en référence à la figure 12. L'étape suivante E13 est l'exploitation des données décodées, ici la formation de l'image décodée. La figure Il représente l'étape El I sous la forme d'un algorithme comportant des étapes El Il à E120. L'étape El Il est une initialisation pour considérer le premier vecteur de code de l'image à décoder. Les vecteurs sont traités dans un ordre quelconque, prédéterminé. L'étape suivante E112 est la détermination du nombre M de vecteurs de code ayant la même norme que le vecteur de code considéré. La norme considérée est la même qu'au codage. L'étape suivante E113 est le calcul des quantités L = log2(M) et B = L (M-2). L'étape E113 est suivie de l'étape E114 qui est la lecture de L bits du train de bits contenant les indices. La valeur de ces L bits est affectée à une variable de travail T. L'étape suivante E115 est une comparaison de la valeur de T avec la valeur de la quantité B. Si la quantité T est supérieure ou égale à la quantité B, alors l'étape ElîS est suivie de l'étape E116 qui est l'affectation de la valeur (T+B) à l'indice 1k du vecteur de code considéré. Si à l'étape E115 la quantité T est inférieure à la quantité B, alors l'étape E115 est suivie de l'étape E117 à laquelle un bit supplémentaire est lu dans le train de bits. La valeur de ce bit est affectée à une variable de travail c. L'étape suivante Eu 18 est l'affectation de la valeur (2.T+c) à l'indice du du vecteur de code considéré. Les étapes El 16 et E118 sont suivies de l'étape E119 qui est un test pour vérifier si le vecteur de code en cours de traitement est le dernier vecteur de code de l'image à décoder. Si la réponse est négative, alors l'étape E119 est suivie de l'étape E120 pour considérer le vecteur de code suivant. L'étape E120 est suivie de l'étape Eu 12 précédemment décrite. Lorsque tous les vecteurs de l'image ont été traités, alors l'étape Eu 19 est suivie de l'étape E12. La figure 12 représente l'étape E12 sous la forme d'un algorithme comportant des étape E120 à Eu 34. On n'envisage ici qu'un seul vecteur à décoder, dont la norme Nk et l'indice 1k sont connus d'après les étapes E10 et Eli. L'étape E120 est une initialisation au cours de laquelle le paramètre de travail IND est initialisé à la valeur nulle, et la matrice A est considérée. La matrice A est identique à la matrice considérée au codage (figure 7), à savoir une matrice carrée dont la taille, ici 4x4, dépend du nombre de composantes du vecteur de code considéré, et dont tous les coefficients valent 1/2, sauf ceux d'une diagonale qui valent -1/2. A partir de l'étape suivante Ex 22, est considéré un vecteur de recherche V, dont les composantes sont (vr, V2, V3, V4). Les étapes E122 à E125 et E131 à E134 forment des boucles imbriquées au cours desquelles la composante v1 varie entre la valeur -Nk/2 et Nk/2, la composante v2 varie entre -Nk/2 et vr, la composante v3 varie entre Nk/2 et v2 et la composante v4 varie entre -Nk/2 et v3, de manière à respecter un ordre décroissant des composantes du vecteur de recherche V. Ainsi, le vecteur V est de la forme d'un vecteur leader. A chaque étape, le pas des variations est de une unité. L'étape E126 est la formation du vecteur de recherche courant V, avec les composantes déterminées par les étapes précédentes E122 à E125. Un vecteur intermédiaire Y est formé, par multiplication de la matrice A avec le vecteur de recherche courant V. Le vecteur intermédiaire Y est également un vecteur leader. La norme Ny du vecteur intermédiaire Y est déterminée. L'étape suivante E127 est un test pour déterminer si la norme Ny du vecteur intermédiaire Y est égale à celle du vecteur de code VCk. Si la réponse est négative, cela signifie que le vecteur intermédiaire Y n'est pas situé sur l'isonorme à laquelle appartient le vecteur de code VCk. Ce vecteur Y n'est plus considéré, et l'étape E127 est suivie de l'étape E131 pour poursuivre le bouclage sur la composante v4. Si la réponse à l'étape E127 est positive, cela signifie que le vecteur Y considéré est situé sur l'isonorme à laquelle appartient le vecteur de code VCk. L'étape E127 est suivie de l'étape E128, à laquelle est déterminé le nombre PER de permutations possibles des composantes du vecteur intermédiaire Y, conduisant à la formation de vecteurs différents. Ce nombre dépend d'une part du nombre de composantes à permuter, et d'autre part au nombre de ces composantes qui sont égales entre elles. Ainsi, pour quatre composantes, le nombre PER peut prendre cinq valeurs différentes, entre 1 et 24, en fonction du nombre de composantes égales. La valeur du paramètre IND est augmentée du nombre PER. L'étape suivante E129 est un test pour vérifier si l'indice lk est strictement supérieur à la valeur courante du paramètre IND. Si la réponse est positive, L'étape E129 est suivie de l'étape E131 pour poursuivre le bouclage. Si la réponse à l'étape E129 est négative, cette étape est suivie de l'étape E130 à laquelle est déterminée le numéro de permutation NP entre le vecteur de code VCk et le vecteur leader VLk, égal au vecteur Y. Le numéro de permutation NP est égal au paramètre IND diminué de l'indice lk. Le vecteur de code est déterminé par une méthode inverse de la méthode utilisée à l'étape E51, ici par application de la méthode de Schalkwijk inverse. L'étape E130 est suivie de l'étape E13 précédemment décrite. En variante, la quantification vectorielle est effectuée par comparaison des vecteurs à coder avec les vecteurs d'un dictionnaire de code. Chaque vecteur de code du dictionnaire est associé à un indice représentant son rang dans le dictionnaire. L'indice est codé selon l'invention comme représenté à la figure 7. Le nombre M est alors égal au nombre de vecteurs de code du dictionnaire. L'invention a été décrite pour une image à niveau de gris ; en variante, l'invention s'applique à une image numérique en couleur. L'image en couleur est un ensemble de pixels respectivement définis par leurs composantes rouge, verte et bleue. Chaque composante de couleur d'un pixel est un mot binaire, par exemple un octet. L'image en couleur présente ainsi une structure analogue à trois images à niveaux de gris. L'image en couleur est codée par trois codeurs parallèles, analogues au dispositif de codage décrit, recevant chacun une composante de l'image couleur. Selon une autre variante, L'image en couleur est définie par sa luminance et sa chrominance. La composante de luminance et les deux composantes de chrominance sont codées en parallèle par trois codeurs analogues au dispositif de codage décrit. L'invention s'applique également à d'autres types d'images en couleur, par exemple définies par des composantes d'intensité, de teinte et de saturation. Bien entendu, la présente invention n'est nullement limitée aux modes de réalisation décrits et représentés, mais englobe, bien au contraire, toute variante à la portée de l'homme du métier. Revendications: 1. Procédé de codage d'un événement (Ik) compris dans un groupe connu d'événements, caractérisé en ce qu'il comporte les étapes de: - détermination (E83) d'un premier nombre (L) et d'un second nombre (L+1) de bits utilisables pour coder un événement, en fonction du nombre (M) d'événements du groupe, - codage (E85, E86) de l'événement en utilisant le premier nombre de bits ou le second nombre de bits en fonction d'un critère de sélection. 2. Procédé de codage selon la revendication 1, caractérisé en ce que la détermination (E83) du premier nombre de bits comporte le calcul du logarithme en base deux du nombre d'événements du groupe. 3. Procédé de codage selon la revendication 1 ou 2, caractérisé en ce que la détermination du second nombre de bits comporte le calcul du logarithme en base deux du nombre d'événements du groupe augmenté d'une unité. 4. Procédé de codage selon l'une quelconque des revendications 1 à 3, caractérisé en ce que la sélection du premier nombre de bits ou du second nombre de bits comporte les étapes de: - affectation (E4) d'un indice entier (Ik) à l'événement, - détermination (E83) d'une borne (2.B), - comparaison (E84) de l'indice avec la borne, pour sélectionner le premier nombre de bits ou le second nombre de bits en fonction du résultat de la comparaison. 5. Procédé de codage selon l'une quelconque des revendications 1 à 3, caractérisé en ce qu'il comporte - affectation (E4) d'un indice entier (Ik) à l'événement, - détermination d'une borne paire (2.B), - comparaison (E84) de l'indice entier avec la borne, - codage (E86) de l'indice diminué de la moitié de la borne, en utilisant le premier nombre (L) de bits, si l'indice est supérieur ou égal à la borne (2.B), - codage (E85) de l'indice en utilisant le second nombre (L+1) de bits, si l'indice est inférieur à la borne. 6. Procédé de codage selon la revendication 4 ou 5, caractérisé en ce que la borne (B) dépend du nombre (M) d'événements contenus dans le groupe. 7. Procédé de codage d'un vecteur de code (VCk) compris dans un groupe connu de vecteurs de code, caractérisé en ce qu'il comporte les étapes de: - détermination (E83) d'un premier nombre (L) et d'un second nombre (L+1) de bits utilisables pour coder un vecteur de code, en fonction du nombre (M) de vecteurs du groupe, - codage (E85, E86) du vecteur de code en utilisant le premier nombre de bits ou le second nombre de bits en fonction d'un critère de sélection. 8. Procédé de codage d'un ensemble de données représentatives de grandeurs physiques, caractérisé en ce qu'il comporte les étapes de: - division (El) en vecteurs (Vn) de l'ensemble de données, puis, pour chacun des vecteurs (Vn) issus de la division, - quantification vectorielle (E3) du vecteur, en utilisant un ensemble connu de vecteurs de code, - détermination d'un groupe de vecteurs de code auquel appartient le vecteur de code (VCk) utilisé pour quantifier le vecteur (Vn), - détermination (E83) d'un premier nombre (L) et d'un second nombre (L+1) de bits utilisable pour coder le vecteur de code, en fonction du nombre (M) de vecteurs de code appartenant au groupe, - codage (E85, E86) du vecteur de code en utilisant le premier nombre de bits ou le second nombre de bits en fonction d'un critère de sélection. 9. Procédé de codage selon la revendication 7 ou 8, caractérisé en ce que le groupe de vecteurs de code comporte les vecteurs de code (VCk) de même norme. 10. Procédé de codage selon l'une quelconque des revendications 7 à 9, caractérisé en ce que la détermination (E83) du premier nombre (L) de bits comporte le calcul du logarithme en base deux du nombre de vecteurs de code du groupe. 11. Procédé de codage selon l'une quelconque des revendications 7 à 10, caractérisé en ce que la détermination du second nombre (L+1) de bits comporte le calcul du logarithme en base deux du nombre de vecteurs de code du groupe augmenté d'une unité. 12. Procédé de codage selon l'une quelconque des revendications 7 à 11, caractérisé en ce que la sélection du premier nombre de bits ou du second nombre de bits comporte - affectation (E4) d'un indice entier (Ik) au vecteur de code, - détermination (E83) d'une borne (2.B), - comparaison (E84) de l'indice avec la borne, pour sélectionner le premier nombre de bits ou le second nombre de bits en fonction du résultat de la comparaison. 13. Procédé de codage selon l'une quelconque des revendications 7 à 11, caractérisé en ce qu'il comporte - affectation (E4) d'un indice entier (Ik) au vecteur de code, - détermination (E83) d'une borne paire (2.B) - comparaison (E84) de l'indice entier avec la borne, - codage (E86) de l'indice diminué de la moitié de la borne, en utilisant le premier nombre de bits, si l'indice est supérieur ou égal à la borne (2.B) - codage (E85) de l'indice en utilisant le second nombre de bits, si l'indice est inférieur à la borne. 14. Procédé de codage selon la revendication 12 ou 13, caractérisé en ce que la borne (B) dépend du nombre (M) de vecteurs de code contenus dans le groupe. 15. Procédé de décodage d'un événement (Ik) compris dans un groupe connu d'événements, ledit événement étant codé en utilisant un premier ou un second nombre de bits, le second nombre étant supérieur au premier nombre, caractérisé en ce qu'il comporte les étapes de: - lecture (ex14) du premier nombre de bits, - comparaison (ex 15) de la valeur lue avec une borne (B), pour déterminer si l'événement est codé en utilisant le premier ou le second nombre de bits. 16. Procédé de décodage selon la revendication 15, caractérisé en ce que la borne (B) dépend du nombre (M) d'événements contenus dans le groupe. 17. Procédé de décodage d'un vecteur de code (VCk) compris dans un groupe connu de vecteurs de code, ledit vecteur de code étant codé en utilisant un premier ou un second nombre de bits, le second nombre étant supérieur au premier nombre caractérisé en ce qu'il comporte les étapes de: - lecture (ex14) du premier nombre de bits, - comparaison (E115) de la valeur lue avec une borne (B), pour déterminer si le vecteur de code est codé en utilisant le premier ou le second nombre de bits. 18. Procédé de décodage selon la revendication 17, caractérisé en ce que la borne (B) dépend du nombre (M) de vecteurs de code contenus dans le groupe. 19. Dispositif de codage d'un événement (lk) compris dans un groupe connu d'événements, caractérisé en ce qu'il comporte: - des moyens (6) de détermination d'un premier nombre (L) et d'un second nombre (L+1) de bits utilisables pour coder un événement, en fonction du nombre (M) d'événements du groupe, - des moyens (6) de codage de l'événement en utilisant le premier nombre de bits ou le second nombre de bits en fonction d'un critère de sélection. 20. Dispositif de codage selon la revendication 19, caractérisé en ce qu'il est adapté à déterminer le premier nombre (L) de bits en calculant le logarithme en base deux du nombre (M) d'événements du groupe. 21. Dispositif de codage selon la revendication 20 ou 21, caractérisé en ce qu'il est adapté à déterminer le second nombre de bits en calculant le logarithme en base deux du nombre d'événements du groupe augmenté d'une unité. 22. Dispositif de codage selon l'une quelconque des revendications 19 à 21, caractérisé en ce que, pour sélectionner le premier nombre de bits ou le second nombre de bits, il est adapté à: - affecter un indice entier (Ik) à l'événement, - déterminer une borne (2.B), - comparer l'indice avec la borne, pour sélectionner le premier nombre de bits ou le second nombre de bits en fonction du résultat de la comparaison. 23. Dispositif de codage selon i'une quelconque des revendications 19 à 21, caractérisé en ce qu'il comporte: - des moyens d'affectation d'un indice entier (Ik) à l'événement, - des moyens de détermination d'une borne paire (2.B) - des moyens de comparaison de l'indice entier avec la borne, - des moyens de codage de l'indice diminué de la moitié de la borne, en utilisant le premier nombre (L) de bits, si l'indice est supérieur ou égal à la borne (2.B) - des moyens de codage de l'indice en utilisant le second nombre (L+1) de bits, si l'indice est inférieur à la borne. 24. Dispositif de codage d'un vecteur de code (VCk) compris dans un groupe connu de vecteurs de code, caractérisé en ce qu'il comporte: - des moyens (6) de détermination d'un premier nombre (L) et d'un second nombre (L+1) de bits utilisables pour coder un vecteur de code, en fonction du nombre (M) de vecteurs de code du groupe, - des moyens de codage du vecteur en utilisant le premier nombre de bits ou le second nombre de bits en fonction d'un critère de sélection. 25. Dispositif de codage d'un ensemble de données représentatives de grandeurs physiques, caractérisé en ce qu'il comporte: - des moyens (2) de division en vecteurs (Vn) de l'ensemble de données, - des moyens (3) de quantification vectorielle de chacun des vecteurs (Vn) issus de la division, en utilisant un ensemble connu de vecteurs de code (VCk), - des moyens de détermination d'un groupe de vecteurs de code auquel appartient un vecteur de code (VCk) utilisé pour quantifier un vecteur (Vn), - des moyens (6) de détermination d'un premier nombre (L) et d'un second nombre (L+1) de bits utilisable pour coder le vecteur de code (VCk), en fonction du nombre (M) de vecteurs de code appartenant au groupe, - des moyens (6) de codage du vecteur de code en utilisant le premier nombre de bits ou le second nombre de bits en fonction d'un critère de sélection. 26. Dispositif de codage selon la revendication 24 ou 25, caractérisé en ce qu'il est adapté à déterminer un groupe de vecteurs de code qui comporte les vecteurs de code de même norme. 27. Dispositif de codage selon l'une quelconque des revendications 24 à 26, caractérisé en ce qu'il est adapté à déterminer le premier nombre (L) de bits en calculant le logarithme en base deux du nombre de vecteurs de code (VCk) contenus dans le groupe. 28. Dispositif de codage selon l'une quelconque des revendications 24 à 27, caractérisé en ce qu'il est adapté à déterminer le second nombre (L+1) de bits en calculant le logarithme en base deux du nombre de vecteurs de code (VCk) contenus dans le groupe augmenté d'une unité. 29. Dispositif de codage selon l'une quelconque des revendications 24 à 28, caractérisé en ce que, pour la sélection du premier nombre de bits ou du second nombre de bits, il comporte: - des moyens (4) d'affectation d'un indice entier (Ik) au vecteur de code (VCk), - des moyens de détermination d'une borne (2.B), - des moyens de comparaison de l'indice avec la borne, pour sélectionner le premier nombre de bits ou le second nombre de bits en fonction du résultat de la comparaison. 30. Dispositif de codage selon l'une quelconque des revendications 24 à 28, caractérisé en ce qu'il comporte - des moyens (4) d'affectation d'un indice entier (Ik) au vecteur de code (VCk), - des moyens de détermination d'une borne paire (2.B) - des moyens de comparaison de l'indice entier avec la borne, - des moyens de codage de l'indice diminué de la moitié de la borne, en utilisant le premier nombre de bits, si l'indice est supérieur ou égal à la borne (2.B), - des moyens de codage de l'indice en utilisant le second nombre de bits, si l'indice est inférieur à la borne. 31. Dispositif de codage selon l'une quelconque des revendications 19 à 30, caractérisé en ce que les moyens de détermination et les moyens de décodage sont incorporés dans: - un micro-processeur, - une mémoire morte comportant un programme de codage, et - une mémoire vive comportant des registres adaptés à enregistrer des variables modifiées au cours de l'exécution dudit programme. 32. Dispositif de décodage d'un événement (Ik) compris dans un groupe connu d'événements, ledit événement étant codé en utilisant un premier ou un second nombre de bits, le second nombre étant supérieur au premier nombre, caractérisé en ce qu'il comporte: - des moyens de lecture (13) du premier nombre (L) de bits, - des moyens de comparaison (13) de la valeur lue avec une borne (B), pour déterminer si l'événement est codé en utilisant le premier ou le second nombre de bits. 33. Dispositif de décodage selon la revendication 32, caractérisé en ce qu'il est adapté à mettre en oeuvre une borne (B) qui dépend du nombre (M) d'événements contenus dans le groupe. 34. Dispositif de décodage d'un vecteur de code (VCk) compris dans un groupe connu de vecteurs de code, ledit vecteur de code étant codé en utilisant un premier ou un second nombre de bits, le second nombre étant supérieur au premier nombre caractérisé en ce qu'il comporte: - des moyens de lecture (13) du premier nombre (L) de bits, - des moyens de comparaison (13) de la valeur lue avec une borne (B), pour déterminer si le vecteur de code est codé en utilisant le premier ou le second nombre de bits. 35. Dispositif de décodage selon la revendication 34, caractérisé en ce qu'il est adapté à mettre en oeuvre une borne (B) qui dépend du nombre (M) de vecteurs de code contenus dans le groupe. 36. Dispositif de décodage selon l'une quelconque des revendications 32 à 35, caractérisé en ce que les moyens de lecture et les moyens de comparaison sont incorporés dans: - un micro-processeur, - une mémoire morte comportant un programme de décodage, et - une mémoire vive comportant des registres adaptés à enregistrer des variables modifiées au cours de l'exécution dudit programme. 37. Appareil (100) de traitement de signal numérique, caractérisé en ce qu'il comporte des moyens adaptés à mettre en oeuvre le procédé de codage selon l'une quelconque des revendications 1 à 14. 38. Appareil (200) de traitement de signal numérique, caractérisé en ce qu'il comporte des moyens adaptés à mettre en oeuvre le procédé de décodage selon l'une quelconque des revendications 15 à 18. 39. Appareil (100) de traitement de signal numérique, caractérisé en ce qu'il comporte le dispositif de codage selon l'une quelconque des revendications 19 à 31. 40. Appareil (200) de traitement de signal numérique, caractérisé en ce qu'il comporte le dispositif de décodage selon l'une quelconque des revendications 32 à 36.