ES2893815T3 - Procedimiento y aparato para codificar o descodificar una paleta en el modo de codificación de paleta - Google Patents

Procedimiento y aparato para codificar o descodificar una paleta en el modo de codificación de paleta Download PDF

Info

Publication number
ES2893815T3
ES2893815T3 ES18185886T ES18185886T ES2893815T3 ES 2893815 T3 ES2893815 T3 ES 2893815T3 ES 18185886 T ES18185886 T ES 18185886T ES 18185886 T ES18185886 T ES 18185886T ES 2893815 T3 ES2893815 T3 ES 2893815T3
Authority
ES
Spain
Prior art keywords
palette
predictor
current
block
inputs
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
ES18185886T
Other languages
English (en)
Inventor
Guillaume Laroche
Christophe Gisquet
Patrice Onno
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Canon Inc
Original Assignee
Canon Inc
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Priority claimed from GBGB1321850.8A external-priority patent/GB201321850D0/en
Priority claimed from GB1403823.6A external-priority patent/GB2523992B/en
Application filed by Canon Inc filed Critical Canon Inc
Application granted granted Critical
Publication of ES2893815T3 publication Critical patent/ES2893815T3/es
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/46Embedding additional information in the video signal during the compression process
    • H04N19/463Embedding additional information in the video signal during the compression process by compressing encoding parameters before transmission
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/134Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the element, parameter or criterion affecting or controlling the adaptive coding
    • H04N19/157Assigned coding mode, i.e. the coding mode being predefined or preselected to be further used for selection of another element or parameter
    • H04N19/159Prediction type, e.g. intra-frame, inter-frame or bidirectional frame prediction
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/169Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding
    • H04N19/17Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding the unit being an image region, e.g. an object
    • H04N19/176Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding the unit being an image region, e.g. an object the region being a block, e.g. a macroblock
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/169Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding
    • H04N19/184Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding the unit being bits, e.g. of the compressed video stream
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/169Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding
    • H04N19/186Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding the unit being a colour or a chrominance component
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/50Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using predictive coding
    • H04N19/593Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using predictive coding involving spatial prediction techniques
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/70Methods or arrangements for coding, decoding, compressing or decompressing digital video signals characterised by syntax aspects related to video coding, e.g. related to compression standards
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/90Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using coding techniques not provided for in groups H04N19/10-H04N19/85, e.g. fractals
    • H04N19/94Vector quantisation

Abstract

Procedimiento para procesar un bloque actual de píxeles (CU3) de una imagen utilizando un modo de codificación de paleta, utilizando el modo de codificación de paleta una paleta actual que comprende un conjunto de entradas que asocian índices de entrada respectivos con valores de píxel correspondientes, comprendiendo el procedimiento una etapa de predecir la paleta actual utilizando un predictor (2505) de paleta construido a partir de entradas de dos o más paletas (2500, 2501), en el que: una primera paleta (2501) de las dos o más paletas se utiliza para procesar un bloque de píxeles inmediatamente anterior al actual bloque de la imagen, y la construcción del predictor (2505) de paleta comprende: tomar todas las entradas de la primera paleta (2501) como entradas del predictor (2505) de paleta; determinar si el tamaño del predictor (2505) de paleta es menor que el límite de tamaño máximo del predictor; determinar si una o varias entradas de una segunda paleta (2500) se utilizan para predecir la primera paleta (2501) utilizando uno o varios indicadores correspondientes, donde cada indicador está representado por un bit, e indica si una entrada correspondiente de la segunda paleta (2500) de las dos o más paletas va, o no, a ser utilizada para predecir la primera paleta (2501); mientras el tamaño del predictor (2505) de paleta sea menor que el límite de tamaño máximo del predictor: para cada una de dichas una o varias entradas de la segunda paleta (2500), si el indicador correspondiente indica que la entrada de dicha segunda paleta no se utiliza para predecir la primera paleta (2501), tomar dicha entrada como una entrada del predictor (2505) de paleta; viniendo la entrada de la segunda paleta (2500) después de las entradas de la primera paleta (2501) en la paleta construida.

Description

DESCRIPCIÓN
Procedimiento y aparato para codificar o descodificar una paleta en el modo de codificación de paleta SECTOR DE LA INVENCIÓN
La presente invención se refiere a un procedimiento y a un dispositivo para procesar, por ejemplo, codificar o descodificar, un bloque actual de píxeles de una imagen utilizando un modo de predicción de paleta. En concreto, se refiere a la codificación del modo de paleta tal como se introdujo en la Extensión de rango de HEVC (HEVC Range Extension).
ESTADO DE LA TÉCNICA ANTERIOR
Esta aplica más concretamente a un modo de codificación en el que un bloque actual de píxeles es codificado de manera predictiva basándose en un bloque predictor codificado o construido a partir de una denominada paleta. Una paleta, en este documento, se define como una tabla de búsqueda que tiene entradas, o “elementos”, que asocian un índice con un valor de un píxel. Habitualmente, pero no necesariamente, el valor de un píxel está constituido por el valor de cada componente de color asociado con el píxel, dando lugar a una paleta de colores. Sin embargo, el valor de un píxel puede estar compuesto por un solo componente de píxel, dando lugar a una paleta monocromática.
Este modo de codificar un bloque de píxeles se denomina, en general, modo de codificación de paleta. Se contempla adoptar este modo, por ejemplo, en el estándar internacional Extensión de rango de la codificación de video de alta eficiencia (HEVC: ISO/iEc 23008-2 MPEG-H Part 2/ITU-T H.265).
Cuando se codifica una imagen en una secuencia de vídeo, la imagen se divide primero en entidades de codificación de píxeles de igual tamaño, denominadas bloques del árbol de codificación (CTB, Coding Tree Blocks). El tamaño de un bloque del árbol de codificación es, habitualmente, de 64 por 64 píxeles. Cada bloque del árbol de codificación puede ser dividido en un árbol jerárquico de bloques más pequeños cuyo tamaño puede variar, y que son los bloques reales de píxeles a codificar. Estos bloques más pequeños a codificar se denominan unidades de codificación (CU, Coding Units).
La codificación de una unidad de codificación concreta es, habitualmente, predictiva. Esto significa que primero se determina un bloque predictor. A continuación, se calcula la diferencia entre el bloque predictor y la unidad de codificación. Esta diferencia se denomina residuo. A continuación, este residuo es comprimido. La información codificada real de la unidad de codificación se compone de alguna información para indicar el modo de determinar el bloque predictor y del residuo comprimido. Los mejores bloques predictores son bloques lo más similares posible a la unidad de codificación, para obtener un residuo pequeño que pueda ser comprimido de manera eficiente.
El modo de codificación se define basándose en el procedimiento utilizado para determinar el bloque predictor para el procedimiento de codificación predictiva de una unidad de codificación.
Un primer modo de codificación se denomina modo INTRA. Según el modo INTRA, el bloque predictor se construye basándose en el valor de los píxeles que rodean inmediatamente a la unidad de codificación dentro de la imagen actual. Merece la pena señalar que el bloque predictor no es un bloque de la imagen actual, sino una reconstrucción del mismo. Se utiliza una dirección para determinar qué píxeles próximos al límite del bloque se utilizan realmente para construir el bloque predictor y cómo se utilizan. La idea detrás del modo INTRA es que, debido a la coherencia general de las imágenes naturales, es probable que los píxeles que rodean inmediatamente a la unidad de codificación sean similares a los píxeles de la unidad de codificación actual. Por lo tanto, es posible obtener una buena predicción del valor de los píxeles de la unidad de codificación utilizando un bloque predictor basado en estos píxeles circundantes.
Un segundo modo de codificación se denomina modo INTER. Según el modo INTER, el bloque predictor es un bloque de otra imagen. La idea detrás del modo INTER es que las imágenes sucesivas en una secuencia son generalmente muy similares. La principal diferencia procede habitualmente del movimiento entre estas imágenes debido al desplazamiento de la cámara o debido a objetos en movimiento en la escena. El bloque predictor está determinado por un vector que proporciona su ubicación en una imagen de referencia con respecto a la ubicación de la unidad de codificación dentro de la imagen actual. Este vector se denomina vector de movimiento. Según este modo, la codificación de dicha unidad de codificación que utiliza este modo comprende información del movimiento, que comprende el vector de movimiento y el residuo comprimido.
Este documento se centra en un tercer modo de codificación denominado modo de paleta. Según el modo de paleta, es posible definir un bloque predictor para una unidad de codificación determinada como un bloque de índices de una paleta: para cada ubicación de píxel en el bloque predictor, el bloque predictor contiene el índice asociado con el valor de píxel en la paleta que está más cercano al valor del píxel que tiene la misma ubicación (es decir, situado en la misma ubicación) en la unidad de codificación. Por lo tanto, el modo de codificación de paleta utiliza una paleta actual para construir un bloque predictor de índices para predecir una unidad de codificación o un bloque de píxeles actual. A continuación, se calcula y codifica un residuo, que representa la diferencia entre el bloque predictor y la unidad de codificación. Los índices de entrada en la paleta también se conocen como “niveles”.
Cuando se utiliza el modo de paleta, la paleta y el bloque predictor de índices o “niveles” tienen que ser transmitidos en el flujo de bits que codifica la imagen. Esto representa un alto coste de señalización debido a que es necesario transmitir una paleta, que puede comprender decenas de entradas, para cada unidad de codificación.
El documento JCTVC-N0169 del Equipo colaborativo conjunto sobre codificación de vídeo (JCT-VC, Joint Collaborative Team on Video Coding), 13a reunión: Incheon, KR, 18-26 de abril de 2013, titulado “Template-based palette prediction” propone un procedimiento de predicción de paleta basado en plantillas. En contraste con el esquema de codificación de paleta existente, en el que todos los elementos de paleta del bloque actual son codificados directamente, un elemento de la paleta de la CU actual puede ser predicho a partir de un elemento de la plantilla de la paleta con el procedimiento de predicción de paleta propuesto. La plantilla de la paleta es inicializada al comienzo de un segmento, y se actualiza cada vez que se procesa una CU con modo de codificación de paleta. CARACTERÍSTICAS DE LA INVENCIÓN
La invención se define mediante las reivindicaciones independientes adjuntas. Los aspectos específicos de la misma se definen en las reivindicaciones dependientes.
BREVE DESCRIPCIÓN DE LOS DIBUJOS
A continuación, se describirán realizaciones de la invención, únicamente a modo de ejemplo, y haciendo referencia a los siguientes dibujos, en los que:
la figura 1 muestra la arquitectura de un codificador de HEVC;
la figura 2 muestra la arquitectura de un descodificador de HEVC;
la figura 3 muestra el concepto de la zona causal;
la figura 4 muestra formatos de croma soportados por la RExt de HEVC;
la figura 5 muestra la división del bloque del árbol de codificación en unidades de codificación, y la descodificación por orden de exploración de estas unidades de codificación;
la figura 6 muestra la codificación binaria basada en Golomb de un elemento de sintaxis en HEVC;
la figura 7 muestra el principio de predicción del modo de paleta en el lado del descodificador bajo investigación en la Extensión de rango de HEVC;
la figura 8 muestra un ejemplo de una unidad de codificación con su correspondiente bloque de niveles, y la paleta asociada;
la figura 9 muestra el mismo bloque de niveles, y el conjunto de elementos de sintaxis utilizados para la codificación de este bloque de niveles;
la figura 10 muestra el proceso de descodificación de los elementos de sintaxis relacionados con el modo de paleta; la figura 11 muestra el proceso de reconstrucción para construir el bloque de niveles en el lado de descodificación; la figura 12 muestra un algoritmo de determinación de paleta, a modo de ejemplo, en el codificador;
la figura 13 muestra la selección de los elementos de sintaxis Modo pred, Nivel y Repetición en el codificador, para el modo de paleta;
la figura 14 muestra el principio de utilización de la predicción de paleta;
la figura 14a muestra una trama con varios CTB dispuestos en filas;
la figura 15 muestra el proceso de descodificación basado en predictores de paleta de referencia, transmitidos en el flujo de bits, según las realizaciones de la invención;
la figura 16 muestra la unidad de codificación actual con píxeles vecinos utilizados como predictores, en realizaciones de la invención;
la figura 17 muestra la generación del predictor de paleta para la unidad de codificación actual, basándose en los píxeles vecinos, según las realizaciones de la invención;
la figura 18 muestra un ejemplo de la construcción de un predictor de paleta, según las realizaciones de la invención;
la figura 19 muestra la descodificación de la sintaxis de paleta basada en un mapa de bits de indicadores, según las realizaciones de la invención;
la figura 20 muestra el proceso de la figura 19 en un ejemplo;
la figura 21 muestra un proceso de descodificación basado en tener residuos entre elementos de paleta y predictores de elementos, según realizaciones de la invención;
la figura 22 muestra la predicción Intra de la paleta, según realizaciones de la invención;
la figura 23 es un diagrama de bloques esquemático de un dispositivo informático para la implementación de una o varias realizaciones de la invención;
la figura 24 es un diagrama de flujo que muestra etapas generales para construir un predictor de paleta a partir de dos o más paletas ya existentes, según algunas realizaciones de la invención;
la figura 25 muestra una implementación, a modo de ejemplo, del enfoque de la figura 24;
la figura 26 muestra una implementación del proceso de la figura 24; y
la figura 27 muestra una sintaxis modificada para mapas de bits de indicadores que definen cómo se puede predecir una paleta a partir de un predictor de paleta, y comprende un diagrama de flujo que muestra etapas para descodificar la sintaxis modificada de un mapa de bits.
DESCRIPCIÓN DETALLADA DE REALIZACIONES DE LA INVENCIÓN
La figura 1 muestra la arquitectura del codificador de HEVC. En el codificador de vídeo, una secuencia 101 original es dividida en bloques de píxeles 102. A continuación, se asigna un modo de codificación a cada bloque. Existen dos familias de modos de codificación utilizados habitualmente en HEVC: los modos basados en predicción espacial, o modos INTRA 103, y los modos basados en predicción temporal, o modos INTER, basados en la estimación del movimiento 104 y la compensación del movimiento 105. Una extensión de HEVC, actualmente en diseño, conocida como RExt de HEVC, agrega un modo de codificación adicional, a saber, el modo de codificación de paleta, que compite con los modos de codificación INTRA e INTER para codificar bloques de píxeles. Este modo de codificación de paleta se describe con más detalle a continuación, en concreto haciendo referencia a las figuras 7 a 13.
Una unidad de codificación INTRA se predice generalmente a partir de los píxeles codificados en su límite causal, mediante un proceso denominado predicción INTRA.
La predicción temporal de un modo de codificación INTER consiste primero en encontrar en una trama anterior o futura, denominada la trama 116 de referencia, la zona de referencia de la misma que es la más cercana a la unidad de codificación, en una etapa 104 de estimación del movimiento. Esta zona de referencia constituye el bloque predictor. A continuación, esta unidad de codificación se predice utilizando el bloque predictor para calcular el residuo en una etapa 105 de compensación del movimiento.
En ambos casos, predicción espacial y temporal, se calcula un residuo restando la unidad de codificación del bloque predictor original.
En la predicción INTRA, se codifica una dirección de predicción. En la predicción temporal, se codifica, como mínimo, un vector de movimiento. Sin embargo, para reducir más el coste de la tasa de bits relacionado con la codificación del vector de movimiento, un vector de movimiento no se codifica directamente. De hecho, suponiendo que el movimiento es homogéneo, es especialmente ventajoso codificar un vector de movimiento como la diferencia entre este vector de movimiento y un vector de movimiento en su entorno. En el estándar de codificación H.264/AVC, por ejemplo, los vectores de movimiento se codifican con respecto a un vector medio calculado entre 3 bloques situados arriba y a la izquierda del bloque actual. Solo una diferencia, también denominada vector de movimiento residual, calculada entre el vector medio y el vector de movimiento del bloque actual, se codifica en el flujo de bits. Esto es procesado en el módulo 117 de “Predicción y codificación del Mv”. El valor de cada vector codificado es almacenado en el campo 118 del vector de movimiento. Los vectores de movimiento vecinos, utilizados para la predicción, son extraídos del campo 118 del vector de movimiento.
A continuación, se selecciona el modo que optimiza el rendimiento de distorsión de la tasa en el módulo 106. Para reducir aún más las redundancias, se aplica una transformada, habitualmente una DCT, al bloque residual en el módulo 107, y se aplica una cuantificación a los coeficientes en el módulo 108. A continuación, el bloque de coeficientes cuantificado es codificado por entropía en el módulo 109 y el resultado es introducido en el flujo de bits 110.
A continuación, el codificador realiza una descodificación de la trama codificada, para la estimación del movimiento futuro en los módulos 111 a 116. Esto es un bucle de descodificación en el codificador. Estas etapas permiten al codificador y al descodificador tener las mismas tramas de referencia. Para reconstruir la trama codificada, el residuo es cuantificado inversamente en el módulo 111 y sometido a transforma inversa en el módulo 112, con el fin de proporcionar el residuo “reconstruido” en el dominio de píxeles. Según el modo de codificación (INTER o INTRA), este residuo es añadido al predictor INTER 114 o al predictor INTRA 113.
A continuación, esta primera reconstrucción es filtrada en el módulo 115 mediante uno o varios tipos de postfiltrado. Estos posfiltros están integrados en el bucle de descodificación. Esto significa que tienen que ser aplicados a la trama reconstruida en el codificador y el descodificador para utilizar las mismas tramas de referencia en el codificador y el descodificador. El objetivo de este postfiltrado es eliminar artefactos de compresión.
El principio de un descodificador de HEVC se ha representado en la figura 2. El flujo 201 de vídeo es primero descodificado por entropía, en un módulo 202. A continuación, los datos residuales son cuantificados inversamente en un módulo 203, y sometidos a transformada inversa en un módulo 204 para obtener valores de píxel. Los datos del modo también son descodificados por entropía y, dependiendo del modo, se realiza una descodificación de tipo INTRA o una descodificación de tipo INTER. En el caso del modo INTRA, la dirección de predicción INTRA es descodificada a partir del flujo de bits. La dirección de predicción se utiliza, a continuación, para localizar la zona 205 de referencia. Si el modo es INTER, la información del movimiento es descodificada a partir del flujo de bits 202. Este se compone del índice de la trama de referencia y el vector de movimiento residual. El predictor del vector de movimiento es agregado al vector de movimiento residual para obtener el vector de movimiento 210. El vector de movimiento se utiliza, a continuación, para situar la zona de referencia en la trama 206 de referencia. Se debe tener en cuenta que los datos del campo del vector de movimiento 211 se actualizan con el vector de movimiento descodificado para ser utilizados para la predicción de los siguientes vectores de movimiento descodificados. A continuación, esta primera reconstrucción de la trama descodificada es postfiltrada 207 exactamente con el mismo postfiltro que se utiliza en el lado del codificador. La salida del descodificador es el vídeo descomprimido 209.
La figura 3 muestra el principio causal resultante de la codificación bloque por bloque, tal como en HEVC.
En un nivel alto, una imagen es dividida en unidades de codificación que se codifican en orden de exploración por barrido de trama. De este modo, cuando se codifica el bloque 3.1, todos los bloques de la zona 3.3 ya han sido codificados y se pueden considerar disponibles para el codificador. De manera similar, cuando se descodifica el bloque 3.1 en el descodificador, todos los bloques de la zona 3.3 ya han sido descodificados y, por lo tanto, reconstruidos y se pueden considerar disponibles en el descodificador. La zona 3.3 se denomina la zona causal de la unidad de codificación 3.1. Una vez codificada la unidad de codificación 3.1, esta pertenecerá a la zona causal de la siguiente unidad de codificación. Esta próxima unidad de codificación, así como todas las siguientes, pertenecen a la zona 3.4 mostrada como una zona de puntos, y no pueden ser utilizadas para codificar la unidad de codificación 3.1 actual. Merece la pena señalar que la zona causal está constituida por bloques reconstruidos. La información utilizada para codificar una unidad de codificación determinada no son los bloques originales de la imagen, por la razón de que esta información no está disponible en la descodificación. La única información disponible en la descodificación es la versión reconstruida de los bloques de píxeles en la zona causal, es decir, la versión descodificada de estos bloques. Por esta razón, en la codificación, los bloques previamente codificados de la zona causal son descodificados para proporcionar esta versión reconstruida de estos bloques.
Es posible utilizar información de un bloque 3.2 en la zona causal cuando se codifica un bloque 3.1. En las especificaciones del borrador Extensión de rango de HEVC, un vector de desplazamiento 3.5, que puede ser transmitido en el flujo de bits, puede indicar este bloque 3.2.
La figura 5 muestra una división de un bloque del árbol de codificación en unidades de codificación y un orden de exploración a modo de ejemplo, para procesar secuencialmente estas unidades de codificación. En el estándar de HEVC, la estructura de bloques está organizada por bloques del árbol de codificación (CTB). Una trama contiene varios bloques cuadrados y no superpuestos del árbol de codificación. El tamaño de un bloque del árbol de codificación puede variar en tamaño entre 64x64 y 16x16. Este tamaño se determina a nivel de secuencia. El tamaño más eficiente, en términos de eficiencia de codificación, es el mayor: 64x64. Se debe tener en cuenta que todos los bloques del árbol de codificación tienen el mismo tamaño, excepto por el límite de la imagen, lo que significa que están dispuestos en filas. El tamaño de los CTB de límite se adapta según la cantidad de píxeles restantes.
Cada bloque del árbol de codificación contiene una o varias unidades de codificación (CU) cuadradas. El bloque del árbol de codificación se divide, basándose en una estructura de árbol cuaternario, en varias unidades de codificación. El orden de procesamiento (codificación o descodificación) de cada unidad de codificación en el bloque del árbol de codificación sigue la estructura de árbol cuaternario, basado en un orden de exploración por barrido de trama. La figura 5 muestra un ejemplo del orden de procesamiento de las unidades de codificación. En esta figura, el número en cada unidad de codificación proporciona el orden de procesamiento de cada unidad de codificación correspondiente de este bloque del árbol de codificación.
En HEVC, se utilizan varios procedimientos para codificar los diferentes elementos de sintaxis, por ejemplo, residuos de bloque, información sobre bloques predictores (vectores de movimiento, direcciones de predicción INTRA, etc.). HEVC utiliza varios tipos de codificación por entropía, tal como la codificación aritmética binaria adaptativa basada en contexto (CABAC, Context based Adaptive Binary Arithmetic Coding), el código de Golomb-Rice o la representación binaria simple, denominada codificación de longitud fija. La mayoría de las veces se realiza un proceso de codificación binaria para representar los diferentes elementos de sintaxis. Este proceso de codificación binaria también es muy específico y depende de los diferentes elementos de sintaxis.
Por ejemplo, el elemento de sintaxis denominado “coeff_abs_level_remaining” contiene el valor absoluto o una parte de un valor absoluto del coeficiente residual. La idea de este proceso de codificación binaria es utilizar código de Golomb-Rice para los primeros valores, y de Golomb exponencial para los valores más altos. Más específicamente, dependiendo de un parámetro determinado denominado Orden de Golomb, esto significa que, para representar los primeros valores, por ejemplo, valores comprendidos de 0 a 3, se utiliza un código de Golomb-Rice, y, por lo tanto, para valores más altos, por ejemplo, valores de 4 y superiores, se utiliza un código de Golomb exponencial. El orden de Golomb es un parámetro utilizado tanto por el código de Golomb-Rice como por el código de Golomb exponencial.
La figura 6 muestra este principio en el lado de descodificación. Los datos de entrada del proceso de descodificación son el flujo de bits 601 y el orden que se conoce como el parámetro de Golomb-Rice, o el orden de Golomb. La salida de este proceso es el símbolo 612 descodificado.
El valor del prefijo se iguala a 1 en la etapa 602, a continuación, se extrae 1 bit del flujo de bits en la etapa 601 y el indicador de variable se iguala al valor 603 descodificado. Si este indicador es igual a 0 en la etapa 604, el valor del prefijo es incrementado 605 y se extrae otro bit del flujo de bits 603. Cuando el valor del indicador es igual a 1, el módulo de decisión 606 comprueba si el valor del prefijo es estrictamente menor de 3. Si esto es cierto, se extraen los N = Orden bits 608 del flujo de bits 601 y se establecen en la variable “palabra de código”. Esto corresponde a la representación de Golomb-Rice. El valor del símbolo 612 se iguala a ((prefijo << orden) palabra de código), tal como se representa en la etapa 609. Donde “<<” es el operador de desplazamiento a la izquierda.
Si el prefijo es mayor o igual que 3 en la etapa 606, la siguiente etapa es 610, en la que un número de bits N = (prefijo - 3 orden) son extraídos del flujo de bits, y establecidos en la variable “palabra de código” 610. El valor del símbolo 611 se iguala a ((1 << (prefijo-3)) 2) << orden) palabra de código. Esto corresponde a la representación de Golomb exponencial.
A continuación, en el presente documento, este proceso de descodificación, y, de una manera simétrica, el proceso de codificación correspondiente, se denomina GolombJH con un parámetro de entrada correspondiente al orden de Golomb. Se puede señalar de manera sencilla Golomb_H (Orden).
En HEVC, para algunos elementos de sintaxis tales como los residuos, el orden de Golomb se actualiza para adaptar la codificación por entropía a la señal a codificar. La fórmula de actualización intenta reducir el tamaño del código de Golomb aumentando el orden de Golomb cuando los coeficientes tienen valores grandes. En el estándar de HEVC, la actualización está dada por la siguiente fórmula:
Orden = Min( clastRiceOrder + ( cLastAbsLevel > (3 * (1
« cLastRiceOrder ) ) ? 1 : 0), 4)
en la que cLastRiceOrder es el último orden utilizado, cLastAbsLevel es el último coeff_abs_level_remaining descodificado. Se debe tener en cuenta que, para codificar o descodificar el primer parámetro, cLastRiceOrder y cLastAbsLevel se igualan a 0. Además, se debe tener en cuenta que el parámetro orden no puede exceder el valor de 4 en esta fórmula. Y en la que la expresión (C ? A: B) tiene el valor A si la condición C es verdadera, y B si la condición C es falsa.
La extensión de rango de HEVC, también denominada comúnmente RExt de HEVC, es una extensión que se está elaborando actualmente para el nuevo estándar de codificación de vídeo HEVC.
Un objetivo de esta extensión es proporcionar herramientas adicionales para codificar secuencias de vídeo con formatos de color y profundidad de bits adicionales, y, posiblemente, sin pérdidas. En concreto, esta extensión está diseñada para soportar el formato de color 4:2:2 así como el formato de vídeo 4:4:4, además del formato de vídeo 4;2.0 (ver la figura 4). Una imagen en color está formada generalmente por tres componentes de color R, G y B. Estos componentes están correlacionados generalmente y es muy común en la compresión de imágenes y vídeo descorrelacionar los componentes de color antes de procesar las imágenes. El formato más común que descorrelaciona los componentes de color es el formato de color YUV. Las señales YUV se crean habitualmente a partir de la representación RGB de imágenes, aplicando una transformación lineal a las tres tramas de entrada R, G y B. Y, se denomina, en general, componente luma, U y V se denominan, en general, componentes croma. El término “YCbCr” también se utiliza comúnmente en lugar del término “YUV”.
En cuanto a la profundidad de bits, que es el número de bits utilizados para codificar cada componente de color de un píxel, aunque el estándar de HEVC actual puede manejar el formato de color 4:2:0 con una profundidad de bits de 8 y 10 bits (es decir, de 256 a 1024 colores posibles), RExt de HEVC está a punto de ser diseñada para soportar adicionalmente formatos de vídeo 4:2:2 y 4:4:4 con una profundidad de bits extendida comprendida entre 8 bits y 16 bits (es decir, hasta 65.536 posibles colores). Esto es especialmente útil para tener una mayor dinámica de componentes de color.
RExt de HEVC también está diseñado para proporcionar una codificación sin pérdidas de las secuencias de entrada; esto es para tener una salida 209 descodificada estrictamente idéntica a la entrada 101. Para conseguir esto, se han modificado o agregado varias herramientas, en comparación con el códec con pérdidas de HEVC convencional. A continuación, se proporciona una lista no exhaustiva de modificaciones o adiciones, a modo de ejemplo, para implementación sin pérdidas:
- eliminación de la etapa de cuantificación 108 (203 en el descodificador);
- activación forzada de la transformada de baipás, ya que las transformadas normales de coseno/seno 107 pueden introducir errores (204 en el descodificador);
- eliminación de herramientas diseñadas específicamente para compensar el ruido de cuantificación, tal como el postfiltrado 115 (207 en el descodificador).
Para RExt de HEVC, la fórmula de actualización del orden de Golomb se ha modificado más para adaptarla para tratar con una mayor profundidad de bits y tener en cuenta la muy alta calidad requerida por la aplicación que trata la compresión de vídeo de formato extendido (4:2:2 y 4:4:4) incluyendo codificación sin pérdidas. Para RExt de HEVC, la fórmula de actualización se ha cambiado de la siguiente manera:
Orden = Min( cLastRiceOrder + ( cLastAbsLevel » ( 2 cLastRiceOrder ) ), 7 ) Con esta fórmula, el valor máximo de orden es 7. Además, para la primera codificación del coeff_abs_level_remaining para un sub-bloque del bloque de transformada, el orden de Golomb se iguala a:
Orden =
Max( 0, cRiceOrder -( transform_skip_flag | | cu_transquant_bypass_flag ? 1 : 2 ) ) donde
- la variable “transform_skip_flag” se establece en 1 si se omite la transformada (por ejemplo, la DCT 107 o 204) para la unidad de codificación actual, y en 0 si se utiliza la transformada,
- la variable “cu_transquant_bypass_flag” se establece en 1 si la unidad de codificación está codificada sin pérdidas, y en 0 en caso contrario,
- la variable “cRiceOrder” se iguala al último orden utilizado de otro sub-bloque del bloque de transformada y, en caso contrario, se establece en 0.
Actualmente se están diseñando herramientas adicionales para RExt de HEVC, para codificar de manera eficiente secuencias de vídeo de “contenido de pantalla” además de secuencias naturales. Las secuencias de vídeo de “contenido de pantalla” se refieren a secuencias de vídeo concretas que tienen un contenido muy específico correspondiente a las capturadas en un ordenador personal de cualquier otro dispositivo, que contienen, por ejemplo, texto, una presentación de PowerPoint, una interfaz gráfica de usuario, tablas (por ejemplo, capturas de pantalla). Estas secuencias de vídeo particulares tienen estadísticas bastante diferentes en comparación con las secuencias de vídeo naturales. En la codificación de vídeo, el rendimiento de las herramientas de codificación de vídeo convencionales, incluida HEVC, resulta en ocasiones decepcionante cuando se procesa dicho “contenido de pantalla”.
Las herramientas actuales explicadas actualmente en RExt de HEVC para procesar secuencias de vídeo de “contenido de pantalla” incluyen el modo de copia de bloque Intra y el modo de paleta. Los prototipos para estos modos han mostrado una buena eficiencia de codificación en comparación con el procedimiento convencional dirigido a secuencias de vídeo naturales. La presente solicitud se centra en el modo de codificación de paleta.
El modo de paleta de RExt de HEVC es un modo de predicción. Esto significa que el procedimiento de paleta se utiliza para construir un predictor para la codificación de una determinada unidad de codificación, de manera similar a una predicción realizada mediante predicción de movimiento (caso Inter) o por una predicción Intra. Después de la generación de la predicción, una unidad de codificación residual es transformada, cuantificada y codificada. En otras palabras, se aplican los mismos procesos descritos anteriormente haciendo referencia a las figuras 1 y 2.
Una paleta se representa generalmente mediante una tabla que contiene un conjunto finito de N-tuplas de colores, estando definido cada color por sus componentes en un espacio de color determinado (ver, por ejemplo, 803 en la figura 8 basado en el espacio de color YUV). Por ejemplo, en un formato RGB habitual, la paleta se compone de una lista de P elementos de N-tupla (en la que N = 3 para un RGB). De manera más precisa, cada elemento corresponde a un triplete fijo de componentes de color en el formato RGB. Por supuesto, esto no está limitado a un formato de color RGB o YUV. Cualquier otro formato de color puede ser representado por una paleta y puede utilizar un número de componentes de color menor o mayor, lo que significa que N puede ser diferente de 3.
En el lado del codificador, el modo de paleta, considerado en RExt, consiste en transformar valores de píxel de una unidad de codificación de entrada determinada en índices denominados niveles que identifican las entradas en una paleta asociada. Después de la transformación, la unidad o bloque de codificación resultante se compone de niveles y, a continuación, se transmite al descodificador con la paleta asociada, generalmente una tabla que tiene un número finito de tripletes de colores utilizados para representar la unidad de codificación. Puesto que la paleta define un número finito de colores, la transformación en un bloque de índices normalmente se aproxima a la unidad de codificación de entrada original.
Para aplicar el modo de paleta en el lado del codificador, una manera, a modo de ejemplo, de transformar una unidad de codificación de píxeles se realiza como sigue:
- encontrar los P tripletes que describen mejor la unidad de codificación de píxeles a codificar, por ejemplo, minimizando la distorsión global;
- a continuación, asociar con cada píxel de la unidad de codificación el color más cercano de entre los P tripletes: el valor a codificar (o nivel) (que, por lo tanto, forma parte del bloque de índices) es, por lo tanto, el índice correspondiente a la entrada del color más cercano asociado. El bloque predictor de índices se obtiene, de este modo, de la paleta, comparando las entradas de la paleta con cada píxel de la unidad de codificación, con el fin de identificar, para cada píxel, la entrada que define el color más cercano.
Para cada unidad de codificación, la paleta (es decir, los P tripletes encontrados), el bloque de índices o niveles y el residuo que representa la diferencia entre la unidad de codificación original y el bloque de índices en el espacio de color (que es el predictor de bloque), son codificados en el flujo de bits 110 y enviados al descodificador.
En el descodificador, el modo de paleta consiste en realizar la conversión en sentido inverso. Esto significa que cada índice descodificado asociado con cada píxel de la unidad de codificación es reemplazado por el color correspondiente en la paleta descodificada del flujo de bits, con el fin de reconstruir el color correspondiente para cada píxel de la unidad de codificación. Esta es la reconstrucción del bloque de índices en el espacio de color (es decir, del predictor de la unidad de codificación). Puesto que el modo de paleta es un modo de predicción, el residuo asociado es descodificado a partir del flujo de bits y, a continuación, agregado al predictor de la unidad de codificación reconstruido, para construir la unidad de codificación reconstruida final.
La figura 7 muestra, además, el principio del modo de paleta en el descodificador. El modo de predicción para la unidad de codificación actual es extraído del flujo de bits 701 en la etapa 702. Actualmente, el modo de paleta se identifica mediante un indicador situado antes del indicador de omisión en el flujo de bits (los otros modos de codificación se han descrito anteriormente haciendo referencia a las figuras 1 y 2). Este indicador está codificado en CABAC utilizando un solo contexto. Si este modo es el modo 703 de paleta, entonces la sintaxis relacionada del modo 705 de paleta, es decir, la información sobre la paleta, el bloque de niveles y el residuo, es extraída y descodificada 704 a partir del flujo de bits 701.
A continuación, durante la etapa 706, se construyen dos elementos a partir de los datos descodificados: la paleta 707 y el bloque de niveles 708. A partir de este bloque de niveles y de la paleta asociada, se construye 709 el predictor de unidad de codificación en el dominio de píxeles 710. Esto significa que, para cada nivel del bloque de niveles, se asocia un color (RGB o YUV) a cada píxel.
A continuación, el residuo de la unidad de codificación es descodificado 711 a partir del flujo de bits 701. En la implementación actual del modo de paleta, el residuo asociado con un modo de paleta es codificado utilizando el procedimiento de codificación de residuo Inter de HEVC común, es decir, utilizando codificación de Golomb. Para obtener el residuo de la unidad de codificación, se realizan la cuantificación inversa convencional y la transformación inversa. El predictor 710 de bloque es añadido 713 a este residuo 712 de la unidad de codificación para formar la unidad de codificación 714 reconstruida.
La figura 8 muestra el principio del modo de paleta en el codificador. La unidad de codificación 801 actual es convertida en un bloque 802 del mismo tamaño que contiene un nivel para cada píxel, en lugar de 3 valores de color (Y, U, V) o (R, G, B). La paleta 803 asociada con este bloque de niveles se construye basándose en la minimización de la distorsión global de la unidad de codificación y asocia, en cada entrada, un índice de entrada o nivel con valores de color de píxel correspondientes. Se debe tener en cuenta que, para aplicación monocromática, el valor de píxel solo puede contener un componente.
Tal como se mencionó en relación con la figura 7, la paleta (así como el residuo) se codifica e introduce en el flujo de bits para cada unidad de codificación. De la misma manera, el bloque de niveles (correspondiente al predictor de la unidad de codificación) se codifica e introduce en el flujo de bits, y a continuación se proporciona un ejemplo de la codificación haciendo referencia a la figura 9. En este ejemplo, el bloque de niveles es explorado en un orden horizontal.
El bloque de niveles 91 es exactamente el mismo que el mostrado en la figura 8 con la referencia 802. Las tablas 92 y 93 describen los elementos de sintaxis sucesivos utilizados para codificar el bloque de niveles 91. La tabla 93 debe ser leída como la continuación de la tabla 92. Los elementos de sintaxis de la tabla corresponden a la codificación de los grupos de niveles rodeados por líneas en negrita en el bloque 91.
El bloque de niveles es codificado por cada grupo de píxeles sucesivos en orden de exploración. Cada grupo es codificado utilizando un primer elemento de sintaxis que proporciona una dirección de predicción, un segundo elemento que proporciona la repetición y un tercer elemento opcional que proporciona el valor del píxel, concretamente, el nivel. La repetición corresponde al número de píxeles del grupo.
Estas dos tablas representan la sintaxis actual asociada con el modo de paleta. Estos elementos de sintaxis corresponden a la información codificada asociada en el flujo de bits para el bloque de niveles 91. En estas tablas, se utilizan tres elementos de sintaxis principales para representar completamente las operaciones del modo de paleta y se utilizan de la siguiente manera cuando se consideran sucesivamente los niveles del bloque de niveles 91. Un primer elemento de sintaxis, denominado “Modo pred” permite distinguir entre dos modos de codificación. En un primer modo correspondiente al indicador “Modo pred” igual a “0”, se utiliza un nuevo nivel para el píxel actual. El nivel es señalizado inmediatamente después de este indicador en el flujo de bits. En un segundo modo correspondiente al indicador “Modo pred” igual a “1”, se utiliza un modo de “copiar hacia arriba”. Más específicamente, esto significa que el nivel de píxel actual corresponde al nivel de píxel situado en la línea inmediatamente superior comenzando en la misma posición para un orden de exploración por barrido de trama. En ese caso del indicador “Modo pred” igual a “1”, no hay necesidad de señalizar un nivel inmediatamente después del indicador, debido a que el valor del nivel se conoce por referencia al valor del nivel del píxel inmediatamente por encima en el bloque de niveles 91.
Un segundo elemento de sintaxis denominado “Nivel” indica el valor de nivel de la paleta para el píxel actual solo en el primer modo de “Modo pred”.
Se utiliza un tercer elemento de sintaxis, denominado “Repetición”, para codificar un valor de repetición en ambos modos del “Modo pred”. Teniendo en cuenta que el bloque de niveles 91 es explorado desde la esquina superior izquierda a la esquina inferior derecha, fila por fila, de izquierda a derecha y de arriba abajo, el elemento de sintaxis Repetición proporciona el número de píxeles sucesivos en el bloque 91 que tienen la misma codificación.
Este elemento de sintaxis “Repetición” tiene un significado diferente, que depende del indicador de “Modo pred”. Cuando Modo pred es 0, el elemento “Repetición” es el número de píxeles sucesivos del bloque predictor que tienen el mismo valor de nivel. Por ejemplo, si Repetición = 8, esto significa que el “Nivel” actual se aplica al píxel actual y a los 8 píxeles siguientes, lo que corresponde a 9 muestras sucesivas idénticas en orden de exploración por barrido de trama.
Cuando Modo pred es 1, el elemento “Repetición” es el número de píxeles sucesivos del bloque predictor que tiene un valor de nivel correspondiente al valor de nivel de su píxel anterior en el bloque 91, es decir, donde se aplica el modo “copiar hacia arriba”. Por ejemplo, si Repetición = 31, esto significa que el nivel del píxel actual se copia del píxel de la línea anterior, así como de los siguientes 31 píxeles, lo que corresponde a 32 píxeles en total.
Las Tablas 92 y 93 representan las ocho etapas para representar el bloque 91 utilizando el modo de paleta. Cada etapa comienza con la codificación del indicador “Modo pred”, que está seguido por el elemento de sintaxis “Nivel” cuando el indicador “Modo pred” es igual a “0”, o por el elemento de sintaxis “Repetición” cuando el indicador “Modo pred” es igual a “1”. El elemento de sintaxis “Nivel” siempre va seguido de un elemento de sintaxis “Repetición”. Cuando el modo de predicción descodificado para el bloque actual es el modo de paleta, el descodificador descodifica primero la sintaxis relacionada con este bloque y, a continuación, aplica el proceso de reconstrucción para la unidad de codificación.
La figura 10 muestra el proceso de descodificación de los elementos de sintaxis relacionados con el modo de paleta. En primer lugar, el tamaño de la paleta se extrae y descodifica 1002 a partir del flujo de bits 1001. El tamaño exacto de la paleta (Palette_size) se obtiene sumando 1 a este valor de tamaño, descodificado en la etapa 1002. De hecho, el tamaño se codifica utilizando un código unario para el que el valor 0 tiene el menor número de bits (1 bit) y el tamaño de la paleta no puede ser igual a 0; en caso contrario, no se puede utilizar ningún valor de píxel para construir el predictor de bloque.
A continuación, se inicia el proceso correspondiente a la descodificación de los valores de la paleta. Una variable i correspondiente al índice de la paleta se iguala a 0 en la etapa 1004, a continuación, se realiza una prueba en la etapa 1005 para comprobar si i es igual al tamaño de la paleta (Palette_size) o no. Si es diferente del tamaño de la paleta en la etapa 1005, se extrae un elemento de la paleta del flujo de bits 1001, y se descodifica en la etapa 1006 y, a continuación, se agrega a la paleta con el nivel/índice asociado igual a i. A continuación, la variable i es incrementada durante la etapa 1007. Si i es igual al tamaño de la paleta en la etapa 1005, la paleta ha sido descodificada por completo.
A continuación, se realiza el proceso correspondiente a la descodificación del bloque de niveles 91. En primer lugar, la variable j, correspondiente a un contador de píxeles, se establece en 0, así como la variable syntax_i 1008. A continuación, se realiza una comprobación para saber si el contador de píxeles corresponde al número de píxeles contenidos en el bloque. Si la respuesta es sí, en la etapa 1009, el proceso finaliza en la etapa 1017; en caso contrario, el valor del indicador “Modo pred” correspondiente a un modo de predicción se extrae del flujo de bits 1001 y se descodifica 1010.
El valor de “Modo pred” es agregado a una tabla en el índice syntax_i, que contiene todos los valores del “Modo pred” descodificados. Si el valor de este “Modo pred” es igual a 0, etapa 1011, el elemento de sintaxis correspondiente a “Nivel” es extraído del flujo de bits 1001 y es descodificado 1012. Esta variable “Nivel” es agregada a una tabla en el índice syntax_i que contiene todos los niveles descodificados. La variable j correspondiente al contador de píxeles es incrementada en uno en 1013.
A continuación, el elemento de sintaxis “Repetición” es descodificado en la etapa 1014. Si el elemento de sintaxis “Modo pred” es igual a 1, etapa 1011, el valor de “Repetición” también es descodificado en la etapa 1014. Este elemento de sintaxis “Repetición” es agregado a una tabla en el índice syntax_i que contiene todos los valores Repetición descodificados.
A continuación, en la etapa 1015, el valor j es incrementado por el valor de Repetición descodificado en la etapa 1014. La variable syntax_i es incrementada en uno para considerar el siguiente conjunto de elementos de sintaxis. Si el contador j es igual al número de píxeles en el bloque, entonces la sintaxis para construir el bloque de niveles 91 está terminada 1017. Al final de este proceso relacionado con la paleta, el descodificador conoce la paleta y las tablas que contienen la lista de todos los elementos de sintaxis “Modo pred”, “Nivel” y “Repetición” asociados con el modo de paleta de esta unidad de codificación. A continuación, el descodificador puede continuar con el proceso de reconstrucción de la unidad de codificación tal como se describe en la figura 7.
En una ligera variante de esta realización de la figura 10, el elemento “Modo pred” no se proporciona para la primera línea de píxeles en la parte superior del bloque de niveles 91. Esto se debe a que, puesto que estos píxeles están privados de niveles en una línea de arriba, no se puede ejecutar el modo “copiar hacia arriba”. Por lo tanto, siempre que j sea menor que la anchura del bloque en la etapa 1009, no se proporciona ningún elemento de “Modo pred” y las etapas 1010-1011 son cortadas, por lo que se lleva a cabo directamente la etapa 1012. Se debe tener en cuenta que esta ligera variación disminuye el tamaño del bloque de niveles codificado.
En una realización que se puede combinar con la realización anterior de la figura 10 o con su ligera variación, se pueden generar varios bloques de niveles, en lugar de solo uno. Esto significa que se utilizan varios niveles para todos o una parte de los píxeles. Por ejemplo, se puede construir un primer bloque de niveles para un primer componente de color (Y, por ejemplo), mientras que otro bloque de niveles se puede construir para el, como mínimo, un componente restante (U y V, por ejemplo). Por supuesto, se pueden contemplar tres bloques de niveles para los tres componentes de color. La opción de tener varios bloques de nivel y su correspondencia con los componentes de color se puede señalizar en el flujo de bits utilizando indicadores específicos. En una variante, esto puede estar implícito en el formato de color de la imagen.
El proceso de la figura 10 se ha descrito anteriormente en relación con el proceso de predicción del modo de paleta de la figura 7, en el que se codifica un residuo y, por lo tanto, se extrae y descodifica en las etapas 711 y 712, antes de añadirlo al predictor de la unidad de codificación.
En una variante del proceso de predicción del modo de paleta tal como el descrito en la figura 7, no se puede proporcionar ningún residuo (es decir, codificado en el lado de codificación). El resultado es que la figura 7 se ve privada de las etapas 711, 712 y 713, siendo la unidad de codificación 714 reconstruida la misma que el predictor 710 de la unidad de codificación.
No obstante, todavía puede haber píxeles de la unidad de codificación que estén incorrectamente descritos por los niveles de la paleta, lo que significa que no se han encontrado niveles relevantes correspondientes en la paleta. Estos píxeles se denominan píxeles de “escape”, ya que no está establecido ningún valor correspondiente en el bloque de niveles.
Los elementos de sintaxis construidos durante el proceso de la figura 10 para el bloque de niveles pueden, por lo tanto, complementarse, para esos píxeles de “escape”, con valores de píxel explícitos de la unidad de codificación original. Los valores de píxel explícitos pueden ser señalizados y transmitidos en el flujo de bits.
Un ejemplo de señalización de píxeles es añadir un indicador de “escape” antes del elemento “Modo pred” (es decir, antes de la etapa 1010) que indica si un píxel está codificado por paleta (por lo tanto, sometido a la etapa 1010), o codificado por escape (por lo tanto, con un valor de píxel explícito). El indicador de “escape” va seguido del valor de píxel explícito (no se proporcionan elementos de “Modo pred”, “Nivel” y “Repetición” para este píxel).
En una variante del indicador de “escape”, se puede utilizar un valor de Nivel específico (dedicado a píxeles de “escape” y obtenido en la etapa 1012) para señalizar un píxel de “escape”. En este caso, el elemento “Repetición” debe ser el valor de píxel explícito. Este valor específico solo puede ocurrir cuando la paleta que se está construyendo alcanza su tamaño máximo, lo que ahorra el coste de señalizar valores de escape para cada tamaño de paleta.
En cualquier realización, los valores de píxel explícitos pueden ser codificados de manera predictiva (por ejemplo, como una diferencia con el valor de un píxel vecino) o no, y pueden cuantificarse o no, con posibles consecuencias para la codificación por entropía (contextual y número de bits, etc.).
Volviendo a la paleta, cada elemento de paleta, constituido por tres valores en los ejemplos anteriores, se codifica, en general, utilizando tres códigos binarios. La longitud de los códigos binarios corresponde a la profundidad de bits de cada componente de color. El tamaño de la paleta se codifica normalmente utilizando código unario. El elemento “Modo pred” es codificado utilizando un bit (así como el indicador de “escape”, si lo hay). El elemento “Nivel” se codifica utilizando código binario con una longitud de código binario igual a b, en el que 2b es el menor número entero mayor o igual que el tamaño de la paleta. Y el elemento “Repetición” se codifica utilizando Golomb_H (Orden = 3), tal como se explicó anteriormente en relación con la figura 6.
La figura 11 muestra el proceso de reconstrucción para construir el bloque de niveles 91 y, a continuación, el predictor de bloque en el espacio de color que tiene que ser utilizado como predictor. Los datos de entrada de este proceso son las tablas obtenidas utilizando el proceso de la figura 10 anterior, y que contienen la lista de “Modo pred”, “Nivel” y “Repetición”. Se debe tener en cuenta que un experto en la materia puede adaptar las explicaciones siguientes a las realizaciones basándose en la presencia de píxeles de “escape”.
Un elemento adicional de datos de entrada a los elementos “Modo pred”, “Nivel” y “Repetición” es el tamaño de la unidad de codificación 801 (que es el mismo que el tamaño del bloque de niveles 802/91) conocido a partir del árbol cuaternario (figura 5) señalizado en el flujo de bits.
En una primera etapa 1101, una variable i, que representa un contador de píxeles, se iguala a 0 y una variable j, para considerar sucesivamente cada conjunto de elementos de sintaxis, también se iguala a 0. En la etapa 1104, el elemento Pred_mode[j] extraído de la tabla de “Modo pred” en el índice j es comparado con 0.
Si es igual a 0, se codifica un nuevo nivel para el píxel i actual. Como consecuencia, el valor del píxel en la posición i se iguala al nivel en el índice j de la tabla de niveles; Bloque[i] = Nivel[j]. Esta es la etapa 1105. La variable i es incrementada en uno en la etapa 1106 para considerar el siguiente píxel, y la variable k, dedicada a contar los píxeles ya procesados en el valor Repetición actual, se iguala a 0 en la etapa 1107.
En la etapa 1108 se realiza una comprobación para determinar si k es igual o no al elemento “Repetición” de la tabla de valores “Repetición” en el índice j: ¿k = Repetición[j]? Si no es igual, el nivel del píxel en la posición i se iguala al valor de nivel del píxel en la posición i-1: Bloque[i] = Bloque[i-1 ]. Esta es la etapa 1109. La variable i y la variable k son incrementadas en uno en las etapas 1110 y 1111, respectivamente. Si k = Repetición[j] en la etapa 1108, la propagación del valor del nivel izquierdo finaliza y se lleva a cabo la etapa 1120 (se describe a continuación).
Si Pred_mode[j] es diferente de 0 en la etapa 1104, el modo “copiar hacia arriba” comienza con la variable k establecida igual a 0 en la etapa 1112. A continuación, la etapa 1113 comprueba si (k-1) es o no igual al elemento “Repetición” de la tabla de los valores Repetición en el índice j: ¿k = Repetición[j] 1? Si no es igual, el valor de nivel del píxel en la posición i se iguala al valor de nivel del píxel en la posición i de la línea anterior: Bloque[i] = Bloque[ianchura], donde “anchura” es la anchura del bloque de niveles (el mismo que la unidad de codificación) deducido del tamaño de entrada de la unidad de codificación. Esta es la etapa 1114. A continuación, la variable i y la variable k son incrementadas en uno en las etapas 1115 y 1116, respectivamente. Si k = Repetición[j] 1 en la etapa 1113, se completa el modo de predicción “copiar hacia arriba” y el proceso continúa en la etapa 1120.
En la etapa 1120, se realiza una comprobación para determinar si la variable i es o no igual a la cantidad de píxeles en el bloque 91 / CU 801. Si no es igual, la variable j es incrementada en uno en la etapa 1121 para considerar el siguiente conjunto de elementos de sintaxis, y el proceso vuelve a la etapa 1104 descrita anteriormente.
Si todos los píxeles han sido procesados en la etapa 1120, el bloque final de los niveles 91 se obtiene en la etapa 1122: esto corresponde a la tabla Bloque[]. A continuación, una etapa final 1123 consiste en convertir cada nivel en valores de color utilizando la paleta 803 descodificada utilizando el proceso de la figura 10 (excepto para los píxeles de “escape” que tienen directamente sus valores de píxel). Esta etapa final afecta a los valores de píxel (Y, U, V) o (R, G, B) en cada posición de bloque, según el nivel de esta posición en el bloque y las entradas correspondientes en la paleta.
Otros aspectos del modo de paleta tal como se introducen en RExt de HEVC se refieren a la determinación por parte del codificador de la paleta que se utilizará para codificar la unidad de codificación actual (ver la figura 12 a continuación), y la selección de los elementos de sintaxis Modo pred, Nivel y Repetición en el codificador (ver la figura 13 a continuación).
La figura 12 muestra un algoritmo de determinación de paleta, a modo de ejemplo, en el codificador. Los datos de entrada de este proceso son la unidad de codificación original de píxeles y su tamaño de unidad de codificación. En este ejemplo, se ha construido una paleta YUV, pero otras implementaciones pueden tener como resultado construir una paleta RGB de la misma manera.
En una primera etapa 1201, una variable j que representa un contador de píxeles se establece en 0, una variable “Palette_size” para seguir el crecimiento de la paleta a medida que esta se construye también se establece en 0, y una variable “Th” que representa un umbral se establece en 9. A continuación, en la etapa 1203, el píxel pi, es decir, que tiene el índice i según un orden de exploración, es leído en la etapa 1203 desde la unidad de codificación original 1204. A continuación, la variable j se iguala a 0 en 1205, y en la etapa 1206 se realiza una comprobación para determinar si el tamaño de la paleta es o no igual a la variable “j” (lo que significa que se han considerado todos los elementos de paleta de la paleta en construcción).
Si el tamaño de la paleta es igual a j, la paleta en el índice “j” se iguala al valor de píxel p¡ en la etapa 1209. Esto significa que el píxel actual p¡ se convierte en un nuevo elemento en la paleta, con un índice j asociado al mismo. De manera más precisa, se realiza la siguiente asignación:
PALyU] = { Y i )
PALuD] = (U¿)
PALvG] = (Vi )
donde PALy,u,v son tres tablas para almacenar los valores de color.
Tamaño de paleta (Palette_size) es incrementado en uno en la etapa 1210 y un Contador de la tabla de ocurrencia se iguala a 1 para el índice “Tamaño de paleta” en la etapa 1211. A continuación, la variable i es incrementada en uno en la etapa 1213 para considerar el siguiente píxel “i” de la unidad de codificación actual. A continuación, se realiza una comprobación en la etapa 1214 para determinar si se han procesado o no todos los píxeles de la unidad de codificación actual. Si se han procesado todos, el proceso se completa mediante una etapa 1215 de ordenación explicada más adelante; en caso contrario, el siguiente píxel se considera en la etapa 1203 descrita anteriormente. Volviendo a la etapa 1206, si j es diferente de palette_size, se lleva a cabo la etapa 1207, donde se calcula el valor absoluto para cada componente de color entre p¡ y el elemento de paleta en el índice j. Las fórmulas se muestran en la figura. Si todas las diferencias absolutas son estrictamente menores que el umbral TH predefinido, el contador de ocurrencias con respecto al elemento “j” en la paleta es incrementado en uno en la etapa 1212. La etapa 1207 crea una clase para cada elemento de la paleta en construcción, tal como una clase que abarca colores próximos al color del elemento, dado el margen TH. Por lo tanto, la etapa 1212 cuenta las ocurrencias de cada clase. La etapa 1212 está seguida por la etapa 1213 ya descrita.
Si no se cumple la condición de la etapa 1207, la variable j es incrementada en uno en la etapa 1208 para considerar el siguiente elemento de paleta en la paleta. Esto es para comparar los otros elementos de color de la paleta con el píxel actual a través de la nueva ocurrencia de la etapa 1207. Si ningún elemento en la paleta cumple el criterio de la etapa 1207, se agrega un nuevo elemento a la paleta, tal como se ha descrito anteriormente haciendo referencia a las etapas 1209, 1210 y 1211.
Se puede observar que el módulo de decisión 1207 puede comparar cada elemento de color para secuencias de 4:4:4 (YUV o RGB) y solo puede comparar el componente de color Luma para secuencias de 4:2:0.
Al final del proceso de la figura 12, el “Contador” de la tabla contiene el número de ocurrencias de las clases definidas por los respectivos elementos de paleta. A continuación, los elementos de paleta son ordenados en la etapa 1215 según sus ocurrencias, de modo que el elemento más frecuente esté en la primera posición (entrada con el índice o “nivel” más bajo) en la paleta.
También se puede observar que el tamaño de la paleta se puede limitar a un tamaño máximo, por ejemplo, 24 entradas. En tal caso, si el tamaño de la paleta resultante de la etapa 1215 es mayor de 24, la paleta se reduce eliminando los elementos (entradas) de la posición 25.a en la paleta ordenada. Esto tiene como resultado la construcción de una paleta.
Pasando a continuación a la selección de los elementos de sintaxis Modo pred, Nivel y Repetición en el codificador, los datos de entrada del proceso de la figura 13 son la unidad de codificación original de píxeles, la paleta tal como se construyó por medio del proceso de la figura 12 y el tamaño de la unidad de codificación. En concreto, esta evaluación se realiza cuando se determina qué modo de codificación se debe utilizar, de entre codificación INTRA, codificación INTER y codificación de paleta.
En una primera etapa 1301, la variable “i” que representa un contador de píxeles se establece en 0. El proceso descrito a continuación busca determinar los elementos de sintaxis para los píxeles a partir de i. Los dos modos de predicción se evalúan de manera independiente: “Modo pred” = 0 en la parte derecha de la figura y “Modo pred” = 1 en la parte izquierda de la figura.
Para la predicción de “copiar hacia arriba” (correspondiente a “Modo pred” = 1), la variable “icopia” utilizada para contar el número de niveles en el valor “Repetición” actual se iguala a 0 en la etapa 1303. A continuación, en la etapa 1304 el nivel actual en la ubicación del píxel i: Bloque[i icopia], se compara con el nivel del píxel situado inmediatamente por encima en la línea superior: Bloque[i icopia - anchura], donde “anchura” corresponde a la anchura de la unidad de codificación actual. Se debe tener en cuenta que el nivel bloque[i icopia] de cada píxel de la unidad de codificación se determina en paralelo en la etapa 1308. Esta etapa consiste en asociar con el píxel en la posición i, el elemento de paleta más cercano (en la práctica, su índice o nivel), como ya se explicó anteriormente. Esta etapa utiliza la posición i, la paleta 1306 y la unidad de codificación original 1307.
Si Bloque[i icopia] = Bloque[i icopia - anchura] en la etapa 1304, la variable “icopia” es incrementada en uno en la etapa 1305 para considerar el siguiente valor de píxel del bloque de píxeles e indicar que el nivel de píxel actual en la posición i icopia se puede incluir en el valor Repetición actual “copiar hacia arriba”. Si Bloque[i icopia] es diferente de Bloque[i icopia - anchura] en la etapa 1304, lo que significa que la evaluación actual del valor Repetición de “copia hacia arriba” ha finalizado, la variable “icopia” se transmite al módulo de decisión 1314. En esta etapa del proceso, la variable “icopia” corresponde al número de valores copiados de la línea inmediatamente por encima.
Para la predicción del valor izquierdo (correspondiente a “Modo pred” = 0), el bucle para determinar el valor de Repetición (izquierda) se procesa en paralelo o secuencialmente. En primer lugar, la variable “iinicio” utilizada para almacenar el índice i del píxel actual se establece en “i”, y la variable “j” utilizada para considerar sucesivamente los niveles de píxeles que siguen al índice “i” también se iguala a “i”, y la variable “izquierda” utilizada para contar el valor Repetición actual en construcción se iguala a 0. Esta es la etapa 1309. A continuación, la etapa 1310 consiste en determinar si j! = 0 y “Pred_mode[j-1]” = 0 y Bloque[j] = Bloque[j-1]. Pred_mode[] es una tabla utilizada por el codificador para almacenar el modo de predicción (ya sea 1 o 0 para la predicción de “copiar hacia arriba” y la predicción del valor izquierdo, respectivamente). Esta se llena progresivamente en la etapa 1317 descrita a continuación, a medida que se procesan los píxeles sucesivos, y se ha inicializado con valores cero, por ejemplo, en la etapa 1301: Pred_mode[k] = 0 para cualquier k.
Si se cumple la condición en la etapa 1310, la variable “izquierda” es incrementada en uno en la etapa 1311 para indicar que el nivel de píxel actual en la posición j se puede incluir en el elemento Repetición del “valor izquierdo” actual, y la variable j es incrementada en uno en la etapa 1312 para considerar el siguiente valor de píxel del bloque de píxeles.
Si no se cumple la condición en la etapa 1310, la variable “j” se compara con “i nicio” para determinar si es el primer valor de píxel que se examinará para el valor Repetición del “valor izquierdo” actual. Esta es la etapa 1313. Si “j” es menor o igual que “i nicio”, lo que significa que es el primer valor de píxel que se examinará para el valor Repetición actual, entonces comienza la Repetición actual, y se considera el siguiente valor de píxel en la etapa 1312 descrita anteriormente. Si “j” es estrictamente mayor que “i nicio”, lo que significa que se ha detectado un primer valor de píxel diferente del valor de píxel del valor Repetición del “valor izquierdo” actual, la variable “i zquierda” que corresponde a la longitud del valor Repetición del “valor izquierdo” actual es transmitida al módulo de decisión 1314. Se debe tener en cuenta que, como el bucle para la predicción de “copiar hacia arriba”, el nivel Bloque[i] en el índice i se determina en el mismo bucle en la etapa 1308.
Después de haber calculado el valor Repetición máximo para el modo de “predicción del valor izquierdo” y el modo de “copiar hacia arriba”, las variables “i zquierda” e “icopia” son comparadas en la etapa 1314. Esto es para determinar si “icopia” != 0 e “icopia” 2 es mayor que “i zquierda”, o no. Este es un criterio a modo de ejemplo para seleccionar el modo de Copiar hacia arriba o el modo de predicción del valor izquierdo. En concreto, el parámetro “2” puede ser modificado ligeramente.
La condición en la etapa 1314 significa que si “icopia” es igual a 0 o es menor o igual que i zquierda - 2, en la etapa 1315 se selecciona el “modo de predicción del valor izquierdo”. En ese caso, una variable “PredMode” se iguala a 0 y una variable Repetición se iguala a “i zquierda” en la misma etapa 1315. Por otro lado, si “icopia” es diferente de 0 y es estrictamente mayor que “i zquierda - 2”, en la etapa 1316 se selecciona el modo de “copiar hacia arriba”. En ese caso, la variable “Predmode” se establece en 1 y la variable Repetición se establece en icopia - 1 en la etapa 1316.
A continuación, las tablas que contienen los valores “Pred_mode” y “Repetición” en el codificador se actualizan con el valor actual “Pred_mode” y “Repetición”, en la etapa 1317. A continuación, la siguiente posición a considerar en el bloque de píxeles se calcula en la etapa 1318, que corresponde a la posición actual i incrementada mediante el valor de “Repetición” 1. A continuación se realiza una comprobación en la etapa 1319 para determinar si se han procesado los últimos píxeles de la unidad de codificación. Si tal es el caso, el proceso finaliza en la etapa 1320; en caso contrario, la evaluación de los dos modos de predicción “predicción izquierda” y “copiar hacia arriba” se realiza comenzando en las etapas 1303 y 1309 para la siguiente posición de píxel, para obtener un nuevo conjunto de elementos de sintaxis.
Al final de este proceso, el codificador conoce los niveles para cada muestra de la unidad de codificación, y puede codificar la sintaxis correspondiente del bloque de niveles basándose en el contenido de las tres tablas Pred_mode[], bloque[] y Repetición[].
Tal como se describió anteriormente, el modo de paleta tal como está diseñado actualmente en RExt de HEVC requiere que se transmita una paleta para cada unidad de codificación. Esto representa una gran cantidad de datos en el flujo de bits y, por lo tanto, un coste de codificación. Los inventores han concebido una mejora del modo de paleta para mejorar su eficiencia de codificación.
Según un aspecto de la invención, la paleta actual para una unidad de codificación actual se predice utilizando un predictor de paleta. En una variante de la invención, la paleta actual se predice a partir de entradas de dos o más paletas, las dos o más paletas siendo paletas previamente utilizadas para procesar bloques de píxeles, por ejemplo, utilizando un predictor de paleta construido a partir de las dos o más paletas. Esto posibilita reducir la cantidad de información a transmitir para cada paleta asociada con una unidad de codificación. A continuación se describen diversas realizaciones.
Puesto que el enfoque de la invención se basa en predicciones, la obtención del predictor para la unidad de codificación actual se describe primero haciendo referencia a las figuras 14 a 18, 22 y 24 a 26, y, a continuación, los elementos de sintaxis para describir realmente la predicción para el descodificador se describen haciendo referencia a las figuras 19 a 22 y 27.
Las etapas generales de un proceso de descodificación que implementa la invención se muestran en la figura 14, que está basada en la figura 7 descrita anteriormente. Un experto en la materia comprendería directamente las operaciones correspondientes en el codificador para construir apropiadamente el flujo de bits. Los bloques 14xx en la figura 14 son similares a los bloques 7xx en la figura 7. Tal como se muestra en la figura, la idea principal de la invención se implementa en la etapa 1406, donde la paleta se predice, como mínimo parcialmente, a partir de un predictor de paleta 1416, en lugar de ser completamente descodificada a partir del flujo de bits. A continuación, se describen varias formas de obtener 1415 el predictor de paleta, que incluyen obtener
una paleta utilizada para predecir un bloque de píxeles o unidad de codificación procesados previamente;
un predictor de paleta de referencia, asociado con una entidad de codificación que incluye la unidad de codificación actual;
entradas correspondientes a valores de píxeles próximos a la unidad de codificación actual; y
como mínimo, una entrada de la paleta actual que precede a una entrada actual a predecir en la paleta actual.
Según las primeras realizaciones para obtener el predictor de paleta, los bloques de píxeles de la imagen se procesan según un orden de exploración predefinido, tal como se ha descrito anteriormente haciendo referencia a la figura 5, donde las CU de un CTB se codifican/descodifican según un orden de exploración. A continuación, se selecciona el predictor de paleta para el bloque de píxeles actual entre un conjunto de paletas utilizadas para predecir bloques de píxeles procesados previamente. Preferentemente, el predictor de paleta para el bloque de píxeles actual es una paleta utilizada para el último bloque de píxeles procesado. Esto se puede implementar almacenando en la memoria la última paleta de descodificación utilizada (para la última unidad de codificación procesada). Por supuesto, se puede seleccionar como predictor de paleta otra paleta de entre las paletas ya utilizadas, en cuyo caso se debe proporcionar al descodificador un identificador de dicha paleta seleccionada.
Según el orden de exploración utilizado, en general, se observa que la última paleta utilizada, y, por lo tanto, el predictor de paleta, es una de las paletas utilizadas para unidades de codificación procesadas previamente que son contiguas a la unidad de codificación actual. Esto garantiza que se tenga en cuenta una alta redundancia entre las unidades de codificación para obtener una codificación eficiente. Por ejemplo, según la figura 5, el predictor de paleta puede ser una de las paletas utilizadas para procesar las unidades de codificación 15, 17, 12 y 13 de la izquierda o de arriba.
Para evitar una mala predicción de la paleta debido a un predictor de paleta que tenga un contenido alejado del contenido real de la unidad de codificación actual, realizaciones específicas proporcionan un restablecimiento de la última paleta utilizada (o del conjunto de paletas utilizadas previamente). Dicho restablecimiento puede ocurrir en cada nuevo CTB, es decir, cuando la unidad de codificación actual inicia una nueva entidad de codificación compuesta de bloques de píxeles, o en cada nueva línea o fila de los CTB, tal como se introdujo anteriormente, o incluso en cada nueva trama.
Dicho restablecimiento también hace posible que el codificador o el descodificador estimen el modo de paleta para cada CTB (o fila de CTB o trama) en paralelo. No obstante, puesto que a menudo existen algunas correlaciones entre las unidades de codificación de 2 CTB, el restablecimiento se realiza, preferentemente, para cada nueva fila de CTB. Esto se muestra utilizando la figura 14a, que muestra una trama con varios CTB (cada uno representado por un cuadrado). Los CTB de la izquierda en líneas gruesas son los CTB para los que se restablece la última paleta utilizada, porque cada uno de ellos comienza una nueva línea de CTB.
El restablecimiento en el primer CTB de una línea es un enfoque más eficiente que el restablecimiento al nivel de trama. Esto se debe a que los CTB están codificados en un orden de exploración por barrido de trama horizontal y, por lo tanto, para el primer CTB de una línea de CTB, la última paleta utilizada se predice potencialmente a partir de un CTB espacialmente lejano (el último de la línea de CTB inmediatamente por encima). Dada la distancia espacial entre los CTB, la correlación entre ellos es muy baja y, por lo tanto, no es provechosa la dependencia (predicción) entre sus respectivas paletas.
El restablecimiento de la última paleta utilizada puede significar que no hay ninguna paleta disponible como predictor de paleta para predecir posiblemente una paleta actual. En ese caso, la paleta actual, por ejemplo, la paleta de la primera unidad de codificación procesada en el primer CTB de la línea no se puede predecir. Este restablecimiento se puede realizar estableciendo la variable Previous_Palette_size (almacenando el tamaño de la última paleta utilizada) en 0.
Además, el restablecimiento de la última paleta utilizada también aumenta de manera sustancial el coste global de codificación del modo de paleta, ya que no se puede predecir ningún valor, desviándose de este modo hacia tamaños de paleta más pequeños y, por lo tanto, a predictores de paleta más pequeños y menos eficientes. Esto se debe a que otros bloques pueden reutilizar elementos nuevos en el bloque, por lo tanto mutualizando de hecho los bits gastados para el primer bloque. Una solución habitual sería utilizar algoritmos de programación dinámica, tal como el de Viterbi, donde la decisión de codificación para un bloque se selecciona solo después de que se hayan codificado unos pocos bloques. No obstante, esto es prohibitivamente complejo y se prefieren soluciones más simples.
Dicho aumento del coste de la codificación puede hacer que el selector de modo de codificación (ver la etapa 106) lo seleccione con menos probabilidad, y no inmediatamente después del restablecimiento (por lo tanto, con retardo). Sin embargo, merece la pena tener seleccionado el modo de paleta para codificar las unidades de codificación. Para este propósito, las realizaciones dan a conocer aumentar la probabilidad de que el modo de paleta se seleccione falseando el coste de codificación de bits de la primera codificación de una unidad de codificación después de que se produjo el restablecimiento (es decir, con un predictor de paleta vacío o predeterminado). Esto es para tener un coste de codificación de bits menor del que se debería, aumentando de este modo la probabilidad de que se seleccione el modo de paleta.
Se puede proporcionar información falsa sobre los bits utilizados para la codificación, para obtener artificialmente esta reducción de los costes de codificación de bits. Esta información falsa o engañosa, o “bonificación”, para un componente de color puede depender del punto de funcionamiento del códec (es decir, de cuánta mejora de distorsión debe aportar un bit), del formato de croma del, como mínimo, un componente de color en cuestión y/o del número de elementos en la paleta para la unidad de codificación actual.
Por ejemplo, se puede considerar el caso de una paleta de elementos RGB o YUV, teniendo cada componente R/G/B/Y/U/V, por ejemplo, componentes de 8 bits. Por lo tanto, el coste de bits resultante de la codificación de una entrada de la paleta utilizada para la primera unidad de codificación después del restablecimiento de la paleta es, normalmente, de 3x8 = 24 bits. No obstante, en las realizaciones explicadas en este caso, se puede aplicar una bonificación para corregir este coste de bits, por ejemplo, disminuyéndolo artificialmente a solo 8 bits. Por lo tanto, es más probable que el modo de paleta se seleccione en la etapa 106.
En realizaciones concretas en las que se necesitan dos o más niveles para representar un píxel (por ejemplo, un nivel para el componente Y un nivel para el par de componentes U y V), se utilizan realmente dos o más paletas para codificar un bloque de píxeles. Se puede aplicar una bonificación a cada una de las dos o más paletas. Por ejemplo, si se proporcionan dos paletas, una para el componente Y, y la otra para el componente U V, una bonificación puede consistir en modificar el coste de bits de un elemento Y de 8 bits a 4 bits, y el coste de bits de un elemento U V de 16 bits a 6 bits.
Puesto que puede valer la pena predecir la paleta para la unidad de codificación procesada primero, una variante incluye reemplazar la última paleta utilizada por una paleta predeterminada, de modo que la paleta predeterminada se utilice como un predictor de paleta para la primera unidad de codificación de la línea de cTb . Se pueden considerar diversas formas de generar una paleta predeterminada (el codificador y el descodificador funcionan de la misma manera). Como ejemplo, la paleta por defecto puede incluir un conjunto de entradas predeterminadas correspondientes a valores de color distribuidos por igual en un espacio de color. La equidistribución puede afectar a los tres componentes de color. No obstante, en una realización preferente, los valores de color pueden estar distribuidos por igual sobre el componente Y. Y los valores de los componentes U y V son fijos, por ejemplo, en el valor medio de los componentes U o V en el espacio de color. Los valores U y V pueden ser calculados directamente a partir de la profundidad de bits de los componentes, asignando el valor de profundidad de bits/2 o profundidad de bits >> 1, donde “>>” es el operador de desplazamiento hacia la derecha. Un ejemplo de la distribución a lo largo del componente Y es la siguiente fórmula: YNivel = (Nivel * profundidad de bits) / Previous_Palette_size,
donde Nivel corresponde al índice de entrada de la tabla predeterminada tal como se explicó anteriormente (y, por lo tanto, se incrementa en uno en cada nuevo valor Y), la profundidad de bits es la profundidad de bits del componente Y. Se debe tener en cuenta que Previous_Palette_size puede ser igual a la última paleta utilizada, o a un Palette_size promedio calculado a partir del último CTB descodificado o línea de CTB o trama, o igual a un número predefinido, tal como 4.
Según otras realizaciones, para obtener el predictor de paleta, los predictores de paleta de referencia son asociados con entidades de codificación respectivas de unidades de codificación que forman la imagen, tales como CTB, líneas de CTB, segmentos, fragmento de segmento, tesela, trama o secuencia. Y el predictor de paleta para el bloque de píxeles actual es el predictor de paleta de referencia asociado con la entidad de codificación que incluye el bloque de píxeles actual. Estas realizaciones pueden requerir que el predictor de paleta de referencia sea transmitido en el flujo de bits para cada entidad de codificación.
La figura 15 muestra el proceso de descodificación basado en predictores de paleta de referencia transmitidos en el flujo de bits. Esta figura está basada en la figura 14 y, por lo tanto, los bloques 1501 a 1514 son similares a los bloques 1401 a 1414, excepto en que el módulo 1506 construye la paleta utilizando el predictor 1516 de paleta de referencia descodificado a partir del flujo de bits. Por supuesto, se realiza un proceso correspondiente en el codificador para incluir el predictor de paleta de referencia en el flujo de bits.
Al comienzo de la descodificación de un CTB (o la descodificación de una línea de CTB, segmento, trama, etc.), el predictor 1516 de paleta de referencia se extrae del flujo de bits en la etapa 1515. Se debe tener en cuenta que la utilización del predictor de paleta de referencia puede conducir a que no se proporcione ninguna paleta en el flujo de bits para ninguna unidad de codificación de la entidad de codificación actual CTB. En este caso, se puede proporcionar un indicador en el flujo de bits y, por lo tanto, ser extraído del mismo para señalizar no descodificar ninguna paleta para las unidades de codificación. En una variante, este indicador puede ser reemplazado utilizando el valor 0 para Palette_size, para indicar al descodificador que no se descodificará ninguna paleta para la unidad de codificación actual. Esta variante requiere que Palette_size sea igual a decodedSize en lugar de decodedSize 1 en la etapa 1003 anterior. Para ahorrar cualquier bit utilizado para señalizar la utilización del predictor de paleta de referencia, el predictor de paleta de referencia se puede transmitir al final del CTB si, como mínimo, una CU del CTB actual está codificada utilizando el modo de codificación de paleta.
En cualquier caso, el predictor de paleta de referencia se extrae y descodifica si es necesario para descodificar una de las unidades de codificación de CTB actual. El módulo 1502 extrae el modo de predicción. Si no es el modo de paleta (prueba 1503), el descodificador descodifica la CU con el modo correspondiente 1517. En caso contrario (el modo de paleta), la paleta para la unidad de codificación actual se descodifica tal como en la figura 7. Sin embargo, la construcción 1506 de la paleta 1507 en esta realización depende del predictor 1516 de paleta de referencia. A continuación, se describen ejemplos de esta dependencia y de los elementos de sintaxis 1505 correspondientes. Cuando se descodifica la unidad de codificación (1517, 1520) tal como se describió anteriormente para las figuras 7 y 13, el descodificador comprueba si esta fue o no la última unidad de codificación del CTB en la etapa 1518. Se debe tener en cuenta que esta figura no contiene la descodificación de sintaxis completa de un CTB que puede involucrar otros elementos de sintaxis. Si esta no fue la última unidad de codificación, el modo de predicción para la siguiente CU se extrae en la etapa 1502. Si esta fue la última unidad de codificación, se llevan a cabo los procesos restantes para descodificar completamente el CTB (no se muestra) y el descodificador verifica si este fue o no el último CTB de la trama en la etapa 1519. Si este no fue el último CTb , el predictor de paleta de referencia para el siguiente CTB se extrae del flujo de bits en la etapa 1515 descrita anteriormente. Por supuesto, esta figura no está completa y se han omitido varias etapas de descodificación que no conciernen a la presente invención.
Tal como se describe, el predictor de paleta de referencia transmitido se utiliza como el predictor de la paleta utilizado para cada unidad de codificación CU en el CTB actual. Tal como se describe a continuación, el predictor de paleta de referencia se puede utilizar para predecir elementos de la paleta o, en una variante, el predictor de paleta de referencia se puede utilizar como la paleta para la unidad de codificación actual. En ese caso, el predictor 1516 de paleta de referencia se transmite directamente al módulo 1509, lo que hace que el módulo 1507 ya no sea necesario.
La selección del predictor de paleta de referencia en el codificador puede contribuir a la eficiencia de codificación. Se pueden utilizar varios algoritmos para determinar el “mejor” predictor de paleta de referencia. Por ejemplo, la paleta utilizada para predecir la unidad de codificación mayor en el CTB actual se puede seleccionar como el predictor de paleta de referencia para el CTB. En otro ejemplo, la paleta que minimiza un criterio de distorsión de velocidad de las paletas utilizadas para predecir todas las unidades de codificación que componen el CTB actual puede ser determinada y utilizada como el predictor de paleta de referencia para el CTB. Por supuesto, se pueden utilizar otros criterios de selección.
Según otras realizaciones para obtener el predictor de paleta, el predictor de paleta para la unidad de codificación actual incluye entradas correspondientes a valores de píxeles próximos a la unidad de codificación actual. En estas realizaciones, el predictor de paleta para la CU actual se extrae de los píxeles próximos, tal como se muestra a modo de ejemplo en la figura 16.
En este ejemplo, los píxeles seleccionados son píxeles contiguos a los lados superior e izquierdo del bloque de píxeles actual, debido a que pertenecen a la zona causal tal como se definió anteriormente haciendo referencia a la figura 3. Estos píxeles contiguos se muestran en color gris en la figura. En concreto, los píxeles seleccionados son un número fijo, por ejemplo, los mismos tres píxeles (píxeles 1601 a 1603 de color gris oscuro en la figura) que los utilizados para el modo de predicción INTRA, es decir, los píxeles que están situados, con respecto a la unidad de codificación actual contigua, arriba a la izquierda, arriba a la derecha y abajo a la izquierda. Por supuesto, se puede considerar otro número de píxeles. Preferentemente, los píxeles relevantes a seleccionar son conocidos tanto por el codificador como por el descodificador, de modo que no se necesite información de señalización adicional. No obstante, algunas realizaciones pueden contemplar la selección de píxeles específicos en el codificador y, a continuación, señalizar, en el flujo de bits, el número de píxeles seleccionados y esos píxeles seleccionados.
En una realización, se considera un conjunto limitado de píxeles próximos. Por ejemplo, este conjunto de píxeles se selecciona para que los píxeles tengan la mayor distancia espacial. Esto crea diversidad y evita píxeles duplicados.
La figura 17 muestra la generación del predictor de paleta para la unidad de codificación actual, basándose en los píxeles vecinos. Tal como se señaló anteriormente, el orden de los elementos en el predictor de paleta es importante. Esto requiere la definición de clases para los elementos de paleta (en este caso, píxeles vecinos). Este proceso de determinación se puede realizar tanto en el codificador como en el descodificador.
En una realización, los píxeles vecinos 1701 se clasifican 1702. Se debe tener en cuenta que los píxeles vecinos pueden incluir píxeles que no son directamente contiguos a la unidad de codificación actual. Cada píxel vecino del conjunto considerado de píxeles vecinos se asocia con una clase (es decir, con un índice de entrada) dependiendo de su distancia de color de las entradas ya existentes en el predictor de paleta, por ejemplo, utilizando los criterios de la etapa 1207 en la figura 12. En una realización, las clases están definidas por los tres píxeles 1601 a 1603 mostrados en la figura 16. Esto tiene como resultado un predictor 1703 de paleta no ordenado. Además, durante la clasificación 1702, se cuentan las ocurrencias 1704 de cada clase.
Basándose en el predictor 1703 de paleta no ordenado y en las ocurrencias 1704, el predictor 1706 de paleta con entradas ordenadas se construye en la etapa 1705, por ejemplo, teniendo primero las entradas más frecuentes. Se debe tener en cuenta que las entradas que tienen ocurrencias no relevantes (por ejemplo, por debajo de un umbral) pueden ser descartadas del predictor de paleta.
En una realización, dos píxeles de la misma clase tienen exactamente el mismo valor de píxel (el criterio utilizado para la clasificación no implica un valor absoluto y requiere un umbral TH establecido en cero). Se debe tener en cuenta que en las imágenes objetivo de RExt de HEVC (y por lo tanto, del modo de paleta) que incluyen texto o capturas de pantalla, hay pocos valores diferentes en unidades de codificación contiguas. Por lo tanto, es relevante clasificar los píxeles basándose en una identidad de valores de píxel.
La figura 18 muestra un ejemplo de clasificación. 1801 muestra la unidad de codificación actual con píxeles contiguos que tienen un primer valor de píxel (representado por la clase ’1‘) o un segundo valor de píxel (representado por la clase ’2‘) o un tercer valor de píxel (representado por la clase ’3’). El conjunto de píxeles vecinos se representa con sus clases relacionadas en la tabla 1802. La tabla 1802 proporciona las ocurrencias asociadas con cada clase. El predictor de paleta que se construye a partir de la tabla 1802 se muestra en la tabla 1803, ordenando las clases según sus ocurrencias y eliminando las entradas de predictor no significativas (en este caso, la entrada corresponde a la clase ’1‘ debido a su bajo número de ocurrencias, concretamente, 2 en el ejemplo). Para eliminar una entrada de predictor, el algoritmo puede tener en cuenta el número de píxeles vecinos, el número de clases y/o las ocurrencias de los píxeles vecinos más probables.
Según otras realizaciones para obtener el predictor de paleta, la paleta actual tiene entradas ordenadas, y predecir la paleta actual utilizando el predictor de paleta comprende predecir una entrada de la paleta actual a partir de una entrada anterior de la misma paleta actual. En otras palabras, el predictor de paleta, cuando se procesa una entrada determinada de la paleta, está compuesto de (incluye) las entradas que son anteriores a la entrada determinada en la paleta de colores que se está construyendo actualmente. Por lo tanto, la paleta actual está intra predicha.
Esto se ilustra mediante la figura 22, que muestra el proceso de descodificación para obtener la paleta predicha basándose en señalización en el flujo de bits cuando sea apropiado. La figura 22 solo reproduce la parte correspondiente a la parte superior izquierda de la figura 10, es decir, la generación de la paleta predicha. Por lo tanto, hay que llevar a cabo la parte restante de la figura 10 para obtener los elementos de sintaxis que definen el predictor 91 de bloques.
Tal como se muestra, el Palette_size se descodifica y calcula en las etapas 2201 y 2202. A continuación, se descodifica el primer elemento de paleta. Puesto que la paleta está intra predicha, el primer elemento de paleta no se predice y, por lo tanto, se descodifica directamente a partir del flujo de bits. A continuación, la variable i proporcionada para considerar sucesivamente cada entrada de paleta se iguala a 1 en la etapa 2204. Los otros elementos de paleta se descodifican a través de las siguientes etapas. En concreto, para cada elemento de paleta, se descodifica un indicador, concretamente, Use_Pred, en la etapa 2206 para determinar si (prueba 2207) el elemento de paleta en el índice i utiliza predicción Intra o no. Si no utiliza predicción Intra, el elemento de paleta se descodifica directamente desde el flujo de bits en la etapa 2208. En caso contrario, el índice j correspondiente al índice del predictor del elemento de paleta en la paleta actual se descodifica desde el flujo de bits en la etapa 2210. Se debe tener en cuenta que el codificador puede tener un índice j codificado con respecto al índice i para ahorrar bits, en cuyo caso el descodificador funciona de manera inversa. A continuación, el residuo es descodificado en la etapa 2211 y el elemento de paleta Pal[i] se iguala a Res[i] Pal[j] y se añade a la paleta en la etapa 2212. A continuación, el índice i es incrementado en uno en la etapa 2209 para considerar el siguiente elemento de paleta. Una vez se han descodificado todos los elementos de paleta (prueba 2205), el proceso continúa en la etapa 1008 de la figura 10.
En una realización, el elemento predictor del elemento de paleta i es el elemento de paleta i-1, es decir, la entrada de paleta que precede directamente al elemento de paleta actual en la paleta actual. En dicho caso, se puede omitir el módulo 2210 y el elemento de paleta Pal[i] se iguala a Res[i] Pal[i-1] cuando se predice. En una realización, todas las entradas de paleta, excepto la primera, se predicen a partir del elemento de paleta que las precede directamente en la paleta actual. En dicho caso, el indicador Use_pred se puede omitir, ya que el descodificador sabe cómo obtener/descodificar los elementos de paleta utilizando predicción Intra. Esto significa que se pueden omitir los módulos 2206 y 2208.
Para mejorar la eficiencia de codificación de la predicción Intra del elemento de paleta, el elemento de paleta puede ser ordenado según sus valores y no según sus apariciones en el codificador.
Según otras realizaciones, la paleta actual se predice a partir de entradas de dos o más paletas. Esto significa que un predictor de paleta se podría construir a partir de dos o más paletas. En concreto, las dos o más paletas pueden ser fusionadas total o parcialmente para formar un nuevo predictor de paleta para la paleta actual.
Esto se debe a que los mecanismos de predicción introducidos anteriormente pueden depender de una sola paleta seleccionada, como predictor de paleta, a partir de, por ejemplo, un conjunto de paletas utilizadas para predecir bloques de píxeles procesados previamente. Esto puede afectar a la calidad del predictor de paleta. Por ejemplo, si entre sucesivos bloques de píxeles B1, B2 y B3, los bloques B1 y B3 están compuestos cada uno por muchos píxeles diferentes, pero B2 está compuesto por pocos píxeles diferentes, el hecho de utilizar la paleta directamente anterior como un predictor de paleta para la siguiente paleta lleva a utilizar la paleta de B2 (que tiene pocos elementos de paleta) como un predictor de paleta para B3. Pero esto reduciría drásticamente la cantidad de elementos en el predictor de paleta para B3 y, por lo tanto, la capacidad de predecir eficientemente la paleta para B3.
Los inventores han descubierto que merece la pena combinar dos o más paletas para construir una nueva paleta para procesar un nuevo bloque de píxeles.
La figura 24 es un diagrama de flujo que muestra etapas generales para construir un predictor de paleta a partir de dos o más paletas ya existentes. Las paletas existentes pueden incluir la totalidad o una parte de la paleta actual, los últimos predictores de paleta (incluidos los predictores de paleta de referencia), paletas vecinas espacial o temporalmente y una paleta predeterminada (por ejemplo, que contiene elementos de paleta predeterminados, tal como aquel cuyos componentes son todos 0).
En el proceso de la figura 24, P representa el número de paletas ya existentes que se tienen en cuenta; palü, ..., paÍP-1 son las paletas correspondientes; “pred” es el predictor de paleta formado por el proceso, siendo Nmax su número máximo de elementos de paleta; Jk, ke[0; P] es el número de elementos en la paleta palk; “i” es una variable que representa un contador de paleta para considerar sucesivamente cada una de las P paletas palü, ..., palP -1; “n” es una variable que representa el número actual de elementos de paleta en el predictor de paleta “pred” que se está construyendo; y “j” es una variable que representa un contador de elementos de paleta para considerar sucesivamente cada elemento de paleta de la paleta actual pali.
Las paletas pab, ..., palP-1 pueden ser ordenadas, por ejemplo, para procesar primero las paletas más recientes, por ejemplo, con índices bajos. Esto es para agregar elementos más recientes lo más cerca posible del principio en el predictor de paleta.
El proceso comienza en la etapa 2400, inicializando la primera paleta a considerar
Figure imgf000018_0001
y el elemento predictor actual en el predictor de paleta “pred” a construir (“n” = 0). A continuación, el proceso entra en los bucles para considerar sucesivamente cada paleta pali.
En la etapa 2401, el contador de elementos de paleta “j” se inicializa en 0 para considerar el primer elemento de paleta de la paleta actual pali.
En la etapa 2402, se comprueba si el elemento de paleta actual p a lj de paleta actual cumple un criterio concreto, para activar o no la adición de este elemento de paleta al predictor de paleta “pred”.
El criterio de activación puede estar basado, simplemente, en comparar pali[j] con los elementos ya agregados en el predictor de paleta “pred” (es decir, pred[0] ... pred[n-1]), para decidir la adición del elemento de paleta actual a “pred” si pali[j] es diferente de pred[0] ... pred[n-1], y decidir no agregar el elemento de paleta actual a “pred” si pali[j] es el mismo que un elemento de “pred”. Se debe tener en cuenta que la comparación entre dos elementos p a lj y pred[k] puede ser una comparación estricta o una similitud estricta (igualdad estricta entre sus componentes) o una comparación/similitud flexible (las diferencias entre los componentes correspondientes de los elementos están por debajo de respectivos umbrales). En una variante, solo una cantidad específica de los n elementos pred[k] puede estar involucrada en la comparación, dependiendo la cantidad exacta del valor de “n”. Esto se debe a que el número de comparaciones puede aumentar rápidamente. Esto, utilizando, por ejemplo, n/2 o, como máximo, 4 elementos, involucrados en la comparación, puede ser un buen equilibrio entre la eficiencia y la complejidad de la codificación.
Sin embargo, se pueden involucrar otros criterios de activación, tal como un mapa de bits de indicadores Use_pred, tal como se describe a continuación haciendo referencia a las figuras 19 a 21. Estos indicadores Use_pred son generados por un codificador para señalizar qué valores se pueden reutilizar como un valor en la paleta actual, por ejemplo, comparando una por una cada una de las entradas de la paleta con las entradas de predictor de paleta. En concreto, este enfoque permite ventajosamente no transmitir explícitamente o no duplicar elementos de paleta. El número de indicadores depende de los tamaños del predictor de paleta y de cómo se señalizan los elementos. El resultado de la etapa 2402 es que se toma la decisión de agregar o no el elemento de paleta actual p a l j al predictor de paleta “pred”.
Si se adopta la decisión de no agregarlo, el proceso pasa a la etapa 2405.
Si se adopta la decisión de agregarlo, el proceso pasa a la etapa 2403, donde el elemento predictor actual pred[n] se establece en el elemento de paleta actual p a l j El siguiente elemento predictor en “pred” se selecciona a continuación incrementando “n”.
A continuación, la etapa 2404 consiste en comprobar si se han determinado o no un número máximo de elementos predictores de “pred”. Si no lo han sido, el proceso pasa a la etapa 2405. En caso contrario, el predictor de paleta “pred” se determina completamente y el proceso finaliza en la etapa 2409.
En la etapa 2405, el siguiente elemento en la paleta actual se selecciona incrementando el contador de elementos de paleta “j”.
En la etapa 2406, se comprueba si todos los elementos de paleta de la paleta actual pali han sido o no considerados y procesados: j < Ji. Si no, el proceso vuelve a la etapa 2402 para procesar el siguiente elemento de paleta p a l j Si se ha procesado toda la paleta actual pali, el proceso pasa a la etapa 2407, donde el contador de paleta “i” es incrementado para considerar la siguiente paleta, si aún no han sido procesadas todas las paletas pato, ..., palP-1 (comprobación en la etapa 2408).
Si se han procesado todas las paletas pato, ..., palP -1, el proceso finaliza en la etapa 2409.
Se debe tener en cuenta que las diversas realizaciones anteriores para obtener el predictor de paleta pueden ser combinadas, en parte o en su totalidad, para proporcionar varias bases para predecir todos o algunos de los elementos de paleta.
Pasando a continuación a los elementos de sintaxis para describir realmente la predicción de la paleta al descodificador, a continuación, se hace referencia a las figuras 19 a 21, aunque la figura 22 descrita anteriormente ya introduce un mecanismo para definir la predicción de la paleta. Se considera que el predictor de paleta se recupera y se conoce su tamaño (Predictor_of_palette_size).
Según realizaciones relativas a los elementos de sintaxis, predecir la paleta actual utilizando el predictor de paleta comprende obtener un mapa de bits de indicadores, cada uno de los cuales define si se selecciona o no una entrada correspondiente en el predictor de paleta, como una entrada de la paleta actual. Como resultado, además de la información que hace posible que el descodificador recupere el predictor de paleta apropiado, solo es necesario enviar el mapa de bits al descodificador. Este mapa de bits puede ser enviado en sustitución de la paleta definida en RExt de HEVC para la unidad de codificación actual.
La sintaxis del mapa de bits contiene M indicadores, siendo M igual al número de elementos en el predictor de paleta. El indicador de orden i descodificado define si el elemento i del predictor de paleta se utiliza o no para llenar (predecir) la paleta actual para la unidad de codificación actual. En una variante, el mapa de bits puede estar limitado a un número menor de indicadores, desde un indicador correspondiente al primer elemento en el predictor de paleta hasta un indicador correspondiente al último elemento que tiene que ser utilizado como un predictor del elemento. El tamaño del mapa de bits se especifica en el flujo de bits de manera similar a como se especifica el tamaño de la paleta en el flujo de bits de RExt de HEVC.
Por ejemplo, los elementos del predictor de paleta que están asociados con un indicador (bit) igual a 1 se copian en la paleta actual en la primera posición disponible, manteniendo su orden.
En otra realización, se agregan entradas adicionales al final de la paleta actual que tiene las entradas seleccionadas del predictor de paleta. Por ejemplo, primero se descodifica el mapa de bits desde el flujo de bits y las entradas correspondientes del predictor de paleta se copian en la paleta actual, a continuación, se pueden agregar píxeles adicionales al final de la paleta actual de la misma manera que la transmisión convencional de paleta.
En una realización que busca proporcionar el elemento de paleta predicho como elemento de paleta adicional, la determinación del Palette_size se adapta para ser incrementada por el número de elementos de paleta predichos: para ello, Palette_size se iguala al tamaño descodificado el número de indicadores establecido igual a 1 en el mapa de bits (Palette_pred_enable_size). Si Palette_pred_enabled_size es igual a 0, Palette_size se iguala al tamaño descodificado 1, tal como se describe en la etapa 1003.
La figura 19 muestra la descodificación de la sintaxis de paleta de estas realizaciones basándose en el mapa de bits de indicadores. Al igual que en la figura 22, la figura 19 se basa en la figura 10, pero solo se muestra la parte relacionada con la descodificación de la paleta.
En primer lugar, el predictor de paleta 1902 se obtiene en la etapa 1901, según cualquiera de las realizaciones descritas anteriormente. Además, también se obtiene el Predictor_of_palette_size 1903. El módulo 1905 descodifica N indicadores del flujo de bits 1904, donde N = Predictor_of_palette_size.
Para cada indicador igual a 1, el elemento correspondiente del predictor de paleta se agrega a la paleta actual 1907 en el primer índice disponible, durante la etapa 1906. Palette_pred_enabled_size 1908, que representa el número de indicadores igual a 1 en el mapa de bits, es transmitido al módulo de decisión 1910. El tamaño del resto de la paleta también se descodifica a partir del flujo de bits 1909. El módulo de decisión 1910 determina si Palette_pred_enabled_size es o no igual a 0. Si es igual a 0, que significa que no hay un elemento de paleta predicho en la paleta actual, el Palette_size se iguala al decodedSize 1 en la etapa 1911, y la variablc i utilizada para considerar sucesivamente cada entrada de la paleta actual se iguala a 0 en la etapa 1912. Si Palette_pred_enabled_size es diferente de 0, que significa que hay, como mínimo, un elemento de paleta predicho en la paleta actual, el palette_size se iguala al tamaño descodificado Palette_pred_enabled_size en la etapa 1913, y la variable i se iguala a Palette_pred_enabled_size. A continuación, el bucle de descodificación de elementos de paleta se realiza mediante las etapas 1915, 1916 y 1917 correspondientes a las etapas 1005, 1006 y 1007 de la figura 10. Este bucle se detiene cuando la variable i es igual a Palette_size. Los elementos de paleta descodificados 1916 se agregan al final de la paleta actual 1907, es decir, después de los elementos de paleta predichos. En una realización, Palette_size siempre se iguala al tamaño descodificado Palette_pred_enabled_size en la etapa 1913 para simplificar la implementación, de modo que se pueden omitir los módulos 1910, 1911 y 1912.
Se debe tener en cuenta que los valores “0” y “1” para los indicadores se pueden invertir, lo que significa que indicador = 1 se utiliza cuando el elemento correspondiente en el predictor de paleta no se utiliza para predecir un elemento de la paleta en construcción (lo contrario para indicador = 0).
Esta inversión del significado de los valores de los indicadores es útil para evitar un fenómeno denominado “emulación de código de inicio”: si una serie de bytes coincide con lo que se denomina un código de inicio, la serie tiene que ser transformada para que ya no coincida el código de inicio y tener un código de inicio único, por medio de un proceso de expansión, que aumenta el tamaño del flujo de bits. Utilizando 1 en lugar de 0, se evita este aumento de tamaño.
La figura 20 muestra el proceso de la figura 19 con un ejemplo. El predictor de paleta obtenido utilizando cualquiera de las realizaciones descritas anteriormente haciendo referencia a las figuras 14 a 18 es la tabla 2001, que contiene cinco elementos que asocian un índice o nivel con valores de color. Los indicadores descodificados del mapa de bits se representan en la tabla 2002. En este ejemplo, dos indicadores se igualan a 1: uno para el nivel 0 y otro para el nivel 2 del predictor de paleta. Los elementos de paleta correspondientes se agregan de este modo a la paleta actual 2003 con el primer nivel disponible, respectivamente el nivel 0 y el nivel 1. A continuación, las nuevas entradas de paleta pueden ser descodificadas del flujo de bits, tal como se propone en RExt de HEVC, y agregadas a las posiciones 2 y 3.
Se puede observar que cuando se transmite el predictor de paleta, solo se necesitan los indicadores (mapa de bits) correspondientes a los predictores de paleta. Para reducir la señalización, se puede utilizar el mismo mapa de bits para todas las unidades de codificación que pertenecen al mismo CTB, segmento, tesela, fragmento de segmento, trama o secuencia para el que se transmite un único predictor de paleta de referencia.
El mapa de bits de los indicadores Use_pred se ha definido en la descripción anterior haciendo referencia a las figuras 19 y 20. A continuación se hace referencia a la figura 24, y, más específicamente, a la etapa 2402, en la que se utiliza un criterio de activación para autorizar la adición de un elemento de paleta actual pali[j] para el predictor de paleta “pred” en construcción. Tal como se introdujo anteriormente, este criterio de activación puede involucrar el mapa de bits de los indicadores Use_pred.
En algunas realizaciones, el predictor de paleta en construcción incluye entradas de una primera paleta que se ha predicho basándose en una segunda paleta (utilizada como predictor) utilizando un mapa de bits de indicadores tal como se ha descrito anteriormente, del que cada indicador define si una entrada correspondiente en la segunda paleta se selecciona o no como una entrada para predecir una entrada en la primera paleta. Una particularidad de esta realización es que el predictor de paleta se construye incluyendo también las entradas de la segunda paleta correspondientes a un indicador del mapa de bits que no define ninguna selección de la entrada para predecir la primera paleta.
La figura 25 muestra una implementación a modo de ejemplo de dicho enfoque.
Se muestran tres unidades de codificación, CU1 a CU3, que pueden ser unidades de codificación consecutivas que se procesan en una imagen actual.
La referencia 2500 representa la paleta utilizada para procesar (codificar o descodificar) CU1. Esta paleta puede haber sido codificada en el flujo de bits (y, por lo tanto, recuperada por el descodificador) o predicha utilizando cualquier mecanismo descrito en la presente solicitud.
Utilizando el mecanismo de generación de predictores basado en la última paleta utilizada tal como se describió anteriormente, esta paleta 2500 se utiliza como un predictor de paleta para construir la paleta 2501 para procesar CU2. La predicción de la paleta 2501 se basa en el mapa de bits 2506 de los indicadores Use_pred, tal como se describió anteriormente. Se debe recordar que los indicadores adoptan el valor 1 o 0 dependiendo de la utilización o no, respectivamente, del elemento correspondiente para predecir la paleta de una CU siguiente. En una variante, indicador = 1 puede significar no seleccionar el elemento correspondiente, mientras que indicador = 0 puede significar seleccionar el elemento para predecir la paleta de la siguiente UC.
Como resultado, en el presente ejemplo, los elementos primero, tercero, cuarto y quinto del predictor de paleta 2500 se copian en la paleta 2501 tal como se define en el mapa de bits 2506. El segundo elemento 2502 no se reutiliza (indicador = 0 en el mapa de bits 2506). Se debe tener en cuenta que se puede haber añadido un elemento 2503 de paleta adicional al final de la paleta 2501 que se está construyendo, basándose en los mecanismos descritos anteriormente (por ejemplo, transmitido explícitamente en el flujo de bits).
Asimismo, la paleta 2501 se utiliza como un predictor de paleta para construir la paleta para procesar CU3. En el ejemplo de la figura, todos los elementos de paleta 2501 se copian (etapa 2504) en la paleta para CU3. En una variante de este ejemplo, se puede proporcionar un mapa de bits (no mostrado) para identificar qué elementos de paleta 2501 deben ser copiados en la paleta para CU3, de manera similar al mapa de bits 2506 que define los elementos que se copiarán en la paleta 2501.
Específicamente para esta realización de la invención, el predictor 2500 de paleta también se utiliza como un predictor para construir la paleta para procesar CU3.
Para conseguir dicha construcción, se construye un predictor 2505 de paleta a partir de las paletas 2500 y 2501. Tal como se mencionó anteriormente, todos los elementos de paleta 2501 se copian (etapa 2504) en el predictor 2505 de paleta. En este ejemplo, las entradas del predictor de paleta 2500 correspondiente a un indicador del mapa de bits que no define ninguna selección de la entrada para predecir la paleta 2501 (es decir, normalmente con indicador = 0, por ejemplo, el elemento 2502), son agregadas (etapa 2508) al predictor 2505 de paleta. Esto se debe a que las otras entradas del predictor de paleta 2500 ya están en el predictor 2505 de paleta gracias a la etapa de copia 2504. Esta selección del elemento 2502 se puede realizar muy rápidamente gracias a los indicadores en el mapa de bits 2506.
Se puede proporcionar un mapa de bits para predecir, basándose en el predictor 2505 de paleta, la paleta para procesar CU3.
Por supuesto, el predictor 2505 de paleta también puede ser directamente la paleta para procesar CU3. Sin embargo, el predictor 2505 de paleta crece continuamente a medida que incluye todos los elementos definidos en paletas anteriores. Este crece hasta un límite a partir del cual los elementos del predictor de paleta que ya no le caben no se agregan al predictor, a pesar del valor de su indicador Use_pred.
La adición del elemento 2502 se realiza, preferentemente, al final del predictor 2505 de paleta. Se puede observar directamente que el predictor de paleta resultante se enriquece en comparación con las situaciones descritas anteriormente.
Una ventaja concreta de agregar los elementos no utilizados al final del predictor de paleta es que los elementos están ordenados aproximadamente por su antigüedad y su nivel de utilización. Esto tiene como resultado tener, como últimos elementos en el predictor de paleta, los que son menos útiles y los que tienen más probabilidades de ser eliminados. Por lo tanto, se puede adoptar una decisión de eliminar algunos elementos del predictor de paleta en construcción, por ejemplo, basándose en el número de usos de este elemento cuando se procesan hasta los últimos M (M, entero por definir) bloques de píxeles utilizando las respectivas paletas que incluyen este elemento.
Por supuesto, este proceso se puede adaptar para poner los elementos no utilizados primero en el predictor de paleta, o incluso intercalados con algunos de los elementos de la paleta 2401.
Se debe tener en cuenta que la selección de elementos no utilizados de una paleta anterior garantiza que los elementos son únicos y, por lo tanto, los indicadores Use_pred no son redundantes. De este modo se maximiza la eficiencia del predictor de paleta.
El enfoque anterior de la invención que implica la construcción de un predictor de paleta a partir de dos o más paletas solo afecta a la etapa 1901 de construcción del predictor de paleta de la figura 19.
La figura 26 muestra una realización de la etapa 1901 para construir un predictor de paleta, tal como el predictor 2505, con el enfoque anterior, realización que es más específica que las etapas generales descritas anteriormente haciendo referencia a la figura 24. Dicho predictor 2505 de paleta se utiliza para construir la paleta para procesar CU3, basándose en indicadores Use_pred de un mapa de bits correspondiente (no mostrado).
Para resumir este proceso haciendo referencia al ejemplo de la figura 25, este consiste en copiar los elementos de paleta CU2 2501 representados por una matriz “pal” en una matriz de elementos predictores “pred” (etapa 2504). “pred” es una memoria intermedia temporal que se utiliza para copiar los elementos de la matriz de paleta “pal”. Al final del proceso, “pred” es el predictor de paleta.
Además, los posibles elementos de relleno (tal como 2502) se añaden a “pred”, además de los elementos ya copiados.
La estructura “pred” contiene un máximo de Nmax elementos. Idealmente, Nmax puede ser mayor que el número máximo de elementos en una paleta. Se ha encontrado un buen compromiso entre la eficiencia de codificación y la memoria con Nmax = 64, es decir, el doble del tamaño máximo de una paleta en el ejemplo.
“pal” es una estructura que contiene Nact elementos, dedicada a almacenar la última paleta utilizada, es decir, la paleta 2501 en el ejemplo de la figura 25.
“último” es una estructura que contiene Núltimo elementos, dedicada a almacenar una paleta o predictor anterior, por ejemplo, el predictor de paleta de la última paleta utilizada, es decir, el predictor 2500 de paleta en el ejemplo de la figura 25. Los indicadores Use-pred correspondientes son almacenados también en la memoria, por ejemplo, en una matriz denominada “Use_pred”.
Se debe tener en cuenta que “pal” es la última paleta utilizada, mientras que “último” es el predictor de paleta de esta última paleta utilizada.
La etapa 2600 inicializa la copia de “pal” en “pred”: el primer elemento de cada estructura se selecciona estableciendo el contador de bucle “i” en 0. A continuación, el bucle de copia comienza en la etapa 2601: el elemento actual de “pred” se iguala al de “pred”. A continuación, la etapa 2602 hace posible seleccionar el siguiente elemento de “pal” incrementando el contador de bucle “i”.
A continuación, la etapa 2603 comprueba si se ha alcanzado o no el último elemento del predictor de paleta en construcción “pred” o de la paleta “pal” (dado Nmax para “pred” y Nact para “pal”).
Si no se ha alcanzado el último elemento, el proceso vuelve a la etapa 2601 para copiar el siguiente elemento. En caso contrario, el proceso pasa a la etapa 2604.
La contribución de la otra paleta, en este caso, la paleta anterior 2500, a la construcción del predictor 2505 de paleta según esta realización de la invención resulta de las siguientes etapas 2604 a 2608.
Estas etapas permiten la operación de relleno referenciada 2508 en la figura 25. Estas proporcionan elementos adicionales a “pred” además de los elementos resultantes de la copia de la paleta anterior “pal”.
La etapa 2604 selecciona el primer elemento de la paleta anterior “último” inicializando el contador de bucle “j” a 0. A continuación tiene lugar la etapa 2605, en la que se comprueba si se ha alcanzado o no el último elemento de “pred” o “último”.
Si no, el proceso continúa en la etapa 2606. En caso contrario, el proceso termina en la etapa 2609.
La etapa 2606 consiste en comprobar si el elemento actual “j” en “último” ya se ha reutilizado o no. Como en la etapa 2402 anterior, esto puede consistir en comprobar si el indicador Use_pred asociado con este elemento en la matriz “Use_pred” está establecido en 0 (no reutilizado) o 1 (reutilizado). En una variante, esta puede consistir en verificar si el elemento actual ya existe o no en la “pred” en construcción.
Si no se ha reutilizado, tiene lugar la etapa 2607, en la que se añade el elemento actual “j” desde “último” hasta “pred” (al final de “pred”). A continuación, se selecciona el siguiente elemento de “pred” incrementando “i”.
En cualquier caso, el siguiente elemento en “último” se selecciona incrementando “j” en la etapa 2608.
Cuando se han procesado todos los elementos de “último” o “pred”, el proceso finaliza en la etapa 2609.
Se debe tener en cuenta que para una siguiente iteración del proceso de la figura 26, la estructura “último” puede ser actualizada para almacenar el predictor de paleta de la paleta utilizada para CU3 (que está a punto de ser la última paleta utilizada), es decir, mediante la recepción de una copia de “pred” que almacena el predictor 2505 de paleta para CU3. Se debe tener en cuenta que la última paleta utilizada para la siguiente iteración (al procesar una nueva unidad de codificación CU4) es la paleta construida para CU3 a partir del predictor 2505 de paleta. Por lo tanto, esta es la paleta creada para CU3 que tiene que ser almacenada en “pal” para la siguiente iteración.
Tal como se mencionó anteriormente, esta realización proporciona una manera de construir cada nuevo predictor de paleta de tal manera que el tamaño del predictor de paleta tiende a aumentar continuamente. Por supuesto, el número Nmax proporciona un límite al tamaño máximo del predictor de paleta. No obstante, Nmax generalmente se selecciona bastante grande, a menudo mayor que el tamaño máximo de las paletas.
Se debe recordar que se debe proporcionar un mapa de bits de indicadores Use_pred al dispositivo cliente para realizar la predicción de la nueva paleta a partir del predictor de paleta recién construido. Cuanto mayor sea el valor de Nmax, mayor será el número de indicadores Use_pred extraños en el mapa de bits. Esto tiene un coste de transmisión, debido a que cada indicador cuesta, como mínimo, un bit.
Una manera de reducir estos costes externos, sin técnicas adicionales, es calcular Nmax como una combinación de Nact y Núltimo. Por ejemplo, Nmax se puede definir como fact * Núltimo, donde fact puede depender del formato de color y del componente o componentes afectados. Por ejemplo, fact = 6 para formato de color 4:4:4, mientras fact = 1 para luma y fact = 2 para croma en otros formatos.
Sin embargo, se ha encontrado que este enfoque no es la solución óptima, en concreto en el caso de la realización de la figura 26, donde se ha determinado que un NMAx óptimo es de aproximadamente 64.
Una realización como la propuesta en la figura 27 siguiente proporciona una sintaxis modificada para que los mapas de bits reduzcan su tamaño. En concreto, el mapa de bits de indicadores incluye, como mínimo, un elemento en una posición predefinida en el mapa de bits para señalizar si el mapa de bits incluye o no, después de la posición predefinida, como mínimo, un indicador adicional que define la selección de una entrada de un predictor de paleta para predecir otra paleta.
La figura 27 muestra una sintaxis modificada para los indicadores Use_pred asociados con un predictor de paleta (por ejemplo, el predictor 2505) para predecir una paleta (por ejemplo, la paleta para procesar CU3). Se debe tener en cuenta que la sintaxis modificada se puede utilizar para cualquier mapa de bits.
Un mapa de bits tal como se describió anteriormente (es decir, sin la sintaxis modificada) se muestra en la parte superior de la figura 27. Este incluye normalmente dos partes:
parte referenciada con 2700, que entremezcla indicadores establecidos en “0” e indicadores establecidos en “1”. La parte 2700 termina con el último indicador establecido en “1”. Esta parte define todos los elementos del predictor de paleta que se utilizan en la paleta predicha; y
la parte referenciada con 2701, que es la parte restante del mapa de bits, compuesta exclusivamente por indicadores establecidos en “0” y, por lo tanto, correspondientes a elementos no reutilizados. Se debe tener en cuenta que es habitual que la última parte del mapa de bits esté formada exclusivamente por “0” ya que los elementos correspondientes son usualmente los antiguos y menos utilizados.
Se debe tener en cuenta que esta división en dos partes se da a conocer en el presente documento solo con fines ilustrativos. El mapa de bits 2700 2701 se proporciona si no se implementa la sintaxis modificada según la invención.
Debajo de este mapa de bits, se muestra el mapa de bits con la sintaxis modificada. Se puede observar que su tamaño se ha reducido drásticamente.
La sintaxis modificada aprovecha la existencia de indicadores “0” 2702 consecutivos introduciendo elementos o bits adicionales en ubicaciones específicas en la serie de indicadores Use_pred.
Como ilustración, se han agregado los bits 2703 y 2704 para indicar si hay otros indicadores Use_pred establecidos en “1” posteriormente en el mapa de bits.
Estos bits adicionales se denominan indicadores de “fin de predicción” y no proporcionan indicación de si se selecciona o no una entrada correspondiente en el predictor de paleta como una entrada para predecir una entrada en la paleta actualmente en construcción. Por el contrario, estos indicadores adicionales desplazan los indicadores Use_pred hacia la derecha.
[0228] Como ejemplo, los indicadores de “fin de predicción” pueden adoptar el valor “0” para indicar que hay otros indicadores iguales a 1 en la parte restante del mapa de bits, mientras que pueden adoptar el valor “1” cuando no hay otros indicadores iguales a 1 en el resto del mapa de bits.
Con respecto al ejemplo de 2703 y 2704, el valor “0” del indicador 2703 indica que quedan elementos a predecir utilizando el mapa de bits, tal como demuestra que los indicadores estén establecidos en 1 en la subparte 2705, mientras que el indicador 2704 está establecido en 1, porque ya no hay ningún elemento predicho (todos los demás indicadores de Use_pred están establecidos en 0).
Como consecuencia, aunque se agregaron los indicadores 2703 y 2704, la subparte 2701 podría omitirse por completo, aunque solo se omite la subparte 2702 en el ejemplo, reduciendo de este modo los costes de transmisión. Las ubicaciones para los indicadores de “fin de predicción” adicionales están preferentemente predefinidas dependiendo de las propiedades del modo de paleta. No obstante, deben ser seleccionadas teniendo en cuenta lo siguiente:
merece la pena tener pronto un indicador de fin de predicción, para evitar enviar demasiados indicadores Use_pred para paletas pequeñas; y
merece la pena tener indicadores de fin de predicción a intervalos periódicos, idealmente potencias de 2, para analizar fácilmente el mapa de bits.
Teniendo esto en cuenta, una realización proporciona posiciones predefinidas para los indicadores de fin de predicción después de la ubicación del 4° indicador Use_pred, y, a continuación, cada ocho indicadores Use_pred comenzando después del indicador Use_pred 16°, a continuación, después del indicador Use_pred 24°, y así sucesivamente.
La parte inferior de la figura 27 es un diagrama de flujo que muestra las etapas para descodificar la sintaxis modificada de un mapa de bits.
Las etapas 2715 a 2717 del proceso son específicas de la sintaxis modificada.
La etapa 2710 inicializa el bucle de descodificación estableciendo el contador de bucle “i” en 0 y el número “j” de elementos predichos en 0.
A continuación, la etapa 2711 comprueba si queda o no algún elemento en el predictor de paleta (i < N), ya que puede suceder que el predictor esté vacío (N = 0), y que no quede ningún indicador por descodificar (una paleta que tiene un número máximo de elementos Nmax).
Si no hay más elementos para procesar, el proceso finaliza en la etapa 2718.
En caso contrario, el indicador Use_pred es descodificado para el elemento i del predictor de paleta en la etapa 2712.
En la etapa 2713, se determina si el elemento i se utiliza o no para predecir la paleta en construcción. Por ejemplo, un indicador establecido en 1 significa que se utiliza el elemento correspondiente i del predictor de paleta.
En caso afirmativo, el número “j” de elementos utilizados es incrementado en la etapa 2714.
En cualquier caso, el proceso continúa con la etapa 2715, en lugar de ir directamente a la etapa 2719, como lo haría sin la sintaxis modificada.
La etapa 2715 comprueba si está presente o no un indicador de “fin de predicción” (por ejemplo, 2703 o 2704) junto al indicador actual Use_pred de orden i. Por ejemplo, la comprobación puede estar basada en el valor de “i” (por ejemplo, si es 4, 16, 24, ..., tal como se sugirió anteriormente).
Si el siguiente indicador no es un indicador de “fin de predicción”, se reanuda un proceso normal yendo a la etapa 2719.
En caso contrario, el indicador de “fin de predicción” es descodificado en la etapa 2716. Una vez se ha descodificado, la etapa 2717 determina si el indicador de “fin de predicción” indica o no el final de la predicción, es decir, si está establecido en 1.
Si el indicador de “fin de predicción” no indica el final de la predicción, la descodificación de los indicadores Use_pred avanza a la etapa 2719 seleccionando el siguiente indicador Use_pred mediante incrementar el contador de bucle “i”.
Si el indicador de “fin de predicción” indica el final de la predicción, el proceso termina en 2718.
El resultado de este proceso es que se han obtenido todos los indicadores Use_pred relevantes para determinar qué elemento del predictor de paleta debe ser utilizado para predecir la paleta en construcción. Se debe tener en cuenta que los elementos para los que no se ha obtenido el indicador Use_pred tienen que ser considerados como no utilizados.
Según otras realizaciones con respecto a los elementos de sintaxis, predecir la paleta actual utilizando el predictor de paleta comprende obtener, como mínimo, una (posiblemente dos o más) entrada de residuo correspondiente a la diferencia entre, como mínimo, una entrada correspondiente de la paleta actual y una entrada del predictor de paleta. En estas realizaciones, un residuo entre el elemento de paleta actual y el predictor de paleta es transmitido en el flujo de bits. El residuo Res[i] es igual a Pal[i] - Pal_Pred[j],
donde Res[i] es el residuo para el nivel i, Pal[i] es el elemento de paleta actual para el nivel i, y Pal_Pred[j] es el elemento de predictor identificado por el nivel j. Se debe tener en cuenta que el predictor de paleta j normalmente tiene que ser transmitido a menos que sea conocido por el descodificador (por ejemplo, debido a que j es fijo con respecto a i, por ejemplo, j = i).
La descodificación del residuo para los tres componentes de color es diferente de la descodificación del elemento de paleta. De hecho, tal como se mencionó en la técnica anterior, un elemento de paleta es codificado con una longitud fija de N bits, con N = 3 * profundidad de bits. Para el residuo y para ahorrar bits, cada residuo de componente de color puede ser codificado con un código adaptativo, tal como un código de Golomb (de la misma manera que los coeficientes del residuo de bloque).
La figura 21 muestra un proceso de descodificación basado en tener dichos residuos entre los elementos de paleta y los predictores de elementos. Nuevamente, esta figura solo muestra la parte relacionada con la descodificación de la paleta. Además, para simplificar la figura, no se ha representado el flujo de bits.
El tamaño descodificado de la paleta se extrae del flujo de bits en la etapa 2101, y el Palette_size se iguala al tamaño descodificado 1 en la etapa 2102. La variable i utilizada para considerar sucesivamente cada entrada de la paleta se establece en 0 en la etapa 2103. A continuación, el bucle para descodificar la paleta comienza con la prueba 2104, para determinar si se han procesado o no todas las entradas de la paleta. Para el elemento de paleta i, se descodifica un indicador, Use_pred, a partir del flujo de bits en la etapa 2105, para determinar (prueba 2106) si el elemento de paleta i utiliza predicción o no. Si el elemento de paleta i no utiliza predicción, es descodificado en la etapa 2107 utilizando mecanismos convencionales, y se agrega a la paleta en un nivel igual a i. A continuación, la variable i se incrementa en uno en la etapa 2108, para considerar el siguiente elemento de paleta. Si el elemento de paleta i utiliza predicción, el índice de predictor j es descodificado a partir del flujo de bits en la etapa 2112. Se debe tener en cuenta que, para propósitos de eficiencia de codificación, la longitud del código utilizado para codificar el índice de predictor j depende de Predictor_of_Palette_size 2110. Por lo tanto, en paralelo, el predictor 2110 de paleta se obtiene tal como se ha descrito anteriormente, y también se obtiene el Predictor_of_Palette_size 2011. Una vez se conoce el índice de predictor j, el residuo Res[i] del elemento de paleta también es descodificado a partir del flujo de bits en la etapa 2113. A continuación, el elemento de paleta Pal[i] se calcula a partir de la fórmula Res[i] Pal_Pred[j] en la etapa 2114 utilizando el predictor de paleta Pal_Pred 2111. A continuación, el elemento de paleta Pal[i] es agregado a la paleta actual. A continuación, la variable i es incrementada en uno en la etapa 2108, para considerar el siguiente elemento de paleta. Al final de este proceso, la paleta actual ha sido descodificada.
En una realización, el índice j se iguala a i, en cuyo caso ya no es necesario que el índice j del predictor sea transmitido al descodificador. Por consiguiente, se puede omitir el módulo 2112. Además, se puede obtener un residuo para cada elemento de la paleta actual que tenga una entrada correspondiente con el mismo índice/nivel de entrada en el predictor de paleta. En este caso, si i es mayor o igual que Predictor_of_Palette_size, no se descodifica ningún residuo. Además, el indicador Use_pred ya no es necesario, puesto que el descodificador sabe qué elementos de paleta predecir basándose en Predictor_of_Palette_size. Por consiguiente, se pueden omitir los módulos 2105 y 2106. Estos enfoques reducen el número de bits de señalización necesarios para la predicción de paleta, eliminando la señalización de los predictores. Esto es útil cuando los elementos de paleta se ordenan según sus ocurrencias.
En las realizaciones, solo se predice uno o dos componentes de color de los tres (o más).
Anteriormente se han descrito varias maneras de obtener un predictor de paleta (figuras 14 a 18, 22 y 24 a 26) y varias maneras de definir y señalizar la predicción de la paleta desde el predictor de paleta (figuras 19 a 22 y 27). Estas realizaciones se pueden combinar, excepto por que, cuando la paleta actual está Intra predicha, solo se puede utilizar el enfoque de residuos (en caso contrario, dos entradas serían iguales en la paleta). En una realización preferente, el predictor de paleta es la última CU descodificada, con un restablecimiento en cada línea de CTB o en cada CTB; y el predictor de paleta se señaliza con un mapa de bits de indicadores, que indica si los elementos del predictor de paleta tienen que ser copiados o no en la paleta actual que se está construyendo.
La figura 23 es un diagrama de bloques esquemático de un dispositivo informático 2300 para la implementación de una o varias realizaciones de la invención. El dispositivo informático 2300 puede ser un dispositivo tal como un microordenador, una estación de trabajo o un dispositivo portátil ligero. El dispositivo informático 2300 comprende un bus de comunicación conectado a:
- una unidad central de procesamiento 2301, tal como un microprocesador, denominada CPU;
- una memoria de acceso aleatorio 2302, denominada RAM(Random Access Memory), para almacenar el código ejecutable del procedimiento de las realizaciones de la invención, así como los registros adaptados para registrar variables y parámetros necesarios para implementar el procedimiento de codificación o descodificación de, como mínimo, una parte de una imagen, según las realizaciones de la invención, pudiendo ser expandida la capacidad de memoria de la misma mediante una RAM opcional conectada a un puerto de expansión, por ejemplo;
- una memoria de solo lectura 2303, denominada ROM (Read Only Memory), para almacenar programas informáticos para implementar las realizaciones de la invención;
- habitualmente, una interfaz de red 2304 está conectada a una red de comunicación sobre la que se transmiten o reciben datos digitales para ser procesados. La interfaz de red 2304 puede ser una única interfaz de red, o estar compuesta por un conjunto de diferentes interfaces de red (por ejemplo, interfaces cableadas e inalámbricas, o diferentes tipos de interfaces cableadas o inalámbricas). Los paquetes de datos son escritos en la interfaz de red para su transmisión, o leídos desde la interfaz de red para su recepción, bajo el control de la aplicación de software que se ejecuta en la CPU 2301;
- se puede utilizar una interfaz de usuario 2305 para recibir entradas de un usuario o para mostrar información a un usuario;
- un disco duro 2306, denominado HD (Hard Disc) puede estar dispuesto como dispositivo de almacenamiento masivo;
- un módulo de E/S 2307 puede ser utilizado para recibir/enviar datos desde/hacia dispositivos externos tales como una fuente de vídeo o una pantalla.
El código ejecutable puede estar almacenado en memoria de solo lectura 2303, en el disco duro 2306 o en un medio digital extraíble, tal como, por ejemplo, un disco. Según una variante, el código ejecutable de los programas puede ser recibido por medio de una red de comunicación, a través de la interfaz de red 2304, para ser almacenado en uno de los medios de almacenamiento del dispositivo de comunicación 2300, tal como el disco duro 2306, antes de ser ejecutado.
La unidad central de procesamiento 2301 está adaptada para controlar y dirigir la ejecución de las instrucciones o partes de código de software del programa o programas, según las realizaciones de la invención, instrucciones que están almacenadas en uno de los medios de almacenamiento mencionados anteriormente. Después de que sea encendida, la CPU 2301 puede ejecutar instrucciones desde la memoria RAM principal 2302, relacionadas con una aplicación de software, después de que esas instrucciones hayan sido cargadas desde la ROM del programa 2303 o el disco duro (HD) 2306, por ejemplo. Una aplicación de software de este tipo, cuando es ejecutada por la CPU 2301, hace que se lleven a cabo las etapas de los diagramas de flujo mostrados en las figuras 14, 15, 17, 19, 21, 22 y 24 a 27.
Cualquier etapa de los algoritmos mostrados en las figuras 14, 15, 17, 19, 21, 22 y 24 a 27 puede ser implementada en software mediante la ejecución de un conjunto de instrucciones o de un programa mediante una máquina informática programable, tal como un PC (“Personal Computer”, ordenador personal), un DSP (“Digital Signal Processor”, procesador de señal digital) o un microcontrolador; o bien, ser implementada en hardware por una máquina o un componente dedicado, tal como una FPGA (“Field-Programmable Gate Array”, matriz de puertas programables en campo) o un ASIC (“Application-Specific Integrated Circuit”, circuito integrado de aplicación específica).
Aunque la presente invención se ha descrito en lo anterior haciendo referencia a realizaciones específicas, la presente invención no está limitada a las realizaciones específicas, sino que está definida por el alcance de las reivindicaciones.
Se ocurrirán muchas modificaciones y variaciones adicionales a los expertos en la técnica al hacer referencia a las realizaciones ilustrativas anteriores, que se proporcionan solo a modo de ejemplo, y que no pretenden limitar el alcance de la invención, que está determinado únicamente por las reivindicaciones adjuntas. En concreto, las diferentes características de las diferentes realizaciones pueden ser intercambiadas, cuando sea apropiado.
En las reivindicaciones, la expresión “que comprende” no excluye otros elementos o etapas, y el artículo indefinido “un” o “una” no excluye una pluralidad. El mero hecho de que se mencionen características diferentes en reivindicaciones dependientes diferentes entre sí no indica que no pueda ser utilizada ventajosamente una combinación de estas características.

Claims (11)

REIVINDICACIONES
1. Procedimiento para procesar un bloque actual de píxeles (CU3) de una imagen utilizando un modo de codificación de paleta, utilizando el modo de codificación de paleta una paleta actual que comprende un conjunto de entradas que asocian índices de entrada respectivos con valores de píxel correspondientes,
comprendiendo el procedimiento una etapa de predecir la paleta actual utilizando un predictor (2505) de paleta construido a partir de entradas de dos o más paletas (2500, 2501), en el que:
una primera paleta (2501) de las dos o más paletas se utiliza para procesar un bloque de píxeles inmediatamente anterior al actual bloque de la imagen, y
la construcción del predictor (2505) de paleta comprende:
tomar todas las entradas de la primera paleta (2501) como entradas del predictor (2505) de paleta; determinar si el tamaño del predictor (2505) de paleta es menor que el límite de tamaño máximo del predictor; determinar si una o varias entradas de una segunda paleta (2500) se utilizan para predecir la primera paleta (2501) utilizando uno o varios indicadores correspondientes, donde cada indicador está representado por un bit, e indica si una entrada correspondiente de la segunda paleta (2500) de las dos o más paletas va, o no, a ser utilizada para predecir la primera paleta (2501);
mientras el tamaño del predictor (2505) de paleta sea menor que el límite de tamaño máximo del predictor: para cada una de dichas una o varias entradas de la segunda paleta (2500), si el indicador correspondiente indica que la entrada de dicha segunda paleta no se utiliza para predecir la primera paleta (2501),
tomar dicha entrada como una entrada del predictor (2505) de paleta; viniendo la entrada de la segunda paleta (2500) después de las entradas de la primera paleta (2501) en la paleta construida.
2. Procedimiento, según la reivindicación 1, en el que la segunda paleta (2500) es un predictor de paleta construido a partir de entradas de dos o más paletas utilizadas en el procesamiento del bloque de píxeles que precede inmediatamente al bloque actual de la imagen.
3. Procedimiento, según cualquier reivindicación anterior, en el que los indicadores forman un mapa de bits que incluye, como mínimo, un elemento, en una posición predefinida en el mapa de bits, para señalizar si el mapa de bits incluye o no, después de la posición predefinida, como mínimo, un indicador adicional que indica si una entrada correspondiente de la segunda paleta (2500) está o no en la primera paleta (2501), por lo que define la selección de esa entrada de la segunda paleta (2500) para generar la primera paleta (2501).
4. Procedimiento, según cualquier reivindicación anterior, en el que la paleta actual se predice a partir del predictor (2505) de paleta utilizando indicadores, indicando cada indicador si una entrada correspondiente en el predictor (2505) de paleta está o no en la paleta actual.
5. Procedimiento de codificación de una secuencia de imágenes digitales en un flujo de bits, habiendo siendo codificado, como mínimo, un bloque de una imagen utilizando un modo de codificación de paleta que comprende el procedimiento de procesamiento de un bloque actual de píxeles, según cualquiera de las reivindicaciones 1 a 4.
6. Procedimiento de descodificación de un flujo de bits que comprende una secuencia codificada de imágenes digitales, habiendo sido codificado, como mínimo, un bloque de una imagen utilizando un modo de codificación de paleta, que comprende el procedimiento de procesamiento de un bloque actual de píxeles, según cualquiera de las reivindicaciones 1 a 4.
7. Dispositivo para procesar un bloque actual de píxeles de una imagen utilizando un modo de codificación de paleta, utilizando el modo de codificación de paleta una paleta actual que comprende un conjunto de entradas que asocian índices de entrada respectivos con valores de píxel correspondientes, comprendiendo el dispositivo: medios de predicción para predecir la paleta actual utilizando un predictor de paleta construido a partir de entradas de dos o más paletas, donde:
una primera paleta (2501) de las dos o más paletas es utilizada para procesar un bloque de píxeles inmediatamente anterior al bloque actual de la imagen; y
los medios de predicción están dispuestos para construir el predictor de paleta, mediante:
tomar todas las entradas de la primera paleta como entradas del predictor de paleta; y
determinar si el tamaño del predictor (2505) de paleta es menor que el límite de tamaño máximo del predictor, determinando si una o varias entradas de una segunda paleta se utilizan para predecir la primera paleta utilizando uno o varios indicadores correspondientes, donde cada indicador está representado por un bit e indica si una entrada correspondiente de la segunda paleta (2500) de las dos o más paletas se utilizará para predecir la primera paleta,
mientras el tamaño del predictor (2505) de paleta sea menor que el límite de tamaño máximo del predictor, para cada una de dichas una o varias entradas de la segunda paleta (2500), si el indicador correspondiente indica que la entrada de dicha segunda paleta no se utiliza para predecir la primera paleta,
tomar dicha entrada como una entrada del predictor de paleta; viniendo la entrada de la segunda paleta (2500) después de las entradas desde la primera paleta (2501) en la paleta construida.
8. Dispositivo para codificar una secuencia de imágenes digitales en un flujo de bits, que comprende medios para realizar el procedimiento según la reivindicación 5.
9. Dispositivo para descodificar un flujo de bits que comprende una secuencia de imágenes digitales, que comprende medios para realizar el procedimiento de la reivindicación 6.
10. Programa informático que comprende instrucciones que, al ser ejecutadas por un ordenador, hacen que el ordenador lleve a cabo el procedimiento según cualquiera de las reivindicaciones 1 a 6.
11. Medio legible por ordenador que comprende instrucciones que, cuando son ejecutadas en un ordenador o procesador, hacen que el ordenador o procesador lleve a cabo un procedimiento según cualquiera de las reivindicaciones 1 a 6.
ES18185886T 2013-12-10 2014-12-10 Procedimiento y aparato para codificar o descodificar una paleta en el modo de codificación de paleta Active ES2893815T3 (es)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
GBGB1321850.8A GB201321850D0 (en) 2013-12-10 2013-12-10 Palette Prediction
GB1322468.8A GB2521410B (en) 2013-12-10 2013-12-18 Method and apparatus for encoding or decoding blocks of pixel
GB1403823.6A GB2523992B (en) 2014-03-04 2014-03-04 Method and apparatus for encoding or decoding blocks of pixel

Publications (1)

Publication Number Publication Date
ES2893815T3 true ES2893815T3 (es) 2022-02-10

Family

ID=53371914

Family Applications (1)

Application Number Title Priority Date Filing Date
ES18185886T Active ES2893815T3 (es) 2013-12-10 2014-12-10 Procedimiento y aparato para codificar o descodificar una paleta en el modo de codificación de paleta

Country Status (9)

Country Link
US (2) US10834412B2 (es)
EP (3) EP3926955A1 (es)
JP (1) JP6465890B2 (es)
KR (1) KR101897378B1 (es)
CN (1) CN105814891B (es)
ES (1) ES2893815T3 (es)
PL (1) PL3425914T3 (es)
RU (2) RU2689189C2 (es)
WO (1) WO2015086718A2 (es)

Families Citing this family (26)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
RU2666635C2 (ru) 2013-10-14 2018-09-11 МАЙКРОСОФТ ТЕКНОЛОДЖИ ЛАЙСЕНСИНГ, ЭлЭлСи Характеристики режима индексной карты основных цветов для кодирования и декодирования видео и изображения
EP3926955A1 (en) 2013-12-10 2021-12-22 Canon Kabushiki Kaisha Method and apparatus for encoding or decoding blocks of pixel
GB2523992B (en) * 2014-03-04 2018-06-06 Canon Kk Method and apparatus for encoding or decoding blocks of pixel
RU2679566C1 (ru) 2013-12-10 2019-02-11 Кэнон Кабусики Кайся Улучшенный палитровый режим в hevc
BR112016014327B1 (pt) * 2013-12-18 2023-03-21 Hfi Innovation Inc. Método de decodificação de um bloco de dados de vídeo
EP3090559A2 (en) 2014-01-02 2016-11-09 VID SCALE, Inc. Two-dimensional palette coding for screen content coding
CN104853209B (zh) * 2014-02-16 2020-09-29 同济大学 图像编码、解码方法及装置
US10542274B2 (en) 2014-02-21 2020-01-21 Microsoft Technology Licensing, Llc Dictionary encoding and decoding of screen content
PL3117617T3 (pl) 2014-03-14 2022-08-22 Vid Scale, Inc. Kodowanie palety przeznaczone do kodowania zawartości ekranu
JP6328262B2 (ja) * 2014-03-14 2018-05-23 寰發股▲ふん▼有限公司HFI Innovation Inc. パレットスタッフィングによるカラーインデックスコーディング方法
US10750198B2 (en) 2014-05-22 2020-08-18 Qualcomm Incorporated Maximum palette parameters in palette-based video coding
CN106716999B (zh) * 2014-06-20 2019-08-09 寰发股份有限公司 用于视频编码的调色板预测器信令的方法
EP3202150B1 (en) 2014-09-30 2021-07-21 Microsoft Technology Licensing, LLC Rules for intra-picture prediction modes when wavefront parallel processing is enabled
US9986248B2 (en) * 2015-01-29 2018-05-29 Qualcomm Incorporated Palette mode coding for video coding
US10212434B2 (en) * 2015-01-30 2019-02-19 Qualcomm Incorporated Palette entries coding in video coding
EP3298785A4 (en) * 2015-06-03 2019-02-13 MediaTek Inc. METHOD AND APPARATUS FOR RESOURCE SHARING BETWEEN INTRA BLOCK COPY MODE AND INTER-PREDICTION MODE IN VIDEO CODING SYSTEMS
CN106664405B (zh) * 2015-06-09 2020-06-09 微软技术许可有限责任公司 用调色板模式对经逸出编码的像素的稳健编码/解码
JP6662123B2 (ja) * 2016-03-14 2020-03-11 富士通株式会社 画像符号化装置、画像符号化方法、及び画像符号化プログラム
CN107295343A (zh) * 2017-06-27 2017-10-24 郑州云海信息技术有限公司 一种调色板变换算法的优化方法、装置及系统
CN112806017B (zh) * 2018-10-05 2024-03-15 Tcl王牌电器(惠州)有限公司 用于编码变换系数的方法和设备
US11503311B2 (en) 2019-03-08 2022-11-15 Sony Group Corporation Hybrid palette-DPCM coding for image compression
US11330306B2 (en) * 2019-08-07 2022-05-10 Tencent America LLC Method and apparatus for video coding
MX2022002617A (es) 2019-09-12 2022-03-25 Bytedance Inc Uso de predictor de paleta en codificacion de video.
WO2021137947A1 (en) * 2019-12-31 2021-07-08 Alibaba Group Holding Limited Method an apparatus for initializing predictor palette
CN112633168B (zh) * 2020-12-23 2023-10-31 长沙中联重科环境产业有限公司 一种垃圾车翻桶动作识别方法、装置及垃圾车
CN114299172B (zh) 2021-12-31 2022-07-08 广东工业大学 一种用于视觉系统的平面编码靶标及其实时位姿测量方法

Family Cites Families (32)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6023558A (en) 1996-06-27 2000-02-08 Apple Computer, Inc. Graphics compression for an emulation system
JPH11161782A (ja) 1997-11-27 1999-06-18 Seiko Epson Corp カラー画像の符号化方法およびその符号化装置ならびにカラー画像の復号化方法およびその復号化装置
US7415154B2 (en) 2002-02-01 2008-08-19 Koninklijke Philips Electronics N.V. Compression of palettized color images with variable length color codes
US7433526B2 (en) 2002-04-30 2008-10-07 Hewlett-Packard Development Company, L.P. Method for compressing images and image sequences through adaptive partitioning
US7302006B2 (en) * 2002-04-30 2007-11-27 Hewlett-Packard Development Company, L.P. Compression of images and image sequences through adaptive partitioning
JP2004179687A (ja) 2002-11-22 2004-06-24 Toshiba Corp 動画像符号化/復号化方法及び装置
DE60315407D1 (de) * 2003-02-06 2007-09-20 St Microelectronics Srl Verfahren und Vorrichtung zum Komprimierung von Texturen
JP4515832B2 (ja) 2004-06-14 2010-08-04 オリンパス株式会社 画像圧縮装置、及び画像復元装置
JP2006005421A (ja) 2004-06-15 2006-01-05 Olympus Corp 画像処理方法、及びコンピュータプログラムを格納したコンピュータで読み取り可能な記憶媒体
JP4769039B2 (ja) 2005-07-26 2011-09-07 パナソニック株式会社 デジタル信号符号化および復号化装置ならびにその方法
JP4736619B2 (ja) 2005-08-18 2011-07-27 沖電気工業株式会社 画像処理装置および画像処理方法
WO2007021227A1 (en) 2005-08-19 2007-02-22 Telefonaktiebolaget Lm Ericsson (Publ) Texture compression based on two hues with modified brightness
KR100968920B1 (ko) 2006-01-05 2010-07-14 니폰덴신뎅와 가부시키가이샤 영상 부호화 방법 및 복호 방법, 그들의 장치, 및 그들의프로그램 및 프로그램을 기록한 기억 매체
JP4747917B2 (ja) 2006-04-03 2011-08-17 株式会社日立製作所 デジタル放送受信装置
US7782961B2 (en) 2006-04-28 2010-08-24 Avocent Corporation DVC delta commands
US20090010533A1 (en) * 2007-07-05 2009-01-08 Mediatek Inc. Method and apparatus for displaying an encoded image
EP2154893A1 (en) 2008-08-13 2010-02-17 Thomson Licensing Method for modifying a reference block of a reference image, method for encoding or decoding a block of an image by help of a reference block and device therefor and storage medium or signal carrying a block encoded by help of a modified reference block
US9232226B2 (en) * 2008-08-19 2016-01-05 Marvell World Trade Ltd. Systems and methods for perceptually lossless video compression
CN101645173B (zh) * 2008-12-16 2012-05-16 中国科学院声学研究所 一种随机调色板编码系统及方法
RU2420021C2 (ru) * 2009-03-24 2011-05-27 Корпорация "САМСУНГ ЭЛЕКТРОНИКС Ко., Лтд." Способ сжатия изображений и видеопоследовательностей
JP5221430B2 (ja) 2009-03-24 2013-06-26 株式会社東芝 画像圧縮装置および画像伸張装置
JP2011035807A (ja) 2009-08-05 2011-02-17 Victor Co Of Japan Ltd 動画像符号化方法及び動画像符号化装置
JP5222870B2 (ja) 2010-03-05 2013-06-26 日本放送協会 イントラ予測装置、符号化器、復号器及びプログラム
ES2718426T3 (es) 2010-12-17 2019-07-01 Mitsubishi Electric Corp Dispositivo de codificación de imágenes en movimiento, dispositivo de decodificación de imágenes en movimiento, método de codificación de imágenes en movimiento y método de decodificación de imágenes en movimiento
WO2012112357A1 (en) 2011-02-16 2012-08-23 Dolby Laboratories Licensing Corporation Methods and systems for generating filter coefficients and configuring filters
US11259020B2 (en) * 2013-04-05 2022-02-22 Qualcomm Incorporated Determining palettes in palette-based video coding
WO2015006169A1 (en) 2013-07-08 2015-01-15 Sony Corporation Improvement for palette coding mode
US9558567B2 (en) * 2013-07-12 2017-01-31 Qualcomm Incorporated Palette prediction in palette-based video coding
RU2679566C1 (ru) * 2013-12-10 2019-02-11 Кэнон Кабусики Кайся Улучшенный палитровый режим в hevc
EP3926955A1 (en) 2013-12-10 2021-12-22 Canon Kabushiki Kaisha Method and apparatus for encoding or decoding blocks of pixel
US9654806B2 (en) * 2014-03-26 2017-05-16 Qualcomm Incorporated Determining palette size, palette entries and filtering of palette coded blocks in video coding
US11323733B2 (en) * 2014-05-23 2022-05-03 Qualcomm Incorporated Predictor palette initialization in palette-based video coding

Also Published As

Publication number Publication date
JP6465890B2 (ja) 2019-02-06
WO2015086718A3 (en) 2015-10-29
US20160309172A1 (en) 2016-10-20
RU2645358C2 (ru) 2018-02-21
EP3080990B1 (en) 2018-09-05
CN105814891A (zh) 2016-07-27
US11259033B2 (en) 2022-02-22
RU2018104096A3 (es) 2019-02-22
EP3425914B1 (en) 2021-08-18
US10834412B2 (en) 2020-11-10
EP3080990A2 (en) 2016-10-19
WO2015086718A2 (en) 2015-06-18
RU2018104096A (ru) 2019-02-22
PL3425914T3 (pl) 2022-02-14
KR101897378B1 (ko) 2018-09-10
RU2689189C2 (ru) 2019-05-24
KR20160093064A (ko) 2016-08-05
EP3926955A1 (en) 2021-12-22
US20210029367A1 (en) 2021-01-28
EP3425914A1 (en) 2019-01-09
JP2017505010A (ja) 2017-02-09
CN105814891B (zh) 2019-04-02

Similar Documents

Publication Publication Date Title
ES2893815T3 (es) Procedimiento y aparato para codificar o descodificar una paleta en el modo de codificación de paleta
JP6537511B2 (ja) Hevcにおける改良型パレットモード
CN107211122B (zh) 对自包含式编码结构进行编码或解码时的调色板预测结果初始化程序
US10972742B2 (en) Encoding process using a palette mode
RU2684202C2 (ru) Улучшенный процесс кодирования с использованием режима палитры
JP6532467B2 (ja) ビデオ符号化および復号におけるシンタックス要素符号化方法および装置
US10469842B2 (en) Encoder optimizations for palette lossless encoding of content with subsampled colour component
GB2521410A (en) Method and apparatus for encoding or decoding blocks of pixel
CN114009029A (zh) 图像数据编码和解码
GB2523992A (en) Method and apparatus for encoding or decoding blocks of pixel
GB2534612A (en) Palette predictor initializer when encoding or decoding self-contained coding structures
ES2875586T3 (es) Procedimiento de codificación y descodificación de imágenes, dispositivo de codificación y de descodificación y programas informáticos correspondientes