FR 3024933 A1 20160219 FR 1457768 A 20140812 1 PROCÉDÉ DE CODAGE ET DE DÉCODAGE D'IMAGES, DISPOSITIF DE CODAGE ET DE DÉCODAGE D'IMAGES ET PROGRAMMES D'ORDINATEUR CORRESPONDANTS Domaine de l'invention La présente invention se rapporte de manière générale au domaine du traitement d'images, et plus précisément au codage et au décodage d'images numériques et de séquences d'images numériques. Le codage/décodage d'images numériques s'applique notamment à des images issues d'au moins une séquence vidéo comprenant : - des images issues d'une même caméra et se succédant temporellement (codage/décodage de type 2D), - des images issues de différentes caméras orientées selon des vues différentes (codage/décodage de type 3D), - des composantes de texture et de profondeur correspondantes (codage/décodage de type 3D), - etc... La présente invention s'applique de manière similaire au codage/décodage d'images de type 2D ou 3D. L'invention peut notamment, mais non exclusivement, s'appliquer au codage vidéo mis en oeuvre dans les codeurs vidéo actuels AVC et HEVC et leurs extensions (MVC, 3D-AVC, MV-HEVC, 3D-HEVC, etc), et au décodage correspondant. Art antérieur Les codeurs vidéo actuels (MPEG, H.264, HEVC, ...) utilisent une représentation par blocs de la séquence vidéo. Les images sont découpées en blocs, lesquels sont susceptibles d'être redécoupés de façon récursive. Puis chaque bloc est codé par prédiction intra-images ou inter-images. Ainsi, certaines images sont codées par prédiction spatiale (prédiction intra), d'autres images sont également codées par prédiction temporelle (prédiction inter) par rapport à une ou plusieurs images de référence codées-décodées, à l'aide d'une compensation en mouvement connue par l'homme de l'art. Pour chaque bloc est codé un bloc résidu, encore appelé résidu de prédiction, correspondant au bloc original diminué d'une prédiction. Les blocs résidus sont 3024933 2 transformés à l'aide d'une opération mathématique de transformation, puis quantifiés à l'aide d'une opération mathématique de quantification par exemple de type scalaire. Des coefficients sont obtenus à l'issue de l'étape de quantification. Ils sont ensuite parcourus dans un ordre de lecture qui dépend du mode de codage qui a été 5 choisi. Dans la norme HEVC, par exemple, l'ordre de lecture est dépendant de la prédiction réalisée et peut être effectué dans l'ordre « horizontal », « vertical » ou « diagonal ». A l'issue du parcours précité, une liste monodimensionnelle de coefficients est obtenue. Les coefficients de cette liste sont alors codés sous forme de bits par un 10 codage entropique dont le but est de coder les coefficients sans perte. Les bits obtenus après codage entropique sont inscrits dans un signal flux de données qui est destiné à être transmis au décodeur. De façon connue en soi, un tel signal comprend : - les coefficients quantifiés contenus dans la liste précitée, 15 - des informations représentatives du mode de codage utilisé, en particulier: - le mode de prédiction (prédiction intra, prédiction inter, prédiction par défaut réalisant une prédiction pour laquelle aucune information n'est transmise au décodeur 20 (« en anglais « skip »)) ; - des informations précisant le type de prédiction (orientation, image de référence, ...) ; - le type de découpage du bloc ; - le type de transformée, par exemple DOT 4x4, DOT 8x8, 25 etc... - les informations de mouvement si nécessaire ; - etc. Une fois que le flux a été reçu par le décodeur, le décodage est fait image par image, et pour chaque image, bloc par bloc. Pour chaque bloc, les éléments 30 correspondants du flux sont lus. La quantification inverse et la transformation inverse des coefficients des blocs sont effectuées pour produire le résidu de prédiction décodé. Puis, la prédiction du bloc est calculée et le bloc est reconstruit en ajoutant la prédiction au résidu de prédiction décodé. 3024933 3 La technique de codage/décodage classique qui vient d'être décrite permet certes des améliorations des performances de codage. Selon le contexte vidéo, elle permet notamment : - une amélioration de la qualité des images pour un débit donné du 5 réseau utilisé pour transmettre les images, - un réduction du débit de transmission des images pour un critère de qualité d'images préalablement fixé. Toutefois, de telles performances de codage ne sont actuellement pas optimisées et ont vocation à encore être améliorées, en particulier du point de vue de 10 la minimisation du coût débit/distorsion ou bien du choix du meilleur compromis efficacité/complexité, qui sont des critères bien connus de l'homme du métier. En particulier, une telle optimisation pourrait concerner l'opération de transformation mathématique précitée. Il s'agit classiquement d'une transformation linéaire qui, lorsqu'elle s'applique à un bloc résidu contenant un nombre déterminé 15 de K pixels (1.1), permet d'obtenir un ensemble de K coefficients réels. Dans le domaine du codage vidéo, les transformées en cosinus discrète, DOT (abréviation anglaise de « Discrete Cosine Transform »), ou les transformées en sinus discrète, DST (abréviation anglaise de « Discrete Sine Transform »), sont généralement privilégiées, notamment pour les raisons suivantes : 20 - ce sont des transformées bloc et il est ainsi facile de manipuler les blocs indépendamment les uns des autres, - elles sont efficaces pour compacter l'information dans le domaine fréquentiel, là où l'opération de réduction de débit opère. Toutefois, avec de telles transformées, la complexité algorithmique du codeur 25 vidéo augmente de façon notable dans le cas notamment où l'image à coder est découpée en blocs de grande taille, par exemple en blocs de taille 16x16 ou 32x32. Par exemple, pour un bloc à coder de 16x16 pixels, un nombre K=256 pixels est destiné à subir une transformation du type précité. De façon classique, une telle transformation consiste à appliquer une première 30 opération de transformation A à un bloc résidu x de K pixels organisés sous forme d'une matrice 16x16, où A est une matrice de données ayant une taille identique à celle du bloc residu x, c'est-à-dire 16x16 dans l'exemple présenté. A l'issue de cette première transformation est obtenu un premier bloc transformé A.x. Une opération de transposition t est ensuite appliquée sur le bloc transformé 3024933 4 A.x. A l'issue de cette transposition est obtenu un bloc transposé (A.x)t. Enfin, une deuxième opération de transformation A est appliquée sur le bloc transposé (A.x)t. A l'issue de cette deuxième transformation est obtenu un deuxième bloc transformé X de K=16x16 pixels, tel que : 5 X = A - (Ax)t Si on considère uniquement un bloc résidu x se présentant sous la forme d'une matrice colonne de 16 pixels, les algorithmes utilisés au codeur effectuent déjà 10 de nombreuses opérations, telles que 2x81 additions et 2x33 multiplications, pour obtenir un bloc transformé X sous la forme d'une matrice colonne de 16 pixels. Ainsi, il apparait clairement que dans le cas du bloc résidu de 16x16 pixels de l'exemple présenté, les algorithmes utilisés au codeur doivent effectuer 16 fois le nombre d'opérations précitées, soit 16x2x81 additions et 16x2x33 multiplications, ce qui 15 revient à effectuer au total 2592 additions et 1056 multiplications pour obtenir les K=256 coefficients transformés pour un bloc de taille 16x16. Le tableau suivant résume le nombre d'opérations à effectuer suivant la taille du bloc de pixels courant à coder considéré, lorsqu'une transformation de type DOT est appliquée : DOT 2D Additions Multiplications 4x4 72 40 8x8 464 208 16x16 2592 1056 32x32 13376 5184 20 Il se déduit du tableau ci-dessus, que, notamment pour les blocs de grande taille, 16x16 et 32x32, le nombre d'opérations devient particulièrement important. En outre, dans le cas où la transformée est appliquée à des blocs de taille 16x16 ou 32x32, il s'ensuit l'obtention d'un grand nombre de coefficients, 25 respectivement 256 ou 1024, qui sont par la suite quantifiés, puis codés par codage entropique. Dans la norme HEVC par exemple, le codage entropique (par exemple de type codage arithmétique ou codage de Huffman) est effectué de la façon suivante : - une information est codée entropiquement pour indiquer 30 l'emplacement du dernier coefficient non nul de l'ensemble de coefficients quantifiés, - pour chaque coefficient situé avant le dernier coefficient non nul, une 3024933 5 information est codée entropiquement pour indiquer si le coefficient est nul ou pas, - pour chaque coefficient non nul indiqué précédemment, une information est codée entropiquement pour indiquer si le coefficient est égal à un ou pas, 5 - pour chaque coefficient non nul et non égal à un situé avant le dernier coefficient non nul, une information d'amplitude (valeur absolue du coefficient diminuée de deux) est codée entropiquement, - pour chaque coefficient non nul, le signe qui lui est affecté est codé par un '0' (pour le signe +) ou un '1' (pour le signe -). 10 Ainsi, plus le nombre de coefficients transformés est élevé, plus les opérations suivantes de quantification et de codage entropique sont complexes à effectuer. Il convient de noter également que le très grand nombre de coefficients obtenus à la suite de telles transformées est très coûteux à signaler au décodeur et entraîne une réduction importante du gain en débit de transmission des données 15 codées entre le codeur et le décodeur. En ce qui concerne le décodage d'un bloc courant, par exemple un bloc courant à décoder de 16x16 pixels, les 256 coefficients obtenus à l'issue du codage entropique précité subissent une transformation similaire à celle effectué au codage. Par conséquent, au décodeur, la complexité des algorithmes nécessaires à la 20 transformation des coefficients obtenus à l'issue du codage entropique est la même que les algoritmes utrilisés au codeur pour effectuer la transformation du bloc résiduel courant. Objet et résumé de l'invention 25 Un des buts de l'invention est de remédier à des inconvénients de l'état de la technique précité. A cet effet, un objet de la présente invention concerne un procédé de codage d'au moins une image découpée en blocs, comprenant, pour un bloc courant de K pixels à coder, avec I.K1, les étapes consistant à: 30 - prédire le bloc courant à l'aide d'au moins un bloc prédicteur de K pixels, - déterminer un bloc résidu de K pixels représentatif de la différence entre le bloc prédicteur et le bloc courant. 3024933 6 Le procédé de codage selon l'invention est remarquable en ce qu'il comprend les étapes consistant à : - à partir d'un groupe de blocs de pixels contenant un nombre Mi de blocs de K pixels représentatifs chacun d'une texture prédéterminée, avec et 5 1C/Ii REVENDICATIONS1. Procédé de codage d'au moins une image (ICi) découpée en blocs, comprenant, pour un bloc courant (Bu) de K pixels à coder, avec les étapes consistant à : - prédire (03) le bloc courant à l'aide d'au moins un bloc prédicteur (BPupt) de K pixels, - déterminer (04) un bloc résidu de K pixels représentatif de la différence entre le bloc prédicteur et le bloc courant, ledit procédé de codage étant caractérisé en ce qu'il comprend les étapes consistant a: - à partir d'un groupe (Gi) de blocs de pixels contenant un nombre Mi de blocs de K pixels représentatifs chacun d'une texture prédéterminée, avec et 1C/Ii 2. Procédé de codage selon la revendication 1, dans lequel le groupe (Gi) de blocs de pixels contenant un nombre Mi de blocs de K pixels représentatifs chacun d'une texture prédéterminée appartient à L groupes (G1, G2,..., Gi,..., GL) de blocs de pixels contenant respectivement un nombre M13 M23...3 Mi,..., ML de blocs de K pixels représentatifs chacun d'une texture prédéterminée, avec ledit procédé de codage comprenant, préalablement à l'étape de codage des Mi données de l'ensemble de données déterminé, les étapes consistant à: - à partir des L groupes (G1, G2,..., Gi,..., GL) de blocs de pixels contenant respectivement un nombre M1, M2,..., Mi,..., ML de blocs de K pixels représentatifs chacun d'une texture prédéterminée, déterminer (051) respectivement L ensembles de M1, M2,..., Mi,..., ML données par calcul du produit pixel à pixel du bloc résidu déterminé par chacun des M1, M2,..., Mi,..., ML blocs de K pixels représentatifs d'une texture prédéterminée, 3024933 33 - sélectionner (612) ledit ensemble de Mi données parmi les L ensembles de M1, M2,-, Mi, - ML données, selon un critère de performance de codage prédéterminé. 5 3. Procédé de codage selon la revendication 1 ou la revendication 2, dans lequel l'ensemble de Mi données, déterminé ou bien sélectionné selon un critère (RD) de performance de codage prédéterminé, contient une seule donnée. 4. Procédé de codage selon la revendication 2 ou la revendication 3, dans 10 lequel le critère de performance de codage prédéterminé est la minimisation du coût débit-distorsion du bloc courant à coder. 5. Procédé de codage selon l'une quelconque des revendications 1 à 4, comprenant en outre une étape d'élaboration d'un signal (F) de données contenant : 15 - une information d'identification du bloc prédicteur, - les données codées de l'ensemble de Mi données qui a été obtenu par calcul du produit pixel à pixel du bloc résidu déterminé par chacun des Mi blocs de K pixels représentatifs d'une texture prédéterminée, - une information d'identification du groupe contenant les blocs de K 20 pixels à partir desquels l'ensemble de Mi données sélectionné a été déterminé. 6. Dispositif (CO) de codage d'au moins une image (ICi) découpée en blocs, comprenant, pour un bloc courant (Bu) de K pixels à coder, avec des moyens (PRED CO) de prédiction pour prédire le bloc courant à l'aide d'au moins un bloc 25 prédicteur (BPopt) de K pixels et pour déterminer un bloc résidu de K pixels représentatif de la différence entre le bloc prédicteur et le bloc courant, ledit dispositif de codage étant caractérisé en ce qu'il comprend : - des moyens (CAL CO) de calcul pour, à partir d'un groupe (Gi) de blocs de pixels contenant un nombre Mi de blocs de K pixels représentatifs chacun 30 d'une texture prédéterminée, avec et 11\ili 7. Programme d'ordinateur comportant des instructions de code de programme pour l'exécution des étapes du procédé de codage selon l'une quelconque des revendications 1 à 5, lorsque ledit programme est exécuté sur un 5 ordinateur. 8. Procédé de décodage d'un signal de données (F) représentatif d'au moins une image (ICi) découpée en blocs, comprenant, pour un bloc courant (Bu) de K pixels à reconstruire, avec une étape consistant à déterminer au moins un bloc 10 prédicteur (BPupt) du bloc courant à reconstruire, ledit bloc prédicteur contenant K pixels, ledit procédé de décodage étant caractérisé en ce qu'il comprend les étapes consistant à : - lire (D3), dans ledit signal de données (F), un ensemble de Mi 9. Procédé de décodage selon la revendication 8, dans lequel l'ensemble de Mi données lu contient une seule donnée. 30 10. Procédé de décodage selon la revendication 8 ou la revendication 9, dans lequel le groupe (Gi) de blocs de pixels contenant un nombre donné Mi de blocs de K pixels représentatifs chacun d'une texture prédéterminée appartient à L groupes (G1, G2,.. .,G,..., GO de blocs de pixels contenant respectivement un nombre M1, 3024933 M2,.. .,M,..., ML de blocs de K pixels représentatifs chacun d'une texture prédéterminée, avec 11_. 11. Procédé de décodage selon la revendication 10, dans lequel : 5 - un groupe parmi les L groupes G1, GL de blocs de pixels contient K blocs de texture prédéterminée, - les L-1 groupes restants de blocs de pixels contiennent chacun un unique bloc de texture prédéterminée. 10 12. Procédé de décodage selon l'une quelconque des revendications 10 à 11, comprenant en outre les étapes consistant à : - lire (D310) dans le signal de données la valeur de la polarité du signe d'au moins une donnée dudit ensemble de Mi données lu, 15 - en fonction de la valeur de la polarité du signe lue et à partir de l'information d'identification de groupe de blocs de pixels lue dans le signal, identifier (D510) le bloc de K pixels représentatif d'une texture prédéterminée soit dans un premier ensemble qui contient une partie des L groupes de blocs de K pixels représentatifs chacun d'une texture prédéterminée, soit dans un deuxième ensemble 20 qui contient l'autre partie des L groupes de blocs de K pixels représentatifs chacun d'une texture prédéterminée. 13. Dispositif (DO) de décodage d'un signal d'un signal de données (F) représentatif d'au moins une image (ICi) découpée en blocs, comprenant des 25 moyens (MDI DO) de détermination pour déterminer, pour un bloc courant (Bu) de K pixels à reconstruire, avec au moins un bloc prédicteur (BPopt) du bloc courant à reconstruire, ledit bloc prédicteur contenant K pixels, ledit dispositif de décodage étant caractérisé en ce qu'il comprend : - des moyens (ML DO) de lecture pour lire, dans ledit signal de 30 données, un ensemble de Mi 14. Programme d'ordinateur comportant des instructions pour mettre en oeuvre le procédé de décodage selon l'une quelconque des revendications 8 à 12, lorsque ledit procédé de décodage est exécuté sur un ordinateur. 15 20 25 30