FR 2660823 A1 19911011 FR 9004600 A 19900410 Chaînage de coefficients codant une image fixe à transmettre La présente invention concerne un procédé cyclique pour chaîner des coefficients qui sont regroupés en quantité égale dans des blocs, et dont certains d'entre eux sont nuls. Plus particulièrement, selon une application préférée de l'invention, les coefficients sont issus d'un codage d'une image vidéo fixe, du genre de celui décrit dans l'article de A. LEGER et al., intitulé "TELSAT PRISME : codeur-décodeur d'images fixes de haute qualité", Commutation et Transmission, NO 4, 1989, pages 75 à 86. Comme illustré schématiquement à la Fig. 1, un tel codage comprend les six étapes successives suivantes 1) Une image fixe originale délivrée par un camescope ou restituée par un vidéodisque transmis sous forme de trois signaux primaires R, V et B qui sont matricés en une composante de luminance Y et deux composantes de différence de couleur entrelacées CR et CB, puis finalement ces trois composantes sont numérisées sous forme de mots à 8 bits. Par exemple l'image est issue d'un système vidéo en couleur à 625 lignes dont 576 sont actives et utiles et comportent chacune 720 points d'image, dits pixels. La numérisation des composantes vidéo est conforme au niveau 4:2:2 des recommandations internationales, relatives à la télévision numérique, et ainsi chaque pixel est représenté par 2x8=16 bits. 2) L'image ainsi numérisée est mémorisée dans une mémoire RAM contenant 16x576x720 = 6635520 bits de l'image ; dans cette mémoire, l'image est alors découpée en blocs carrés de 8x8 pixels, soit 72x90=6480 blocs de pixels; 3) Dans cette troisième étape, chaque blocs de 64 pixels subit une transformation en cosinus discrète TCD.Cette transformation n'apporte par elle-même aucune compression mais condense statistiquement l'information vidéo. 64 coefficients DC et AC1 à AC63 sont obtenus par cette transformation et représentent chacun une bande spectrale du bloc de pixel d'origine ; le premier coefficient DC correspond à la moyenne des valeurs des 64 échantillons du bloc, et les autres coefficients correspondent chacun à un filtrage bidimensionnel dans le bloc. I1 est à noter que cette transformation comme les autres étapes du procédé décrit ci-dessus est accomplie pour chacun des 6480 blocs de luminance, et les 2x3240 blocs de différence de couleur ; par exemple un bloc de teinte uniforme est traduit, après application de la transformée en cosinus discret, par le seul coefficient de composante continue du bloc, tandis que pour un autre bloc ne comportant que des structures verticales, celui-ci est traduit par une seule ligne de 8 coefficients non-nuls parmi les 64. Dans la pratique, les blocs contiennent toujours plus ou moins de plages de couleur uniforme ce qui se traduit par un certain nombre de coefficients ayant une valeur très faible, voire nulle 4) A ce stade, les coefficients ayant une valeur très faible sont éliminés, en comparant tous les coefficients ayant un rang donné dans les blocs après la transformation TCD, à un pas de quantification respectif égal au seuil de perception psychovisuelle de ces coefficients de rang donné à quantifier, ce qui permet de supprimer les "motifs" nuls ou imperceptibles à l'oeil. Chaque coefficient est alors quantifié selon une loi de quantification ayant pour pas, la valeur du seuil correspondant - si le coefficient est inférieur ou égal au seuil, le coefficient est remplacé par la valeur 0, - sinon le coefficient est supérieur au seuil, et le coefficient est remplacé par la partie entière du quotient [coefficient/seuil] 5) Les coefficients sont ensuite codés selon un codage de type HUFFMAN qui réalise une seconde étape de compression après la quatrième étape précédente dite de seuillage. Le codage de HUFFMAN est un codage à longueur de mot de code variable dont la longueur est inversement proportionnelle à la probabilité de l'évènement à coder, ici le coefficient. 6) Puis finalement après passage dans une mémoire tampon, les coefficients non nuls codés selon la méthode de HUFFMAN sont transmis vers un reseau de télécommunications ; pour une image telle que définie ci-dessus, qui était représentée par environ 830 koctets, celle-ci est réduite à 40 koctets lors de la transmission dans le réseau, soit un taux de compression d'image de 20 environ. La Fig. 1 illustre également les six étapes du décodage de l'image dans une extrémité de réception du réseau. Une telle compression d'image permet un gain de place en mémoire très important lors de l'archivage de l'image, et réduit la durée de transmission de l'image, particulièrement lorsque l'image est convoyée à travers une voie numérique à débit faible, en l'occurrence de 64 kbit/s pendant un temps de quelques secondes. Ainsi une image fixe de tres haute qualité est transmissible à travers un réseau de transmission numérique à débit faible accessible à tout abonné téléphonique. Selon l'article précité, entre la quatrième étape dite de seuillage et la cinquième étape dite de codage de HUFFMAN est préconisé un chaînage des coefficients dit en mode progressif. Ce chaînage consiste à transmettre successivement plusieurs passes de l'image, chaque passe comprenant tous les coefficients non nuls de même rang dans les blocs d'image définis ci-dessus. Lors de la restitution de l'image, au fur et à mesure de la transmission des passes, l'image s'affine et le lecteur peut apprécier très rapidement, dès les premières passes, le contenu de l'image. Lors des premières passes, l'image apparaît composée de carrés en noir et blanc, puis progressivement en couleur ; cet affichage progressif facilite des recherches d'image, puisque l'affichage de l'image reconnue peut être interrompue. Selon la technique antérieure, à chaque passe est exploré chacun des 6480 blocs de coefficient, et chaque coefficient, même si il est nul, est testé. En outre, lorsqu'un bloc contient que très peu de coefficients non-nuls, comme selon les exemples précités, dès que le dernier coefficient non-nul du bloc est transmis, tous les coefficients nuls restants, bien que non transmis à travers le réseau, sont encore à tester. Par exemple, si un bloc contient trois coefficients non-nuls, ce bloc est exploré 64 - 3 = 61 fois inutilement. L'opération de chaînage est très longue bien que le nombre de coefficients non-nuls peut être petit. La présente invention vise à réduire la durée d'exploration des blocs de coefficients pour constituer une chaîne de coefficients non-nuls représentatifs d'une image. A cette fin, un procédé cyclique de chaînage tel que défini dans l'entrée en matière, est caractérisé pour un cycle donné du procédé par - la sélection successive des blocs dans chacun desquels un coefficient non-nul a été transmis pendant le cycle précédant ledit cycle donné, et - pour chaque bloc sélectionné, l'une des alternatives suivantes - la transmission d'un coefficient dudit bloc non-nul et non transmis pendant les cycles précédant ledit cycle donné, et - la suppression dudit bloc dans les cycles suivant ledit cycle donné lorsque tous les coefficients non-nuls dans ledit bloc ont été transmis pendant lesdits cycles précédents. Ainsi, selon l'invention, l'exploration d'un bloc de coefficients est arrêtée dès que le dernier coefficient non-nul dans ce bloc est transmis ; le bloc est alors supprimé dans les cycles suivants ce qui réduit considérablement et progressivement les durées des cycles suivants par rapport à la technique antérieure. Corollairement, la durée de la transmission de l'image ainsi comprimée est écourtée et l'occupation de cette image en mémoire est notablement diminuée. Afin de réduire encore la durée du chaînage, préalablement au chaînage, c'est-à-dire lors de l'étape de seuillage, les coefficients dans chaque bloc sont explorés suivant un balayage en zig-zag selon la Fig. 2 de l'article précité, et sont donc transmis en fonction de ce balayage. Dans ce cas, dans les premières passes, c'est-à-dire dans les premières sélections des blocs, les coefficients non nuls les plus significatifs sont explorés et transmis, et lorsqu'un bloc contient que très peu de coefficients, celui-ci est très rapidement éliminé des cycles suivants. Selon une autre caractéristique de l'invention, à un bloc de rang donné i sont associés un pointeur PPC[i] pour le bloc précédant audit bloc donné, et un pointeur PSV[i] pour le bloc suivant ledit bloc donné, et en ce que lorsque ledit bloc de rang donné i est à supprimer au cours d'un cycle donné, les opérations logiques suivantes sont effectuées - SUIVANT = PSV[i] - PRECEDENT = PPC[i] - PPC[SUIVANT] = PRECEDENT - PSV[PRECEDENT] = SUIVANT Un dispositif pour la mise en oeuvre du procédé selon l'invention comprend des moyens de mémorisation des blocs de coefficients, et des moyens pour lire successivement un coefficient dans des blocs à chaque cycle.Ce dispositif est caractérisé en ce qu'il comprend des moyens de traitement des blocs mémorisés pour signaler que tous les coefficients non-nuls dans un bloc ont été transmis, et que ledit bloc est à supprimer, et en ce que les moyens pour lire comprennent - une première mémoire comprenant des pointeurs de bloc précédant respectivement associés aux blocs de coefficients, - une seconde mémoire contenant des pointeurs de bloc suivant respectivement associés aux blocs de coefficients, - un premier registre recevant un pointeur de bloc précédant lu dans la première mémoire en réponse à un bloc à supprimer signalé par les moyens de traitement pour appliquer ledit pointeur de bloc précédant en tant que données à écrire dans la première mémoire et en tant qu'adresse d'écriture pour la seconde mémoire, et - un second registre recevant le pointeur de bloc suivant lu dans la seconde mémoire en réponse audit bloc à supprimer pour appliquer ledit pointeur de bloc suivant en tant que données à écrire dans la seconde mémoire et en tant qu'adresse d'écriture pour la première mémoire. D'autres avantages et caractéristiques de la présente invention apparaîtront plus clairement à la lecture de la description suivante, en référence au dessins annexés correspondants dans lesquels - la Fig. 1, déjà commentée, illustre schématiquement une méthode de codage connue d'image fixe ; - la Fig. 2 montre schématiquement les états de pointeurs de blocs précédant et de blocs suivant respectivement associé à 3 blocs se succédant lors de l'initialisation du chaînage, et avant et après la suppression d'un bloc de coefficients, respectivement ; et - la Fig. 3 est un bloc de diagramme schématique d' un dispositif de chaînage de blocs de coefficients. A titre d'exemple, dans la suite, on supposera que le dispositif de chaînage gère I = 6480 blocs de coefficients B[0] à B[I-1].A chaque bloc B[i] sont associés un pointeur de bloc précédent PPC[i] et un pointeur de bloc suivant PSV[i]. Selon la Fig. 3, le dispositif de chaînage de blocs de coefficients comprend essentiellement un processeur de commande et de calcul 10, un codeur-décodeur 11 sous la forme d'un circuit logique programmable, une base de temps 12 et deux mémoires RAM 13P et 13S, ainsi que quatre multiplexeurs, quatre registres et trois compteurs programmables mentionnés dans la suite. Le codeur-décodeur 11 contient notamment I ensembles des cellules de mémoire RAM respectivement associés aux I blocs de coefficients. Chaque bloc contient des coefficients AD et AC1 à AC63 qui ont été écrits sous la commande du processeur 10 après la quatrième étape de comparaison à seuils et de quantification illustrée à la Fig. 1. Comme on le verra ci-après, chaque fois qu'un bloc de coefficients est traité dans le codeur-décodeur 11 sous la commande du processeur 10, la lecture de ce bloc s'effectue à partir du dernier coefficient non-nul lu dans ce bloc, de préférence selon un balayage en zig-zag, et en commençant par le coefficient ayant la valeur la plus élevée, puis selon l'ordre des valeurs décroissantes de ces coefficients.Lorsque, au cours d'un balayage d'un bloc, le codeur-décodeur 11 constate que tous les coefficients restants à partir du dernier coefficient non-nul lu sont nul, le codeur-décodeur 11 produit une impulsion de "bloc à supprimer" BS vers un décompteur 110 dont le compte NCH indique le nombre de blocs contenant encore des coefficients non-nuls et non encore lus par le processeur 10. La base de temps 12 gère, sous la commande du processeur 10, essentiellement l'initialisation du dispositif de chaînage et la modification de pointeurs PPC et PSV lors de la suppression d'un bloc dans la chaîne. Pour ce faire, la base de temps 12 produit divers signaux d'horloge SEL, T2 et Tl qui sont transmis à des entrées de sélection de multiplexeurs d'adresses 14P et 14S et de multiplexeurs de données 15P et 15S, et à des entrées de chargement de registres de pointeur 16P et 16S et de registres de numéro de bloc 17 et 18, respectivement. En outre, la base de temps 12 fournit des impulsions d'horloge IM à des compteurs programmables l9D, 19P et 19S. Comme cela apparaît à la Fig. 3, à chaque mémoire 13P, 13S est associé le multiplexeur de trois adresses 14P, 14S, le multiplexeur de deux bus de données 15P, 15S, et le registre de sortie de pointeur 16P, 16S. Des premiers ports d'entrée des multiplexeurs 14P et 14S sont reliés respectivement aux sorties des compteurs 19S et 19P. Le bus de sortie du troisième compteur 19D est relié à des premiers ports d'entrée des multiplexeurs 15P et 15S. Les registres 16S et 17 ont leurs ports d'entrée relié au port de sortie de données de la mémoire 13S. Le registre 17 qui mémorise temporairement le pointeur de bloc activé de chaîne PCH, c'est-à-dire le pointeur de chaîne courant, a son port de sortie relié à des seconds ports d'entrée des multiplexeurs d'adresses 14P et 14S. Les sorties du registre de pointeur suivant 16S associé à la seconde mémoire 13S sont reliées au second port d'entrée du multiplexeur de données 15S associe à cette seconde mémoire, et au troisième port d'entrée du multiplexeur d'adresses 14P associé à la première mémoire 13P.De même, le registre de pointeur de bloc précédent 16P relié au port de sortie de données de la première mémoire 13P a ses sorties qui sont reliées au second port d'entrée du multiplexeur de données 15P associé à la première mémoire 13P et au troisième port d'entrée du multiplexeur d'adresse 14S associé à la seconde mémoire 13S. Le port de sortie du registre 17 est relié à un port d'entrée de données du codeur-décodeur 11 à travers le registre de numéro de bloc 18. Les différentes liaisons précitées entre multiplexeurs, compteurs, mémoires et registres sont réalisées par des bus à 13 fils parallèles pour I = 6480 blocs de coefficients d'image à gérer. Lors de l'initialisation du chaînage, la base de temps 12 programme tout d'abord les trois compteurs 19D, l9P et 19S respectivement à 0, 1 et 1-1 = 6479, via les liaisons INIT. I1 est à noter que ces trois compteurs sont des compteurs modulo I-1= 6479. Puis la base de temps 12 sélectionne les premiers ports d'entrée dans les multiplexeurs 14P, 14S, 15P et 15S via les liaisons SEL. I = 6480 impulsions IM sont produites par la base de temps 12 et appliquées aux entrées de comptage des trois compteurs 19D, l9P et 19S, et simultanément les mémoires 13P et 13S sont commandées en écriture E par la base de temps. Dans ces conditions, pour un indice i transmis en code binaire par le compteur 19D, cet indice i est écrit en tant que donnée dans les deux mémoires 13P et 13S respectivement à des adresses i+l et i-l fournies par les compteurs 16P et 16S. En particulier, en réponse à la première impulsion IM[0] produite par la base de temps 12, l'indice 0 est écrit dans les mémoires 13P et 13S respectivement aux adresses 1 et 1-1 = 6479, et en réponse à la dernière impulsion produite IM[I-1], l'indice 1-1 est écrit dans les mémoires 13P et 13S aux adresses 0 et I-2. Ainsi, comme montré dans la colonne de gauche de la Fig. 2, à chaque bloc B[i] est associé un pointeur de bloc précédent PPC[i] qui initialement est égal à i-l et qui d'une manière générale peut être désigné par a, et un pointeur de bloc suivant PSV[i] qui initialement est égal à i+l et qui d'une manière générale peut être désigné par p, les indices entiers a et p étant compris entre 0 et I-1. Selon d'autres variantes, deux des trois compteurs 19D, 19P et 19S sont remplacés par des additionneurs et par des soustracteurs modulo 1-1 ; par exemple les compteurs 19P et 19S sont remplacés par un incrémenteur d'une unité modulo 1-1 et un décrémenteur d'une unité modulo 1-1 reliés aux sorties du compteur 16D. Lors de l'initialisation, la base de temps met également à zéro le contenu des registres 16P, 16S, 17 et 18, via une liaison RS. Le décompteur 110 est initialisé à I-1= 6479 par le processeur 10. Dès que l'enregistrement de tous les coefficients quantifiés est terminée dans le codeur-décodeur 11, la procédure de chaînage de coefficients débute après la phase d'initialisation décrite ci-dessus. Le chaînage consiste à chaque cycle à sonder successivement chacun des blocs mémorisés dans le codeur-décodeur 11 dans la mesure où le bloc contient encore des coefficients non-nuls encore à lire et à transmettre. A chaque cycle, au plus NCH coefficients non-nuls respectivement lus dans les blocs de coefficients contenant encore des coefficients non-nuls sont lus et transmis vers le réseau de télécommunications à travers un codeur de type HUFFMAN CH. Le nombre NCH diminuera de 1-1 à O et décroît d'une unité en réponse à un bloc dont tous les coefficients non-nuls ont été transmis. Pendant un cycle, lors du traitement d'un bloc B[i] contenant encore des coefficients non-nuls à lire, la base de temps 12 produit un signal de transfert T1 pour les registres 17 et 18 afin que le registre 18 sélectionne le bloc B[i] traité dans le codeur-décodeur 11, et le registre 17 applique l'adresse de lecture i à la mémoire 138 pour que celle-ci transmette l'indice i+l lors du premier cycle et généralement l'indice PSV[i]=p pour le traitement du bloc suivant. L'adresse i peut être transmise avec le coefficient non-nul lu au codeur CH. Si lors du traitement d'un bloc B[i], le codeur-décodeur 11 signale au processeur 10 que tous les coefficients non-nuls dans ce bloc ont été lus et transmis et donc que ce bloc ne contient plus que des coefficients nuls, le processeur 10 décide de supprimer ce bloc, et déclenche une procédure de suppression de bloc par l'intermédiaire de la base de temps 12, afin d'éviter toute lecture inutile de ce bloc B[i] au cours des cycles suivants. Pendant une première phase T1 de cette procédure de suppression, les seconds ports d'entrée des multiplexeurs 14P et 14S sont sélectionnés et les deux mémoires 13P et 138 sont lues à l'adresse i contenue dans le registre 18 et présente aux sorties du registre 17, afin de charger les pointeurs précédent et suivant a et b relatifs au bloc B[i], dans les registres 16P et 16S respectivement. Puis la base de temps 12 commande le transfert T2 du pointeur a dans le registre 16P vers le multiplexeur de données 15P de la mémoire 13P et le multiplexeur d'adresses 14S de la mémoire 13S. Simultanémment l'autre pointeur p est transféré du registre 16S vers le multiplexeur d'adresses 14P de la mémoire 13P et le multiplexeur de données 15S de la mémoire 13S. De cette manière, dans la mémoire 13P, le pointeur a est écrit à l'adresse p et devient le pointeur de bloc précédent PPC[p] pour le bloc B[p] suivant le bloc B[i], et dans la mémoire 13S, le pointeur p est écrit à l'adresse a et devient le pointeur de bloc suivant PPS[a] pour le bloc B[a] précédant le bloc B[i].Ces deux transferts de pointeurs sont illustrés à droite dans la Fig. 2, en supposant qu a un instant donné, pour lequel le codeur-décodeur 11 constate que le bloc B[i] ne possède plus de coefficient non-nul à lire, que le bloc B[a] est précédé du bloc B[h] et suivi du bloc B[i], que le bloc B[i] est précédé du bloc B[a] est suivi du bloc B[p], et que le bloc B[p] est précédé du bloc B[i] est suivi du bloc B[z]. Ces opérations de transfert de pointeur peuvent être écrites sous la forme des relations logiques suivantes - SUIVANT = PSV[i] - PRECEDENT = PPC[i] - PPC[SUIVANT] = PRECEDENT - PSV[PRECEDENT] = SUIVANT Simultanément aux transferts de pointeurs, le décompteur 110 est décrémenté d'une unité par le codeur-décodeur 11, en réponse à un signal BS = "1", soit NCH=NCH-1. Puis le pointeur de chaîne PCH dans le registre 17 devient égal à p pour le cycle suivant. I1 apparaît ainsi, que pour un bloc B[i], les pointeurs de bloc précédant et suivant PPC et PSV sont respectivement égaux à i-l et i+l au début du chaînage, et que ces pointeurs PPC et PSV sont égaux à i si le bloc B[iJ reste seul avec des coefficients non-nuls à la fin du chaînage. REVENDICATIONS 1. Procédé cyclique pour chaîner des coefficient (DC, AC1 à AC63) qui sont regroupés en quantité égale dans des blocs (B[O] à B[I-11) et dont certains d'entre eux sont nuls, caractérisé pour un cycle donné du procédé, par - la sélection successive des blocs dans chacun desquels un coefficient non-nul a été transmis pendant le cycle précédant ledit cycle donné, et pour chaque bloc sélectionné, l'une des alternatives suivantes - la transmission d'un coefficient dudit bloc non-nul et non transmis pendant les cycles précédant ledit cycle donné, et - la suppression dudit bloc dans les cycles suivant ledit cycle donné, lorsque tous les coefficients non-nuls dans ledit bloc ont été transmis pendant lesdits cycles précédents. 2. Procédé conforme à la revendication 1, caractérisé en ce qu'à un bloc de rang donné i sont associés un pointeur PPC[i] pour le bloc précédant ledit bloc donné, et un pointeur PSV[i] pour le bloc suivant ledit bloc donné, et en ce que, lorsque ledit bloc de rang donné i est à supprimer au cours d'un cycle donné, les opérations logiques suivantes sont effectuées.: - SUIVANT = PSV[i] - PRECEDENT = PPC[i] - PPC[SUIVANT] = PRECEDENT - PSV[PRECEDENT] = SUIVANT et la décrémentation d'une unité d'un nombre de blocs (NCH) contenant encore des coefficients non-nuls au cours du cycle précédant ledit cycle donné, ledit nombre (NCH) étant égal au nombre total de blocs au début du procédé, et à zéro dès que tous les coefficients non nuls dans les blocs sont transmis. 3. Procédé conforme à la revendication 1 ou 2, caractérisée en ce que les coefficients sont fournis par une transformation en cosinus discrète (TCD) d'une image numérisée, de préférence après seuillage et quantification. 4. Dispositif pour la mise en oeuvre du procédé conforme à l'une quelconque des revendications 1 à 3, comprenant des moyens de mémorisation des blocs de coefficients (11), et des moyens (13S, 13P) pour lire successivement des coefficients dans les blocs à chaque cycle, caractérisé en ce qu'il comprend des moyens (10, 11) de traitement des blocs mémorisés pour signaler que tous les coefficients non-nuls dans un bloc ont été transmis, et que ledit bloc est à supprimer, et en ce que les moyens pour lire comprennent - une première mémoire (13P) contenant des pointeurs de bloc précédant (PPC) respectivement associés aux blocs de coefficients, une seconde mémoire (13S) contenant des pointeurs de blocs suivant (PSV) respectivement associés aux blocs de coefficients, - un premier registre (16P) recevant un pointeur de bloc précédant (a) lu dans la première mémoire (13P) en réponse à un bloc (B[i]) à supprimer signalé par les moyens de traitement (10, 11) pour appliquer ledit pointeur de bloc précédant (p) en tant que données à écrire dans la première mémoire (13P) et en tant qu'adresse d'écriture pour la seconde mémoire (13S), et - un second registre (16S) recevant le pointeur de bloc suivant (p) lu dans la seconde mémoire (13S) en réponse audit bloc (B[i]) à supprimer pour appliquer ledit pointeur de bloc suivant (p) en tant que données à écrire dans la seconde mémoire (13S) et en tant qu'adresse d'écriture pour la première mémoire (13P).