DESCRIPCIÓN
Método de codificación/descodificación de señales de imagen y dispositivo para el mismo
ANTECEDENTES DE LA INVENCIÓN
Campo de la invención
La presente invención se refiere a un método de codificación y descodificación de señales de vídeo y a un aparato para el mismo.
Antecedentes de la técnica relacionada
Debido a que los paneles de visualización se van haciendo cada vez más grandes, se requieren cada vez más servicios de vídeo de una calidad aún más alta. El mayor problema de los servicios de vídeo de alta definición es un aumento significativo en el volumen de datos y, para solucionar este problema, se están llevando a cabo activamente estudios para mejorar la velocidad de compresión de vídeo. Como un ejemplo representativo, el Grupo de Expertos en Imágenes en Movimiento (MPEG) y el Grupo de Expertos en Codificación de Vídeo (VCEG) en el marco de la Unión Internacional de Telecomunicaciones-Telecomunicaciones (UIT-T) han formado el Equipo de Colaboración Conjunta en Codificación de Vídeo (JCT-VC) en 2009. El JCT-VC ha propuesto la Codificación de Vídeo de Alta Eficiencia (HEVC), que es una norma de compresión de vídeo que tiene un rendimiento de compresión aproximadamente el doble del rendimiento de compresión de H.264/AVC, y se aprueba como norma el 25 de enero de 2013. Con el rápido avance en los servicios de vídeo de alta definición, el rendimiento de la HEVC revela gradualmente sus limitaciones. La publicación "Description of Core Experiment 4 (CE4): Inter prediction and motion vector coding (Yang H y col., JVET-J1024-v3, 28 de mayo de 2018) investiga diversas técnicas de codificación de vectores de movimiento y de inter predicción y describe las adaptaciones de predicción de vectores de movimiento afines de la propuesta J0022. Tal propuesta complementa la lista de 7 candidatos del JEM dando una lista de 19 candidatos con hasta 8 candidatos afines.
La publicación "Non-CE4: A study on the affine merge mode'' (Zhou M y col., JVET-K0052, 7 de julio de 2018) divulga un modo de fusión afín en el que los datos de movimiento afín se heredan de una de las PU espaciales vecinas. La figura 5 de la publicación muestra un bloque vecino E que tiene unos subbloques inferior izquierdo e inferior derecho. Se usan los vectores de movimiento de sus muestras centrales en lugar de vectores de movimiento semilla afines en las posiciones de muestra superior izquierda y superior derecha de los subbloques.
SUMARIO DE LA INVENCIÓN
La invención se expone en el conjunto de reivindicaciones adjunto; los ejemplos adicionales denominados realizaciones en la descripción son ejemplos ilustrativos. Un objeto de la presente invención es proporcionar un método de inter predicción que usa un modelo afín y un aparato para el mismo, en la codificación/descodificación de una señal de vídeo.
Otro objeto de la presente invención es proporcionar un método para derivar un vector de semilla afín usando un vector de movimiento de traslación de un subbloque, y un aparato para realizar el método, en la codificación/descodificación de una señal de vídeo.
Otro objeto de la presente invención es proporcionar un método para derivar un vector de semilla afín transformando una distancia entre un bloque vecino y un bloque actual en una serie de potencias de 2, y un aparato para realizar el método, en la codificación/descodificación de una señal de vídeo.
Los problemas técnicos que van a lograrse en la presente invención no se limitan a los problemas técnicos mencionados anteriormente, y otros problemas no mencionados pueden ser entendidos claramente a partir de la siguiente descripción por los expertos en la materia.
Un método para descodificar y codificar una señal de vídeo de acuerdo con la presente invención incluye las etapas de: generar una lista de candidatos de fusión para un bloque actual; especificar uno de entre una pluralidad de candidatos de fusión incluidos en la lista de candidatos de fusión; derivar un primer vector de semilla afín y un segundo vector de semilla afín del bloque actual basándose en un primer vector de semilla afín y un segundo vector de semilla afín del candidato de fusión especificado; derivar un vector afín para un subbloque en el bloque actual usando el primer vector de semilla afín y el segundo vector de semilla afín del bloque actual; y realizar una predicción de compensación de movimiento para el subbloque basándose en el vector afín. En este punto, el subbloque es una región de un tamaño menor que el del bloque actual. Además, el primer vector de semilla afín y el segundo vector de semilla afín del candidato de fusión pueden derivarse basándose en información de movimiento de un bloque vecino adyacente al bloque actual.
En el método para descodificar y codificar una señal de vídeo de acuerdo con la presente invención, cuando el bloque vecino se incluye en una unidad de árbol de codificación diferente de una unidad de árbol de codificación del bloque actual, el primer vector de semilla afín y el segundo vector de semilla afín del candidato de fusión se derivan basándose en vectores de movimiento de un subbloque inferior izquierdo y un subbloque inferior derecho del bloque vecino. En el método para descodificar y codificar una señal de vídeo de acuerdo con la presente invención, el subbloque inferior izquierdo incluye una muestra de referencia inferior izquierda situada en una esquina inferior izquierda del bloque vecino, y el subbloque inferior derecho es contiguo a una muestra de referencia inferior derecha ubicada en un lado derecho de una muestra inferior derecha del subbloque inferior derecho.
En el método para descodificar y codificar una señal de vídeo de acuerdo con la presente invención, el primer vector de semilla afín y el segundo vector de semilla afín del candidato de fusión pueden derivarse de un valor obtenido aplicando una operación de desplazamiento a una diferencia entre vectores de movimiento del subbloque inferior izquierdo y el subbloque inferior derecho, en donde la operación de desplazamiento desplaza la diferencia un factor de ajuste a escala, y el factor de ajuste a escala puede derivarse de un valor obtenido añadiendo un desplazamiento a una distancia horizontal entre la muestra de referencia inferior izquierda y la muestra de referencia inferior derecha. En el método para descodificar y codificar una señal de vídeo de acuerdo con la presente invención, el primer vector de semilla afín y el segundo vector de semilla afín del candidato de fusión pueden derivarse de un valor obtenido aplicando una operación de desplazamiento a una diferencia entre vectores de movimiento del subbloque inferior izquierdo y el subbloque inferior derecho, en donde la operación de desplazamiento desplaza la diferencia un factor de ajuste a escala, y el factor de ajuste a escala puede derivarse de una distancia entre una muestra vecina adyacente a un lado derecho de la muestra de referencia inferior derecha y la muestra de referencia inferior izquierda.
Las características resumidas brevemente anteriormente con respecto a la presente invención son simplemente aspectos ilustrativos de la descripción detallada de la presente invención que se describirán a continuación, y no limitan el alcance de la presente invención.
De acuerdo con la presente invención, hay un efecto de mejorar la eficiencia de predicción a través de un método de inter predicción que usa un modelo afín.
De acuerdo con la presente invención, hay un efecto de mejorar la eficiencia de codificación derivando un vector de semilla afín usando un vector de movimiento de traslación de un subbloque.
De acuerdo con la presente invención, hay un efecto de mejorar la eficiencia de codificación derivando un vector de semilla afín transformando una distancia entre un bloque vecino y un bloque actual en una serie de potencias de 2. Los efectos que pueden obtenerse a partir de la presente invención no se limitan a los efectos mencionados anteriormente, y otros efectos no mencionados pueden ser entendidos claramente a partir de la siguiente descripción por los expertos en la materia.
BREVE DESCRIPCIÓN DE LOS DIBUJOS
La figura 1 es un diagrama de bloques que muestra un codificador de vídeo de acuerdo con una realización de la presente invención.
La figura 2 es un diagrama de bloques que muestra un descodificador de vídeo de acuerdo con una realización de la presente invención.
La figura 3 es una vista que muestra una unidad de árbol de codificación básica de acuerdo con una realización de la presente invención.
La figura 4 es una vista que muestra diversos tipos de subdivisión de un bloque de codificación.
La figura 5 es una vista que muestra un patrón de subdivisión de una unidad de árbol de codificación.
La figura 6 es un diagrama de flujo que ilustra un método de inter predicción de acuerdo con una realización de la presente invención.
La figura 7 es una vista que muestra un movimiento no lineal de un objeto.
La figura 8 es un diagrama de flujo que ilustra un método de inter predicción basándose en un movimiento afín de acuerdo con una realización de la presente invención.
La figura 9 es una vista que muestra un ejemplo de vectores de semilla afines de cada modelo de movimiento afín.
La figura 10 es una vista que muestra un ejemplo de vectores afines de subbloques en un modelo de movimiento de 4 parámetros.
La figura 11 es una vista que muestra un bloque vecino que puede usarse para derivar un candidato de fusión. La figura 12 es una vista que muestra un ejemplo de derivación de un vector de semilla afín de un bloque actual basándose en un vector de semilla afín de un bloque vecino afín.
La figura 13 es una vista que muestra un ejemplo de establecimiento de un vector de movimiento de un subbloque como un vector de semilla afín de un bloque vecino afín.
Las figuras 14 a 16 son vistas que muestran posiciones de muestras de referencia.
La figura 17 es una vista que muestra un ejemplo de aplicación de un método de derivación de vector de fusión afín modificado.
La figura 18 es una vista que muestra un ejemplo de derivación de un vector de semilla afín de un bloque actual basándose en un bloque vecino no afín.
La figura 19 es una vista que muestra un ejemplo de sustitución de un bloque vecino con otro bloque vecino. Las figuras 20 y 21 son vistas que muestran el flujo de un método de predicción de compensación de movimiento que usa una pluralidad de candidatos de fusión.
La figura 22 es un diagrama de flujo que ilustra un método de intra predicción de acuerdo con una realización de la presente invención.
La figura 23 es una vista que muestra muestras de referencia incluidas en cada línea de muestra de referencia. La figura 24 es una vista que muestra modos de intra predicción.
Las figuras 25 y 26 son vistas que muestran un ejemplo de una disposición ordenada unidimensional que dispone muestras de referencia en una línea.
La figura 27 es una vista que muestra un ejemplo de ángulos formados entre modos de intra predicción angular y una línea recta paralela al eje x.
La figura 28 es una vista que muestra una realización de adquisición de muestras de predicción cuando el bloque actual es una forma no cuadrada.
La figura 29 es una vista que muestra modos de intra predicción de ángulo amplio.
La figura 30 es un diagrama de flujo que ilustra un proceso de determinación de fuerza de bloque.
La figura 31 es una vista que muestra candidatos de filtro predefinidos.
La figura 32 es una vista que muestra un ejemplo de subdivisión de una imagen en una pluralidad de teselas. La figura 33 es una vista que muestra un patrón de subdivisión de una imagen de acuerdo con una técnica de tesela flexible.
La figura 34 es una vista que muestra un ejemplo de asignación de un ID de tesela a cada unidad de árbol de codificación.
La figura 35 es una vista que muestra un ejemplo de determinación selectiva de si aplicar, o no, un filtro en bucle a cada tesela.
DESCRIPCIÓN DETALLADA DE LA REALIZACIÓN PREFERIDA
En lo sucesivo, se describirá con detalle una realización de la presente invención con referencia a las figuras adjuntas. La codificación y descodificación de un vídeo es realizada por la unidad de bloque. Por ejemplo, puede realizarse un proceso de codificación/descodificación tal como transformada, cuantificación, predicción, filtrado en bucle, reconstrucción o similares sobre un bloque de codificación, un bloque de transformada o un bloque de predicción.
En lo sucesivo en el presente documento, un bloque que va a codificarse/descodificarse se denominará 'bloque actual'. Por ejemplo, el bloque actual puede representar un bloque de codificación, un bloque de transformada o un bloque de predicción de acuerdo con una etapa de proceso de codificación/descodificación actual.
Además, puede entenderse que el término 'unidad' usado en esta especificación indica una unidad básica para realizar un proceso de codificación/descodificación específico, y el término 'bloque' indica una disposición ordenada de muestras de un tamaño predeterminado. A menos que se exponga lo contrario, el 'bloque' y la 'unidad' pueden usarse para tener el mismo significado. Por ejemplo, en una realización descrita a continuación, puede entenderse que un bloque de codificación y una unidad de codificación tienen el mismo significado.
La figura 1 es un diagrama de bloques que muestra un codificador de vídeo de acuerdo con una realización de la presente invención.
Haciendo referencia a la figura 1, un aparato de codificación de vídeo 100 puede incluir una parte de subdivisión de imagen 110, una parte de predicción 120 y 125, una parte de transformada 130, una parte de cuantificación 135, una parte de reorganización 160, una parte de codificación por entropía 165, una parte de cuantificación inversa 140, una parte de transformada inversa 145, una parte de filtro 150 y una memoria 155.
Se muestra independientemente que cada uno de los componentes mostrados en figura 1 representa funciones características diferentes entre sí en un aparato de codificación de vídeo, y no significa que cada componente esté formado por la unidad de configuración de hardware separado o por software único. Es decir, cada componente se incluye para enumerarse como un componente por conveniencia de explicación, y al menos dos de los componentes pueden combinarse para formar un único componente, o un componente puede dividirse en una pluralidad de componentes para realizar una función. También se incluyen realizaciones integradas y realizaciones separadas de los componentes en el alcance de la presente invención si los mismos no se apartan de la esencia de la presente invención.
Además, algunos de los componentes no son componentes esenciales que realizan funciones esenciales en la presente invención, pero pueden ser componentes opcionales solo para mejorar el rendimiento. La presente invención puede implementarse incluyendo solo componentes esenciales para implementar la esencia de la presente invención excluyendo componentes usados para mejorar el rendimiento, y también se incluye en el alcance de la presente invención una estructura que incluye solo los componentes esenciales excluyendo los componentes opcionales usados para mejorar el rendimiento.
La parte de subdivisión de imagen 110 puede subdividir una imagen de entrada en al menos una unidad de procesamiento. En este punto, la unidad de procesamiento puede ser una unidad de predicción (PU), una unidad de transformada (TU) o una unidad de codificación (CU). La parte de subdivisión de imagen 110 puede subdividir una imagen en una combinación de múltiples unidades de codificación, unidades de predicción y unidades de transformada, y codificar una imagen seleccionando una combinación de una unidad de codificación, una unidad de predicción y una unidad de transformada basándose en un criterio predeterminado (por ejemplo, una función de coste).
Por ejemplo, una imagen puede subdividirse en una pluralidad de unidades de codificación. Para subdividir las unidades de codificación en una imagen, puede usarse una estructura de árbol recursivo tal como una estructura de árbol cuádruple. Una unidad de codificación subdividida en diferentes unidades de codificación usando un vídeo o la unidad de codificación más grande como raíz puede subdividirse para tener tantos nodos secundarios como el número de unidades de codificación subdivididas. Una unidad de codificación que ya no se subdivide de acuerdo con una restricción predeterminada se vuelve un nodo hoja. Es decir, cuando se asume que solo es posible la subdivisión cuadrada para una unidad de codificación, la unidad de codificación puede subdividirse en hasta cuatro unidades de codificación diferentes.
En lo sucesivo en el presente documento, en una realización de la presente invención, la unidad de codificación puede usarse como un significado de una unidad que realiza una codificación o con un significado de una unidad que realiza una descodificación.
La unidad de predicción puede ser una que se subdivide en una forma de al menos un cuadrado, rectángulo o similar del mismo tamaño dentro de una unidad de codificación, o puede ser una cualquiera de las unidades de predicción, de entre las unidades de predicción subdivididas dentro de una unidad de codificación, que se subdivide para tener una forma y/o tamaño diferente de los de otra unidad de predicción.
Si la unidad de codificación no es una unidad de codificación más pequeña cuando se genera una unidad de predicción que realiza una intra predicción basándose en la unidad de codificación, la intra predicción puede realizarse sin subdividir una imagen en una pluralidad de unidades de predicción N x N.
La parte de predicción 120 y 125 puede incluir una parte de inter predicción 120 que realiza una inter predicción y una parte intra predicción 125 que realiza una intra predicción. Puede determinarse si usar una inter predicción o realizar una intra predicción para una unidad de predicción y determinar información específica (por ejemplo, modo de intra
predicción, vector de movimiento, imagen de referencia, etc.) de acuerdo con cada método de predicción. En este punto, una unidad de procesamiento para realizar predicción puede ser diferente de una unidad de procesamiento para determinar un método de predicción y contenido específico. Por ejemplo, pueden determinarse un método de predicción y un modo de predicción en una unidad de predicción, y la predicción puede realizarse sobre una unidad de transformada. Un coeficiente residual (bloque residual) entre el bloque de predicción generado y el bloque original puede introducirse en la parte de transformada 130. Además, la información de modo de predicción, la información de vector de movimiento y similares usados para predicción pueden codificarse mediante la parte de codificación por entropía 165 junto con el coeficiente residual y transferirse a un descodificador. Cuando se usa un modo de codificación específico, un bloque original puede codificarse tal cual está y transmitirse a un descodificador sin generar un bloque de predicción a través de la parte de predicción 120 y 125.
La parte de inter predicción 120 puede predecir una unidad de predicción basándose en información acerca de al menos una imagen de entre imágenes antes o después de la imagen actual, y en algunos casos, puede predecir una unidad de predicción basándose en información acerca de un área parcial que se ha codificado en la imagen actual. La parte de inter predicción 120 puede incluir una parte de interpolación de imagen de referencia, una parte de predicción de movimiento y una parte de compensación de movimiento.
La parte de interpolación de imagen de referencia puede recibir información de imagen de referencia de la memoria 155 y generar información de píxeles de un número entero de píxeles o menos a partir de la imagen de referencia. En el caso de un píxel de luminancia, puede usarse un filtro de interpolación de 8 derivaciones basado en DCT con un coeficiente de filtro variable para generar información de píxeles de un número entero de píxeles o menos por la unidad de 1/4 de píxel. En el caso de una señal de diferencia de color, puede usarse un filtro de interpolación de 4 derivaciones basado en DCT con un coeficiente de filtro variable para generar información de píxeles de un número entero de píxeles o menos por la unidad de 1/8 de píxel.
La parte de predicción de movimiento puede realizar predicción de movimiento basándose en la imagen de referencia interpolada por la parte de interpolación de imagen de referencia. Pueden usarse diversos métodos tales como un algoritmo de puesta en coincidencia de bloques basada en búsqueda completa (FBMA), una búsqueda de tres etapas (TSS) y un algoritmo de nueva búsqueda de tres etapas (NTS) como un método para calcular un vector de movimiento. El vector de movimiento puede tener un valor de vector de movimiento de una unidad de 1/2 o 1/4 de píxel basándose en píxeles interpolados. La parte de predicción de movimiento puede predecir una unidad de predicción actual variando el método de predicción de movimiento. Pueden usarse diversos métodos tales como un método de omisión, un método de fusión, un método de predicción de vector de movimiento avanzado (AMVP), un método de copia de intra bloque y similares como el método de predicción de movimiento.
La parte de intra predicción 125 puede generar una unidad de predicción basándose en la información acerca de píxeles de referencia alrededor del bloque actual, que es información de píxeles en la imagen actual. Cuando un bloque en las proximidades de la unidad de predicción actual es un bloque sobre el que se ha realizado una inter predicción y, por lo tanto, el píxel de referencia es un píxel sobre el que se ha realizado una inter predicción, puede usarse el píxel de referencia incluido en el bloque sobre el que se ha realizado una inter predicción en lugar de información de píxeles de referencia de un bloque en las proximidades sobre el que se ha realizado una intra predicción. Es decir, cuando no está disponible un píxel de referencia, puede usarse al menos un píxel de referencia de entre píxeles de referencia disponibles en lugar de información de píxeles de referencia no disponible.
En la intra predicción, el modo de predicción puede tener un modo de predicción angular que usa información de píxeles de referencia de acuerdo con una dirección de predicción, y un modo de predicción no angular que no usa información direccional cuando se realiza una predicción. Un modo para predecir información de luminancia puede ser diferente de un modo para predecir información de diferencia de color, y puede usarse información del modo de intra predicción usada para predecir información de luminancia o información de señal de luminancia predicha para predecir la información de diferencia de color.
Si el tamaño de la unidad de predicción es igual que el tamaño de la unidad de transformada cuando se realiza una intra predicción, la intra predicción puede realizarse para la unidad de predicción basándose en un píxel en el lado izquierdo, un píxel en el lado superior izquierdo y un píxel en la parte superior de la unidad de predicción. Sin embargo, si el tamaño de la unidad de predicción es diferente del tamaño de la unidad de transformada cuando se realiza la intra predicción, la intra predicción puede realizarse usando un píxel de referencia basándose en la unidad de transformada. Además, la intra predicción usando una subdivisión N x N solo puede usarse para la unidad de codificación más pequeña.
El método de intra predicción puede generar un bloque de predicción después de aplicar un filtro de intra alisado adaptativo (AIS) al píxel de referencia de acuerdo con un modo de predicción. El tipo de filtro de AIS aplicado al píxel de referencia puede variar. Para realizar el método de intra predicción, el modo de intra predicción de la unidad de intra predicción actual puede predecirse a partir del modo de intra predicción de la unidad de intra predicción existente en las proximidades de la unidad de intra predicción actual. Cuando se predice un modo de predicción de la unidad de predicción actual usando la información de modo predicho de la unidad de predicción vecina, si los modos de intra predicción de la unidad de predicción actual son iguales que los de la unidad de predicción en las proximidades, la
información que indica que los modos de predicción de la unidad de predicción actual son iguales que los de la unidad de predicción en las proximidades pueden transmitirse usando información de bandera predeterminada, y si los modos de predicción de la unidad de predicción actual y la unidad de predicción en las proximidades son diferentes entre sí, puede codificarse información de modo de predicción del bloque actual realizando una codificación por entropía.
Además, puede generarse un bloque residual que incluye una unidad de predicción que ha realizado una predicción basándose en la unidad de predicción generada por la parte de predicción 120 y 125 y la información de coeficiente residual, que es un valor de diferencia de la unidad de predicción con el bloque original. El bloque residual generado puede introducirse en la parte de transformada 130.
La parte de transformada 130 puede transformar el bloque residual que incluye el bloque original y la información de coeficiente residual de la unidad de predicción generada a través de la parte de predicción 120 y 125 usando un método de transformada tal como transformada discreta del coseno (DCT), transformada discreta del seno (DST) u omisión de transformada. Puede determinarse si aplicar, o no, la DCT, la DST o la KLT para transformar el bloque residual basándose en información de modo de intra predicción de una unidad de predicción usada para generar el bloque residual.
La parte de cuantificación 135 puede cuantificar valores transformados en el dominio de la frecuencia por la parte de transformada 130. Los coeficientes de cuantificación pueden variar de acuerdo con el bloque o la importancia de un vídeo. Puede proporcionarse un valor calculado por la parte de cuantificación 135 a la parte de cuantificación inversa 140 y la parte de reorganización 160.
La parte de reorganización 160 puede reorganizar los valores de coeficiente para los coeficientes residuales cuantificados.
La parte de reorganización 160 puede cambiar los coeficientes de una forma de bloque bidimensional a una forma vectorial unidimensional a través de un método de exploración de coeficientes. Por ejemplo, la parte de reorganización 160 puede explorar coeficientes de CC hasta coeficientes de dominio de alta frecuencia usando un método de exploración en zigzag, y cambiar los coeficientes a una forma vectorial unidimensional. De acuerdo con el tamaño de la unidad de transformada y el modo de intra predicción, puede usarse una exploración vertical para explorar los coeficientes de una forma de bloque bidimensional en la dirección por columnas y una exploración horizontal para explorar los coeficientes de una forma de bloque bidimensional en la dirección por filas en lugar de la exploración en zigzag. Es decir, de acuerdo con el tamaño de la unidad de transformada y el modo de intra predicción, puede determinarse un método de exploración que se usará de entre la exploración en zigzag, la exploración de dirección vertical y la exploración de dirección horizontal.
La parte de codificación por entropía 165 puede realizar una codificación por entropía basándose en valores calculados por la parte de reorganización 160. La codificación por entropía puede usar diversos métodos de codificación tales como Golomb exponencial, codificación de longitud variable adaptativa al contexto (CAVLC), codificación aritmética binaria adaptativa al contexto (CABAC) y similares.
La parte de codificación por entropía 165 puede codificar diversa información tal como información de coeficiente residual e información de tipo de bloque de una unidad de codificación, información de modo de predicción, información de unidad de subdivisión, información de unidad de predicción e información de unidad de transmisión, información de vector de movimiento, información de trama de referencia, información de interpolación de bloque e información de filtrado introducida desde la parte de reorganización 160 y las partes de predicción 120 y 125.
La parte de codificación por entropía 165 puede codificar por entropía el valor de coeficiente de una unidad de codificación que se introduce desde la parte de reorganización 160.
La parte de cuantificación inversa 140 y la parte de transformada inversa 145 cuantifican inversamente los valores cuantificados por la parte de cuantificación 135 y transforman inversamente los valores transformados por la parte de transformada 130. El coeficiente residual generado por la parte de cuantificación inversa 140 y la parte de transformada inversa 145 puede combinarse con la unidad de predicción predicha a través de una parte de estimación de movimiento, una parte de compensación de movimiento y una parte intra predicción incluida en la parte de predicción 120 y 125 para generar un bloque reconstruido.
La parte de filtro 150 puede incluir al menos uno de entre un filtro de desbloqueo, una unidad de corrección de desplazamiento y un filtro de bucle adaptativo (ALF).
El filtro de desbloqueo puede eliminar la distorsión de bloque generada por la frontera entre bloques en la imagen reconstruida. Para determinar si realizar, o no, un desbloqueo, puede determinarse si aplicar, o no, el filtro de desbloqueo al bloque actual basándose en los píxeles incluidos en varias columnas o filas incluidas en el bloque. Puede aplicarse un filtro fuerte o un filtro débil de acuerdo con la fuerza de filtrado de desbloqueo necesaria cuando se aplica el filtro de desbloqueo a un bloque. Además, cuando el filtrado de dirección vertical y el filtrado de dirección
horizontal se realizan aplicando el filtro de desbloqueo, el filtrado de dirección horizontal y el filtrado de dirección vertical pueden procesarse en paralelo.
La unidad de corrección de desplazamiento puede corregir un desplazamiento al vídeo original por la unidad de píxel para un vídeo sobre el que se ha realizado el desbloqueo. Para realizar la corrección de desplazamiento para una imagen específica, es posible usar un método para dividir píxeles incluidos en el vídeo en un cierto número de áreas, determinar un área para realizar el desplazamiento y aplicar el desplazamiento al área, o un método para aplicar un desplazamiento considerando información de borde de cada píxel.
El filtrado de bucle adaptativo (ALF) puede realizarse basándose en un valor obtenido mediante la comparación del vídeo reconstruido y filtrado y el vídeo original. Después de dividir los píxeles incluidos en el vídeo en grupos predeterminados, puede determinarse un filtro que va a aplicarse a un grupo correspondiente y el filtrado puede realizarse de forma diferente para cada grupo. Puede transmitirse una señal de luminancia, que es la información relacionada con si aplicar, o no, ALF, para cada unidad de codificación (CU), y el coeficiente de filtro y forma de un filtro ALF que va a aplicarse pueden variar de acuerdo con cada bloque. Además, puede aplicarse un filtro ALF del mismo tipo (tipo fijo) independientemente de la característica de un bloque que va a aplicarse.
La memoria 155 puede almacenar el bloque o imagen reconstruida calculada a través de la parte de filtro 150, y el bloque o imagen reconstruida y almacenada pueden proporcionarse a la parte de predicción 120 y 125 cuando se realiza una inter predicción.
La figura 2 es un diagrama de bloques que muestra un descodificador de vídeo de acuerdo con una realización de la presente invención.
Haciendo referencia a la figura 2, un descodificador de vídeo 200 puede incluir una parte de descodificación por entropía 210, una parte de reorganización 215, una parte de cuantificación inversa 220, una parte de transformada inversa 225, una parte de predicción 230 y 235, una parte de filtro 240 y una memoria 245.
Cuando un flujo de bits de vídeo se introduce desde un codificador de vídeo, el flujo de bits de entrada puede descodificarse en un procedimiento opuesto al del codificador de vídeo.
La parte de descodificación por entropía 210 puede realizar una descodificación por entropía en un procedimiento opuesto al de realizar una codificación por entropía en la parte de descodificación por entropía del codificador de vídeo. Por ejemplo, pueden aplicarse diversos métodos correspondientes al método realizado por el codificador de vídeo, tal como Golomb exponencial, codificación de longitud variable adaptativa al contexto (CAVLC) y codificación aritmética binaria adaptativa al contexto (CABAC).
La parte de descodificación por entropía 210 puede descodificar información relacionada con la intra predicción y la inter predicción realizadas por el codificador.
La parte de reorganización 215 puede realizar una reorganización sobre el flujo de bits descodificado por entropía por la parte de descodificación por entropía 210 basándose en el método de reorganización realizado por el codificador. Los coeficientes expresados en una forma vectorial unidimensional pueden reconstruirse y reorganizarse como coeficientes de forma de bloque bidimensional. La parte de reorganización 215 puede recibir información relacionada con la exploración de coeficientes realizada por la parte de codificación y realizar una reconstrucción a través de un método de exploración inversa basándose en el orden de exploración realizado por la parte de codificación correspondiente.
La parte de cuantificación inversa 220 puede realizar una cuantificación inversa basándose en un parámetro de cuantificación proporcionado por el codificador y un valor de coeficiente del bloque reorganizado.
La parte de transformada inversa 225 puede realizar una transformada inversa, es decir, DCT inversa, DST inversa o KLT inversa, para la transformada, es decir, DCT, DST o KLT, realizada por la parte de transformada sobre un resultado de la cuantificación realizada por el codificador de vídeo. La transformada inversa puede realizarse basándose en una unidad de transmisión determinada por el codificador de vídeo. La parte de transformada inversa 225 del descodificador de vídeo puede realizar de forma selectiva una técnica de transformada (por ejemplo, DCT, DST o KLT) de acuerdo con una pluralidad de fragmentos de información tal como un método de predicción, un tamaño de un bloque actual, una dirección de predicción y similares.
La parte de predicción 230 y 235 puede generar un bloque de predicción basándose en información relacionada con la generación de un bloque de predicción proporcionado por el descodificador por entropía 210 e información acerca de un bloque o imagen previamente descodificado proporcionado por la memoria 245.
Como se ha descrito anteriormente, si el tamaño de la unidad de predicción y el tamaño de la unidad de transformada son los mismos cuando la intra predicción se realiza de la misma forma que la operación del codificador de vídeo, la intra predicción se realiza sobre la unidad de predicción basándose en el píxel existente en el lado izquierdo, el píxel
en el lado superior izquierdo y el píxel en la parte superior de la unidad de predicción. Sin embargo, si el tamaño de la unidad de predicción y el tamaño de la unidad de transformada son diferentes cuando se realiza una intra predicción, la intra predicción puede realizarse usando un píxel de referencia basándose en una unidad de transformada. Además, la intra predicción usando una subdivisión N x N solo puede usarse para la unidad de codificación más pequeña.
La parte de predicción 230 y 235 puede incluir una parte de determinación de unidad de predicción, una parte de inter predicción y una parte intra predicción. La parte de determinación de unidad de predicción puede recibir diversa información tal como información de unidad de predicción introducida desde la parte de descodificación por entropía 210, información de modo de predicción del método de intra predicción, información relacionada con la predicción de movimiento de un método de inter predicción y similares, identificar la unidad de predicción de la unidad de codificación actual y determinar si la unidad de predicción realiza una inter predicción o una intra predicción. La parte de inter predicción 230 puede realizar una inter predicción sobre la unidad de predicción actual basándose en información incluida en al menos una imagen de entre imágenes antes o después de la imagen actual que incluye la unidad de predicción actual mediante el uso de información necesaria para inter predicción de la unidad de predicción actual proporcionada por el codificador de vídeo. Como alternativa, la parte de inter predicción 230 puede realizar una inter predicción basándose en información acerca de un área parcial previamente reconstruida en la imagen actual que incluye la unidad de inter predicción actual.
Para realizar una inter predicción, puede determinarse, basándose en la unidad de codificación, si el método de predicción de movimiento de la unidad de predicción incluida en una unidad de codificación correspondiente es un modo de omisión, un modo de fusión, un modo de predicción de vector de movimiento (modo de AMVP) o un modo de copia de intra bloque.
La parte de intra predicción 235 puede generar un bloque de predicción basándose en la información acerca del píxel en la imagen actual. Cuando la unidad de intra predicción es una unidad de intra predicción que ha realizado una intra predicción, la intra predicción puede realizarse basándose en información de modo de intra predicción de la unidad de intra predicción proporcionada por el codificador de vídeo. La parte de intra predicción 235 puede incluir un filtro de intra alisado adaptativo (AIS), una parte de interpolación de píxel de referencia y un filtro de CC. El filtro de AIS es una parte que realiza el filtrado sobre el píxel de referencia del bloque actual, y puede determinar si aplicar, o no, el filtro de acuerdo con el modo de predicción de la unidad de predicción actual y se aplica el filtro. El filtrado de AIS puede realizarse sobre el píxel de referencia del bloque actual mediante el uso del modo de predicción e información de filtro de AIS de la unidad de predicción proporcionada por el codificador de vídeo. Cuando el modo de predicción del bloque actual es un modo que no realiza el filtrado de AIS, el filtro de AIS puede no aplicarse.
Cuando el modo de predicción de la unidad de predicción es una unidad de intra predicción que realiza una intra predicción basándose en un valor de píxel obtenido mediante la interpolación del píxel de referencia, la parte de interpolación de píxel de referencia puede generar un píxel de referencia de una unidad de píxel que tiene un valor entero o menos mediante la interpolación del píxel de referencia. Cuando el modo de predicción de la unidad de predicción actual es un modo de predicción que genera un bloque de predicción sin interpolar el píxel de referencia, el píxel de referencia puede no interpolarse. El filtro de CC puede generar un bloque de predicción a través del filtrado cuando el modo de predicción del bloque actual es el modo de CC.
El bloque o imagen reconstruida puede proporcionarse a la parte de filtro 240. La parte de filtro 240 puede incluir un filtro de desbloqueo, una unidad de corrección de desplazamiento y un ALF.
El codificador de vídeo puede proporcionar información acerca de si se aplica un filtro de desbloqueo a un bloque o imagen correspondiente e información acerca de si se aplica un filtro fuerte o un filtro débil cuando se aplica un filtro de desbloqueo. El filtro de desbloqueo del descodificador de vídeo puede proporcionarse con información relacionada con el filtro de desbloqueo proporcionado por el codificador de vídeo, y el descodificador de vídeo puede realizar filtrado de desbloqueo sobre un bloque correspondiente.
La unidad de corrección de desplazamiento puede realizar corrección de desplazamiento sobre el vídeo reconstruido basándose en el tipo de corrección de desplazamiento y la información de valor de desplazamiento aplicada al vídeo cuando se realiza la codificación.
El ALF puede aplicarse a una unidad de codificación basándose en información acerca de si aplicar, o no, el ALF e información acerca de coeficientes ALF proporcionados por el codificador. La información de ALF puede proporcionarse para incluirse en un conjunto de parámetros específico.
La memoria 245 puede almacenar la imagen o bloque reconstruido y usarlo como una imagen de referencia o un bloque de referencia y puede proporcionar la imagen reconstruida a una unidad de salida.
La figura 3 es una vista que muestra una unidad de árbol de codificación básica de acuerdo con una realización de la presente invención.
Un bloque de codificación de un tamaño máximo puede definirse como un bloque de árbol de codificación. Una imagen se subdivide en una pluralidad de unidades de árbol de codificación (CTU). La unidad de árbol de codificación es una unidad de codificación que tiene un tamaño máximo y puede denominarse unidad de codificación grande (LCU). La figura 3 muestra un ejemplo en el que una imagen se subdivide en una pluralidad de unidades de árbol de codificación.
El tamaño de la unidad de árbol de codificación puede definirse a un nivel de imagen o a un nivel de secuencia. Para este fin, puede señalizarse información que indica el tamaño de la unidad de árbol de codificación a través de un conjunto de parámetros de imagen o un conjunto de parámetros de secuencia.
Por ejemplo, el tamaño de la unidad de árbol de codificación para toda la imagen en una secuencia puede establecerse a 128 x 128. Como alternativa, al nivel de imagen, puede determinarse uno cualquiera de entre 128 x 128 y 256 x 256 como el tamaño de la unidad de árbol de codificación. Por ejemplo, el tamaño de la unidad de árbol de codificación puede establecerse a 128 x 128 en una primera imagen, y el tamaño de la unidad de árbol de codificación puede establecerse a 256 x 256 en una segunda imagen.
Pueden generarse bloques de codificación subdividiendo una unidad de árbol de codificación. El bloque de codificación indica una unidad básica para realizar una codificación/descodificación. Por ejemplo, puede realizarse predicción o transformada para cada bloque de codificación, o puede determinarse un modo de codificación de predicción para cada bloque de codificación. En el presente caso, el modo de codificación de predicción indica un método para generar un vídeo de predicción. Por ejemplo, el modo de codificación de predicción puede incluir predicción dentro de una pantalla (intra predicción), predicción entre pantallas (inter predicción), referenciación de imagen actual (CPR) o copia de intra bloque (IBC) o predicción combinada. Para el bloque de codificación, puede generarse un bloque de predicción mediante el uso de al menos un modo de codificación de predicción de entre la intra predicción, la inter predicción, la referenciación de imagen actual y la predicción combinada.
Puede señalizarse información que indica el modo de codificación de predicción del bloque actual a través de un flujo de bits. Por ejemplo, la información puede ser una bandera de 1 bit que indica si el modo de codificación de predicción es un modo intra o un modo inter. Solo cuando el modo de codificación de predicción del bloque actual se determina como el modo inter, puede usarse la referenciación de imagen actual o la predicción combinada.
La referencia de imagen actual es para establecer la imagen actual como una imagen de referencia y obtener un bloque de predicción del bloque actual de un área que ya se ha codificado/descodificado en la imagen actual. En el presente caso, la imagen actual significa una imagen que incluye el bloque actual. Puede señalizarse información que indica si la referencia de imagen actual se aplica al bloque actual a través de un flujo de bits. Por ejemplo, la información puede ser una bandera de 1 bit. Cuando la bandera es verdadera, el modo de codificación de predicción del bloque actual puede determinarse como la referencia de imagen actual, y cuando la bandera es falsa, el modo de predicción del bloque actual puede determinarse como inter predicción.
Como alternativa, puede determinarse el modo de codificación de predicción del bloque actual basándose en un índice de imagen de referencia. Por ejemplo, cuando el índice de imagen de referencia indica la imagen actual, el modo de codificación de predicción del bloque actual puede determinarse como la referencia de imagen actual. Cuando el índice de imagen de referencia indica una imagen que no es la imagen actual, el modo de codificación de predicción del bloque actual puede determinarse como inter predicción. Es decir, la referencia de imagen actual es un método de predicción que usa información acerca de un área en la que se ha completado la codificación/descodificación en la imagen actual, y la inter predicción es un método de predicción que usa información acerca de otra imagen en la que se ha completado la codificación/descodificación.
La predicción combinada representa un modo de codificación en el que se combinan dos o más de entre la intra predicción, la inter predicción y la referenciación de imagen actual. Por ejemplo, cuando se aplica la predicción combinada, puede generarse un primer bloque de predicción basándose en uno de entre la intra predicción, la inter predicción y la referenciación de imagen actual, y puede generarse un segundo bloque de predicción basándose en otro. Cuando se generan el primer bloque de predicción y el segundo bloque de predicción, puede generarse un bloque de predicción final a través de una operación promedio o una operación de suma ponderada del primer bloque de predicción y el segundo bloque de predicción. Puede señalizarse información que indica si la predicción combinada se aplica, o no, a través de un flujo de bits. La información puede ser una bandera de 1 bit.
La figura 4 es una vista que muestra diversos tipos de subdivisión de un bloque de codificación.
El bloque de codificación puede subdividirse en una pluralidad de bloques de codificación basándose en una subdivisión de árbol cuádruple, una subdivisión de árbol binario o una subdivisión de árbol triple. El bloque de codificación subdividido puede subdividirse de nuevo en una pluralidad de bloques de codificación basándose en la subdivisión de árbol cuádruple, la subdivisión de árbol binario o la subdivisión de árbol triple.
La subdivisión de árbol cuádruple se refiere a una técnica de subdivisión que subdivide un bloque actual en cuatro bloques. Como resultado de la subdivisión de árbol cuádruple, el bloque actual puede subdividirse en cuatro subdivisiones de forma cuadrada (véase 'SPLIT_QT' de la figura 4 (a)).
La subdivisión de árbol binario se refiere a una técnica de subdivisión que subdivide un bloque actual en dos bloques. Subdividir un bloque actual en dos bloques a lo largo de la dirección vertical (es decir, usar una línea vertical que cruza el bloque actual) puede denominarse subdivisión de árbol binario de dirección vertical, y subdividir un bloque actual en dos bloques a lo largo de la dirección horizontal (es decir, usar una línea horizontal que cruza el bloque actual) puede denominarse subdivisión de árbol binario de dirección horizontal. Como resultado de la subdivisión de árbol binario, el bloque actual puede subdividirse en dos subdivisiones de forma no cuadrada. 'SPLIT_BT_VER' de la figura 4 (b) muestra un resultado de la subdivisión de árbol binario de dirección vertical y 'SPLIT_BT_HOR' de la figura 4 (c) muestra un resultado de la subdivisión de árbol binario de dirección horizontal.
La subdivisión de árbol triple se refiere a una técnica de subdivisión que subdivide un bloque actual en tres bloques. Subdividir un bloque actual en tres bloques a lo largo de la dirección vertical (es decir, usar dos líneas verticales que cruzan el bloque actual) puede denominarse subdivisión de árbol triple de dirección vertical, y subdividir un bloque actual en tres bloques a lo largo de la dirección horizontal (es decir, usar dos líneas horizontales que cruzan el bloque actual) puede denominarse subdivisión de árbol triple de dirección horizontal. Como resultado de la subdivisión de árbol triple, el bloque actual puede subdividirse en tres subdivisiones de forma no cuadrada. En este punto, la anchura/altura de una subdivisión situada en el centro del bloque actual puede ser dos veces más grande que la anchura/altura de las otras subdivisiones. 'SPLIT_TT_VER' de la figura 4 (d) muestra un resultado de la subdivisión de árbol triple de dirección vertical y 'SPLIT_TT_HOR' de la figura 4 (e) muestra un resultado de la subdivisión de árbol triple de dirección horizontal.
El número de veces de subdivisión de una unidad de árbol de codificación puede definirse como una profundidad de subdivisión. La profundidad de subdivisión máxima de una unidad de árbol de codificación puede determinarse a un nivel de secuencia o de imagen. En consecuencia, la profundidad de subdivisión máxima de una unidad de árbol de codificación puede ser diferente para cada secuencia o imagen.
Como alternativa, la profundidad de subdivisión máxima para cada técnica de subdivisión puede determinarse individualmente. Por ejemplo, la profundidad de subdivisión máxima permitida para la subdivisión de árbol cuádruple puede ser diferente de la profundidad de subdivisión máxima permitida para la subdivisión de árbol binario y/o la subdivisión de árbol triple.
El codificador puede señalizar información que indica al menos uno de entre el tipo de subdivisión y la profundidad de subdivisión del bloque actual a través de un flujo de bits. El descodificador puede determinar el tipo de subdivisión y la profundidad de subdivisión de una unidad de árbol de codificación basándose en la información analizada desde el flujo de bits.
La figura 5 es una vista que muestra un patrón de subdivisión de una unidad de árbol de codificación.
Subdividir un bloque de codificación usando una técnica de subdivisión tal como una subdivisión de árbol cuádruple, una subdivisión de árbol binario y/o subdivisión de árbol triple puede denominarse subdivisión de árbol múltiple.
Los bloques de codificación generados mediante la aplicación de la subdivisión de árbol múltiple a un bloque de codificación pueden denominarse bloques de codificación inferiores. Cuando la profundidad de subdivisión de un bloque de codificación es k, la profundidad de subdivisión de los bloques de codificación inferiores se establece a k 1.
Por el contrario, para los bloques de codificación que tienen una profundidad de subdivisión de k 1, un bloque de codificación que tiene una profundidad de subdivisión de k puede denominarse bloque de codificación superior.
El tipo de subdivisión del bloque de codificación actual puede determinarse basándose en al menos uno de entre un tipo de subdivisión de un bloque de codificación superior y un tipo de subdivisión de un bloque de codificación vecino. En el presente caso, el bloque de codificación vecino es un bloque de codificación adyacente al bloque de codificación actual y puede incluir al menos uno de entre un bloque vecino superior y un bloque vecino izquierdo del bloque de codificación actual, y un bloque vecino adyacente a la esquina superior izquierda. En el presente caso, el tipo de subdivisión puede incluir al menos uno de entre si una subdivisión de árbol cuádruple, si una subdivisión de árbol binario, una dirección de subdivisión de árbol binario, si una subdivisión de árbol triple y una dirección de subdivisión de árbol triple o no.
Para determinar un tipo de subdivisión de un bloque de codificación, puede señalizarse información que indica si puede subdividirse, o no, el bloque de codificación a través de un flujo de bits. La información es una bandera de 1 bit de 'split_cu_flag' y cuando la bandera es verdadera, indica que el bloque de codificación se subdivide mediante una técnica de subdivisión de árbol de encabezamiento ( ^ cuádruple).
Cuando split_cu_flag es verdadera, puede señalizarse información que indica si el bloque de codificación se subdivide en árbol cuádruple a través de un flujo de bits. La información es una bandera de 1 bit de split_qt_flag, y cuando la bandera es verdadera, el bloque de codificación puede subdividirse en cuatro bloques.
Por ejemplo, en el ejemplo mostrado en la figura 5, como una unidad de árbol de codificación se subdivide en árbol cuádruple, se generan cuatro bloques de codificación que tienen una profundidad de subdivisión de 1. Además, se muestra que la subdivisión de árbol cuádruple se aplica de nuevo al primer y cuarto bloque de codificación de entre los cuatro bloques de codificación generados como resultado de la subdivisión de árbol cuádruple. Como resultado, pueden generarse cuatro bloques de codificación que tienen una profundidad de subdivisión de 2.
Además, los bloques de codificación que tienen una profundidad de subdivisión de 3 pueden generarse mediante la aplicación de la subdivisión de árbol cuádruple de nuevo a un bloque de codificación que tiene una profundidad de subdivisión de 2.
Cuando no se aplica una subdivisión de árbol cuádruple al bloque de codificación, puede determinarse si se realiza una subdivisión de árbol binario o una subdivisión de árbol triple sobre el bloque de codificación considerando al menos uno de entre el tamaño del bloque de codificación, si el bloque de codificación se sitúa en la frontera de imagen, la profundidad de subdivisión máxima y el tipo de subdivisión de un bloque vecino. Cuando se determina realizar una subdivisión de árbol binario o una subdivisión de árbol triple sobre el bloque de codificación, puede señalizarse información que indica la dirección de subdivisión a través de un flujo de bits. La información puede ser una bandera de 1 bit de mtt_split_cu_vertical_flag. Basándose en la bandera, puede determinarse si la dirección de subdivisión es una dirección vertical o una dirección horizontal. Además, puede señalizarse información que indica si se aplica una subdivisión de árbol binario o una subdivisión de árbol triple al bloque de codificación a través de un flujo de bits. La información puede ser una bandera de 1 bit de mtt_split_cu_binary_flag. Basándose en la bandera, puede determinarse si se aplica una subdivisión de árbol binario o una subdivisión de árbol triple al bloque de codificación.
Por ejemplo, en el ejemplo mostrado en la figura 5, se muestra que la subdivisión de árbol binario de dirección vertical se aplica a un bloque de codificación que tiene una profundidad de subdivisión de 1, la subdivisión de árbol triple de dirección vertical se aplica al bloque de codificación del lado izquierdo de entre los bloques de codificación generados como resultado de la subdivisión y la subdivisión de árbol binario de dirección vertical se aplica al bloque de codificación del lado derecho.
La inter predicción es un modo de codificación de predicción que predice un bloque actual mediante el uso de información de la imagen previa. Por ejemplo, un bloque en la misma posición que el bloque actual en la imagen previa (en lo sucesivo en el presente documento, un bloque ubicado conjuntamente) puede establecerse como el bloque de predicción del bloque actual. En lo sucesivo en el presente documento, un bloque de predicción generado basándose en un bloque en la misma posición que el bloque actual se denominará bloque de predicción ubicado conjuntamente.
Por otra parte, cuando un objeto existente en la imagen previa se ha movido a otra posición en la imagen actual, el bloque actual puede predecirse eficazmente mediante el uso de un movimiento del objeto. Por ejemplo, cuando pueden conocerse la dirección de movimiento y el tamaño de un objeto mediante la comparación de la imagen previa y la imagen actual, puede generarse un bloque de predicción (o un vídeo de predicción) del bloque actual considerando información de movimiento del objeto. En lo sucesivo en el presente documento, el bloque de predicción generado usando información de movimiento puede denominarse bloque de predicción de movimiento.
Puede generarse un bloque residual restando el bloque de predicción del bloque actual. En este punto, cuando hay un movimiento de un objeto, la energía del bloque residual puede reducirse mediante el uso del bloque de predicción de movimiento en lugar del bloque de predicción ubicado conjuntamente y, por lo tanto, puede mejorarse el rendimiento de compresión del bloque residual.
Como se ha descrito anteriormente, generar un bloque de predicción mediante el uso de información de movimiento puede denominarse predicción de compensación de movimiento. En la mayoría de inter predicción, puede generarse un bloque de predicción basándose en la predicción de compensación de movimiento.
La información de movimiento puede incluir al menos uno de entre un vector de movimiento, un índice de imagen de referencia, una dirección de predicción y un índice de factor de ponderación bidireccional. El vector de movimiento representa la dirección de movimiento y el tamaño de un objeto. El índice de imagen de referencia especifica una imagen de referencia del bloque actual de entre imágenes de referencia incluidas en una lista de imágenes de referencia. La dirección de predicción indica una cualquiera de entre una predicción L0 unidireccional, una predicción L1 unidireccional y una predicción bidireccional (predicción L0 y predicción L1). De acuerdo con la dirección de predicción del bloque actual, puede usarse al menos una de entre información de movimiento en la dirección L0 e información de movimiento en la dirección L1. El índice de factor de ponderación bidireccional especifica un valor de ponderación aplicado a un bloque de predicción L0 y un valor de ponderación aplicado a un bloque de predicción L1.
La figura 6 es un diagrama de flujo que ilustra un método de inter predicción de acuerdo con una realización de la presente invención.
Haciendo referencia a la figura 6, el método de inter predicción incluye las etapas de determinar un modo de inter predicción de un bloque actual (S601), adquirir información de movimiento del bloque actual de acuerdo con el modo
de inter predicción determinado (S602) y realizar predicción de compensación de movimiento para el bloque actual basándose en la información de movimiento adquirida (S603).
En el presente caso, el modo de inter predicción representa diversas técnicas para determinar información de movimiento del bloque actual, y puede incluir un modo de inter predicción que usa información de movimiento de traslación y un modo de inter predicción que usa información de movimiento afín. Por ejemplo, el modo de inter predicción que usa información de movimiento de traslación puede incluir un modo de fusión y un modo de predicción de vector de movimiento, y el modo de inter predicción que usa información de movimiento afín puede incluir un modo de fusión afín y un modo de predicción de vector de movimiento afín. La información de movimiento del bloque actual puede determinarse basándose en un bloque vecino adyacente al bloque actual o información analizada desde un flujo de bits de acuerdo con el modo de inter predicción.
En lo sucesivo en el presente documento, se describirá con detalle el método de inter predicción que usa información de movimiento afín.
La figura 7 es una vista que muestra un movimiento no lineal de un objeto.
Puede generare un movimiento no lineal de un objeto en un vídeo. Por ejemplo, como se muestra en el ejemplo de la figura 7, puede tener lugar un movimiento no lineal de un objeto, tal como un acercamiento, un alejamiento, una rotación, una transformada afín o similares de una cámara. Cuando tiene lugar un movimiento no lineal de un objeto, el movimiento del objeto no puede expresarse eficazmente con un vector de movimiento de traslación. En consecuencia, puede mejorarse la eficiencia de codificación usando un movimiento afín en lugar de un movimiento de traslación en un área en la que tiene lugar un movimiento no lineal de un objeto.
La figura 8 es un diagrama de flujo que ilustra un método de inter predicción basándose en un movimiento afín de acuerdo con una realización de la presente invención.
Puede determinarse si se aplica una técnica de inter predicción basándose en un movimiento afín al bloque actual basándose en la información analizada a partir de un flujo de bits. Específicamente, si se aplica la técnica de inter predicción basándose en un movimiento afín al bloque actual puede determinarse basándose en al menos una de entre una bandera que indica si se aplica el modo de fusión afín al bloque actual y una bandera que indica si se aplica el modo de predicción de vector de movimiento afín al bloque actual.
Cuando se aplica la técnica de inter predicción basándose en un movimiento afín al bloque actual, puede determinarse un modelo de movimiento afín del bloque actual (S801). El modelo de movimiento afín puede determinarse como al menos uno de entre un modelo de movimiento afín de seis parámetros y un modelo de movimiento afín de cuatro parámetros. El modelo de movimiento afín de seis parámetros expresa un movimiento afín usando seis parámetros, y el modelo de movimiento afín de cuatro parámetros expresa un movimiento afín usando cuatro parámetros.
La ecuación 1 expresa un movimiento afín usando seis parámetros. El movimiento afín representa un movimiento de traslación para un área predeterminada determinada por vectores de semilla afines.
Cuando se expresa un movimiento afín usando seis parámetros, puede expresarse un movimiento complicado. Sin embargo, a medida que aumenta el número de bits requerido para codificar cada uno de los parámetros, puede reducirse la eficiencia de codificación. En consecuencia, el movimiento afín puede expresarse usando cuatro parámetros. La ecuación 2 expresa un movimiento afín usando cuatro parámetros.
Puede codificarse información para determinar un modelo de movimiento afín del bloque actual, y señalizarse la misma a través de un flujo de bits. Por ejemplo, la información puede ser una bandera de 1 bit de 'affine_type_flag'. Cuando el valor de la bandera es 0, puede indicar que se aplica un modelo de movimiento afín de 4 parámetros, y cuando el valor de la bandera es 1, puede indicar que se aplica un modelo de movimiento afín de 6 parámetros. La bandera puede codificarse mediante la unidad de sector, de tesela o de bloque (por ejemplo, mediante la unidad de bloque de
codificación o de árbol de codificación). Cuando se señaliza una bandera al nivel de sector, puede aplicarse un modelo de movimiento afín determinado al nivel de sector a todos los bloques que pertenecen al sector.
Como alternativa, puede determinarse un modelo de movimiento afín del bloque actual basándose en un modo de inter predicción afín del bloque actual. Por ejemplo, cuando se aplica el modo de fusión afín, puede determinarse el modelo de movimiento afín del bloque actual como un modelo de movimiento de 4 parámetros. Por otro lado, cuando se aplica el modo de predicción de vector de movimiento afín, puede codificarse y señalizarse información para determinar el modelo de movimiento afín del bloque actual a través de un flujo de bits. Por ejemplo, cuando se aplica el modo de predicción de vector de movimiento afín al bloque actual, puede determinarse el modelo de movimiento afín del bloque actual basándose en la bandera de 1 bit de 'affine_type_flag'.
A continuación, puede derivarse un vector de semilla afín del bloque actual (S802). Cuando se selecciona un modelo de movimiento afín de 4 parámetros, pueden derivarse vectores de movimiento en dos puntos de control del bloque actual. Por otro lado, cuando se selecciona un modelo de movimiento afín de 6 parámetros, pueden derivarse vectores de movimiento en tres puntos de control del bloque actual. El vector de movimiento en un punto de control puede denominarse vector de semilla afín. El punto de control puede incluir al menos una de entre la esquina superior izquierda, la esquina superior derecha y la esquina inferior izquierda del bloque actual.
La figura 9 es una vista que muestra un ejemplo de vectores de semilla afines de cada modelo de movimiento afín.
En el modelo de movimiento afín de 4 parámetros, pueden derivarse vectores de semilla afines para dos de entre la esquina superior izquierda, la esquina superior derecha y la esquina inferior izquierda. Por ejemplo, como se muestra en el ejemplo de la figura 9(a), cuando se selecciona un modelo de movimiento afín de 4 parámetros, puede derivarse un vector afín usando el vector de semilla afín sv0 para la esquina superior izquierda del bloque actual (por ejemplo, la muestra superior izquierda (x1, y1)) y el vector de semilla afín sv1 para la esquina superior derecha del bloque actual (por ejemplo, la muestra superior derecha (x1, y1)). También es posible usar un vector de semilla afín para la esquina inferior izquierda en lugar del vector de semilla afín para la esquina superior izquierda, o usar un vector de semilla afín para la esquina inferior izquierda en lugar del vector de semilla afín para la esquina superior derecha.
En el modelo de movimiento afín de 6 parámetros, pueden derivarse vectores de semilla afines para la esquina superior izquierda, la esquina superior derecha y la esquina inferior izquierda. Por ejemplo, como se muestra en el ejemplo de la figura 9 (b), cuando se selecciona un modelo de movimiento afín de 6 parámetros, puede derivarse un vector afín usando el vector de semilla afín sv0 para la esquina superior izquierda del bloque actual (por ejemplo, muestra superior izquierda (x1, y1)), el vector de semilla afín sv1 para la esquina superior derecha del bloque actual (por ejemplo, la muestra superior derecha (x1, y1)) y el vector de semilla afín sv2 para la esquina superior izquierda del bloque actual (por ejemplo, la muestra superior izquierda (x2, y2)).
En la realización descrita a continuación, en el modelo de movimiento afín de 4 parámetros, los vectores de semilla afines del punto de control superior izquierdo y del punto de control superior derecho se denominarán primer vector de semilla afín y segundo vector de semilla afín, respectivamente. En las realizaciones que usan el primer vector de semilla afín y el segundo vector de semilla afín descritos a continuación, puede sustituirse al menos uno de entre el primer vector de semilla afín y el segundo vector de semilla afín por el vector de semilla afín del punto de control inferior izquierdo (un tercer vector de semilla afín) o el vector de semilla afín del punto de control inferior derecho (un cuarto vector de semilla afín).
Además, en el modelo de movimiento afín de 6 parámetros, los vectores de semilla afines del punto de control superior izquierdo, el punto de control superior derecho y el punto de control inferior izquierdo se denominarán primer vector de semilla afín, segundo vector de semilla afín y tercer vector de semilla afín, respectivamente. En las realizaciones que usan el primer vector de semilla afín, el segundo vector de semilla afín y el tercer vector de semilla afín descritos a continuación, puede sustituirse al menos uno de entre el primer vector de semilla afín, el segundo vector de semilla afín y el tercer vector de semilla afín por el vector de semilla afín del punto de control inferior derecha (un cuarto vector de semilla afín).
Puede derivarse un vector afín para cada subbloque usando los vectores de semilla afines (S803). En el presente caso, el vector afín representa un vector de movimiento de traslación derivado basándose en los vectores de semilla afines. El vector afín de un subbloque puede denominarse vector de movimiento de subbloque afín o un vector de movimiento de subbloque.
La figura 10 es una vista que muestra un ejemplo de vectores afines de subbloques en un modelo de movimiento de 4 parámetros.
El vector afín del subbloque puede derivarse basándose en la posición del punto de control, la posición del subbloque y el vector de semilla afín. Por ejemplo, la ecuación 3 muestra un ejemplo de derivación de un vector de subbloque afín.
En la ecuación 3, (x, y) denota la posición de un subbloque. En el presente caso, la posición de un subbloque indica la posición de una muestra de referencia incluida en el subbloque. La muestra de referencia puede ser una muestra situada en la esquina superior izquierda del subbloque o una muestra de la que al menos una de entre las coordenadas del eje x y del eje y es un punto central. (x0 , y0) denota la posición del primer punto de control y (sv0x, sv0y) denota el primer vector de semilla afín. Además, (x1, y1) denota la posición del segundo punto de control y (sv1x, sv1y) denota el segundo vector de semilla afín.
Cuando el primer punto de control y el segundo punto de control corresponden a la esquina superior izquierda y a la esquina superior derecha del bloque actual, respectivamente, x1 - x0 puede establecerse a un valor igual a la anchura del bloque actual.
Posteriormente, puede realizarse una predicción de compensación de movimiento para cada subbloque usando el vector afín de cada subbloque (S804). Como resultado de la realización de predicción de compensación de movimiento, puede generarse un bloque de predicción para cada subbloque. Los bloques de predicción de los subbloques pueden establecerse como los bloques de predicción del bloque actual.
El vector de semilla afín del bloque actual puede derivarse basándose en el vector de semilla afín de un bloque vecino adyacente al bloque actual. Cuando el modo de inter predicción del bloque actual es un modo de fusión afín, el vector de semilla afín de un candidato de fusión incluido en la lista de candidatos de fusión puede determinarse como el vector de semilla afín del bloque actual. Además, cuando el modo de inter predicción del bloque actual es un modo de fusión afín, información de movimiento que incluye al menos uno de entre el índice de imagen de referencia del bloque actual, una bandera de predicción de una dirección específica y un valor de ponderación bidireccional puede establecerse para que sea la misma que el del candidato de fusión.
El candidato de fusión puede derivarse basándose en un bloque vecino del bloque actual. El bloque vecino puede incluir al menos uno de entre un bloque vecino espacial adyacente espacialmente al bloque actual, y un bloque vecino temporal incluido en una imagen diferente de la imagen actual.
La figura 11 es una vista que muestra un bloque vecino que puede usarse para derivar un candidato de fusión.
Un bloque vecino del bloque actual puede incluir al menos uno de entre un bloque vecino (A) adyacente al lado izquierdo del bloque actual, un bloque vecino (B) adyacente a la parte superior del bloque actual, un bloque vecino (C) adyacente a la esquina superior derecha del bloque actual, un bloque vecino (D) adyacente a la esquina inferior izquierda del bloque actual y un bloque vecino (E) adyacente a la esquina superior izquierda del bloque actual. Cuando las coordenadas de la muestra superior izquierda del bloque actual son (x0 , y0), el bloque vecino izquierdo A incluye una muestra en la posición de (x0 - 1, y0 + H - 1), y el bloque vecino superior B incluye una muestra en la posición de (x0 + W - 1,y0 - 1). En el presente caso, W y H denotan la anchura y la altura del bloque actual, respectivamente. El bloque vecino superior derecho C incluye una muestra en la posición de (x0 + W, y0 - 1), y el bloque vecino inferior izquierdo D incluye una muestra en la posición de (x0 - 1, y0 + H). El bloque vecino superior izquierdo E incluye una muestra en la posición de (x0 - 1, y0 - 1).
Cuando un bloque vecino se codifica en el modo de inter predicción afín, puede derivarse un vector de semilla afín de un candidato de fusión basándose en el vector de semilla afín del bloque vecino. En lo sucesivo en el presente documento, el bloque vecino codificado en un modo de inter predicción afín se denominará bloque vecino afín.
Puede generarse un candidato de fusión para el bloque actual buscando bloques vecinos en un orden de exploración predefinido. El orden de exploración puede predefinirse en el codificador y el descodificador. Por ejemplo, pueden buscarse bloques vecinos en un orden de A, B, C, D y E. Además, pueden derivarse secuencialmente candidatos de fusión a partir de los bloques vecinos afines buscados. Como alternativa, el orden de exploración puede determinarse de forma adaptativa basándose en al menos uno de entre el tamaño, la forma y el modelo de movimiento afín del bloque actual. Es decir, los órdenes de exploración de los bloques de los que al menos uno de entre el tamaño, la forma y el modelo de movimiento afín es diferente pueden ser diferentes entre sí.
Como alternativa, los bloques situados en la parte superior del bloque actual se buscan secuencialmente, y un candidato de fusión se deriva de un bloque vecino afín hallado en primer lugar, y los bloques situados en el lado izquierdo del bloque actual se buscan secuencialmente, y un candidato de fusión puede derivarse de un bloque vecino afín hallado en primer lugar. En el presente caso, los bloques vecinos situados en la parte superior del bloque actual
incluyen al menos uno de entre el bloque vecino E, el bloque vecino B y el bloque vecino C, y los bloques situados en el lado izquierdo del bloque actual pueden incluir al menos uno de entre el bloque A y el bloque D. En este punto, el bloque vecino E también puede clasificarse como un bloque situado en el lado izquierdo del bloque actual.
Aunque no se muestra, un candidato de fusión puede derivarse de un bloque vecino temporal del bloque actual. En el presente caso, el bloque vecino temporal puede incluir un bloque en una posición que es igual que la del bloque actual en una imagen ubicada conjuntamente o un bloque adyacente al mismo. Específicamente, cuando un bloque vecino temporal del bloque actual se codifica en un modo de inter predicción afín, un candidato de fusión puede derivarse basándose en un vector de semilla afín de un candidato de fusión temporal.
Puede generarse una lista de candidatos de fusión que incluye candidatos de fusión, y un vector de semilla afín de uno de entre los candidatos de fusión incluidos en la lista de candidatos de fusión puede determinarse como el vector de semilla afín del bloque actual. Para este fin, puede codificarse información de índice para identificar uno cualquiera de los candidatos a fusión, y transmitirse la misma a través de un flujo de bits.
Como otro ejemplo, los bloques vecinos se buscan de acuerdo con un orden de exploración, y un vector de semilla afín del bloque actual puede derivarse del vector de semilla afín de un bloque vecino afín hallado en primer lugar.
Como se ha descrito anteriormente, en el modo de fusión afín, un vector de semilla afín del bloque actual puede derivarse usando un vector de semilla afín de un bloque vecino.
Cuando el modo de inter predicción del bloque actual es un modo de predicción de vector de movimiento afín, el vector de semilla afín de un candidato de predicción de vector de movimiento incluido en una lista de candidatos de predicción de vector de movimiento puede determinarse como un valor de predicción de vector de semilla afín del bloque actual. El vector de semilla afín del bloque actual puede derivarse añadiendo un valor de diferencia de vector de semilla afín al valor de predicción de vector de semilla afín.
Un candidato de predicción de vector de semilla afín puede derivarse basándose en un bloque vecino del bloque actual. Específicamente, los bloques vecinos situados en la parte superior del bloque actual se buscan de acuerdo con un orden de exploración predeterminado, y un primer candidato de predicción de vector de semilla afín puede derivarse de un bloque vecino afín hallado en primer lugar. Además, los bloques vecinos situados en el lado izquierdo del bloque actual se buscan de acuerdo con un orden de exploración predeterminado, y un segundo candidato de predicción de vector de semilla afín puede derivarse de un bloque vecino afín hallado en primer lugar.
Puede codificarse información para determinar un valor de diferencia de vector de semilla afín, y transmitirse la misma a través de un flujo de bits. La información puede incluir información de tamaño que indica la magnitud del valor de diferencia de vector de semilla afín, y codificar información que indica un signo del valor de diferencia de vector de semilla afín. El valor de diferencia de vector de semilla afín para cada punto de control puede establecerse para que sea igual. Como alternativa, el valor de diferencia de vector de semilla afín puede establecerse de forma diferente para cada punto de control.
Como se ha descrito anteriormente, un vector de semilla afín de un candidato de fusión o un candidato de predicción de vector de semilla afín puede derivarse de un vector de semilla afín de un bloque vecino afín, y un vector de semilla afín del bloque actual puede derivarse usando el vector de semilla afín derivado del candidato de fusión o el candidato de predicción de vector de semilla afín. Como alternativa, después de buscar bloques vecinos afines de acuerdo con un orden de exploración predeterminado, el vector de semilla afín del bloque actual puede derivarse del vector de semilla afín de un bloque vecino afín hallado en primer lugar.
En lo sucesivo en el presente documento, se describirá con detalle un método para derivar un vector de semilla afín del bloque actual, un candidato de fusión o un candidato de predicción de vector de semilla afín a partir de un vector de semilla afín de un bloque vecino afín. En las realizaciones descritas a continuación, puede entenderse que derivar un vector de semilla afín del bloque actual es derivar un vector de semilla afín de un candidato de fusión o derivar un vector de semilla afín de un candidato de predicción de vector de semilla afín.
La figura 12 es una vista que muestra un ejemplo de derivación de un vector de semilla afín de un bloque actual basándose en un vector de semilla afín de un bloque vecino afín.
Cuando se almacenan un primer vector de semilla afín nv0 para el punto de control superior izquierdo y un segundo vector de semilla afín nv1 para el punto de control superior derecho para un bloque vecino afín, un tercer vector de semilla afín nv2 para el punto de control inferior izquierdo del bloque vecino afín puede derivarse basándose en el primer vector de semilla afín y en el segundo vector de semilla afín. La ecuación 4 muestra un ejemplo de derivación del tercer vector de semilla afín.
[Ecuación 4]
En la Ecuación 4, (nv0x, nv0y) denota un primer vector de semilla afín nv0 , (nvix, nviy) denota un segundo vector de semilla afín nv1 y (nv2x, nv2y) denota un tercer vector de semilla afín nv2. Además, (xn0 , xn0) denota la posición del primer punto de control, (xn1, xn1) denota la posición del segundo punto de control y (xn2 , xn2) denota la posición del tercer punto de control.
Posteriormente, un vector de semilla afín del bloque actual puede derivarse usando el primer vector de semilla afín, el segundo vector de semilla afín y el tercer vector de semilla afín. La ecuación 5 muestra un ejemplo de derivación del primer vector de semilla afín v0 del bloque actual, y la Ecuación 6 muestra un ejemplo de derivación del segundo vector de semilla afín vi del bloque actual.
[Ecuación 5]
En las Ecuaciones 5 y 6, (v0x, v0y) denota el primer vector de semilla afín sv0 del bloque actual y (v1x, v 1y) denota el segundo vector de semilla afín sv1 del bloque actual. Además, (x0 , y0) denota la posición del primer punto de control y (x1, y1) denota la posición del segundo punto de control. Por ejemplo, el primer punto de control indica la esquina superior izquierda del bloque actual y el segundo punto de control indica la esquina superior derecha del bloque actual.
En el ejemplo descrito anteriormente, se ha descrito que los vectores de semilla afines del bloque actual se derivan usando tres vectores de semilla afines para un bloque vecino afín. Como otro ejemplo, los vectores de semilla afines del bloque actual pueden derivarse usando solo dos de los vectores de semilla afines de un bloque vecino afín.
Como alternativa, los vectores de semilla afines del bloque actual pueden derivarse usando un cuarto vector de semilla afín para la esquina inferior derecha, en lugar del primer vector de semilla afín de la esquina superior izquierda, el segundo vector de semilla afín de la esquina superior derecha o el tercer vector de semilla afín de la esquina inferior izquierda de un bloque vecino afín.
En particular, cuando la frontera superior del bloque actual está en contacto con la frontera superior de una unidad de árbol de codificación y se desea usar un vector de semilla afín para un punto de control superior (por ejemplo, la esquina superior izquierda o la esquina superior derecha) de un bloque vecino afín adyacente a la parte superior del bloque actual (denominado, en lo sucesivo en el presente documento, bloque vecino afín superior), estos deberían almacenarse en la memoria con antelación, y un puede tener lugar problema de aumento en el número de memorias intermedias de líneas. En consecuencia, cuando la frontera superior del bloque actual está en contacto con la frontera superior de la unidad de árbol de codificación, puede establecerse usar un vector de semilla afín de un punto de control inferior (por ejemplo, la esquina inferior izquierda o la esquina inferior derecha), en lugar del vector de semilla afín del punto de control superior, para el bloque vecino afín superior. Por ejemplo, pueden derivarse vectores de semilla afines del bloque actual usando el tercer vector de semilla afín para la esquina inferior izquierda y el cuarto vector de semilla afín para la esquina inferior derecha del bloque vecino afín superior. En este punto, los vectores de semilla afines para las esquinas inferiores pueden copiarse de los vectores de semilla afines para las esquinas superiores o derivarse de los vectores de semilla afines para las esquinas superiores. Por ejemplo, el primer vector de semilla afín, el segundo vector de semilla afín o el tercer vector de semilla afín puede convertirse en o sustituir al cuarto vector de semilla afín de la esquina inferior derecha.
Las ecuaciones 7 y 8 muestran un ejemplo de derivación del primer vector de semilla afín y el segundo vector de semilla afín del bloque actual usando el tercer vector de semilla afín para el punto de control inferior izquierdo y el cuarto vector de semilla afín para el punto de control inferior derecho de un vector afín vecino.
En las Ecuaciones 7 y 8, (xn2 , yn2) denota las coordenadas del punto de control inferior izquierdo de un bloque vecino afín y (xn3, yn3) denota las coordenadas del punto de control inferior derecho del bloque vecino afín. (x0 , y0) denota las coordenadas del punto de control superior izquierdo del bloque actual y (x1 , y1) denota las coordenadas del punto de control superior derecho del bloque actual. (nv2x, nv2y) denota el vector de semilla afín del punto de control inferior izquierdo de un bloque vecino afín (es decir, el tercer vector de semilla afín) y (nv3x, nv3y) denota el vector de semilla afín del punto de control inferior derecho del bloque vecino afín (es decir, el cuarto vector de semilla afín). (v0x, v0y) denota el vector de semilla afín del punto de control superior izquierdo del bloque actual (es decir, el primer vector de semilla afín) y (v1x, v1y) denota el vector de semilla afín del punto de control superior derecho del bloque actual (es decir, el segundo vector de semilla afín).
La operación de división incluida en las Ecuaciones 7 y 8 puede cambiarse a una operación de desplazamiento. La operación de desplazamiento puede realizarse basándose en un valor derivado mediante la anchura entre el punto de control inferior izquierdo y el punto de control inferior derecho (es decir, (xn3 - xn2)).
Como se muestra en el ejemplo descrito anteriormente, pueden derivarse vectores de semilla afines del bloque actual a partir de vectores de semilla afines de un bloque vecino afín que se ha codificado/descodificado. Para este fin, deberían almacenarse en la memoria vectores de semilla afines del bloque vecino afín que se ha codificado/descodificado. Sin embargo, debido a que los vectores de semilla afines del bloque vecino afín se almacenan en la memoria además de vectores de movimiento de traslación (es decir, vectores afines) de subbloques incluidos en el bloque vecino afín, hay un problema de aumento del uso de memoria. Para solucionar este problema, el vector de semilla afín del bloque actual puede derivarse usando el vector de movimiento de un subbloque adyacente al punto de control del bloque vecino afín, en lugar del vector de semilla afín del bloque vecino afín. Es decir, un vector de movimiento de un subbloque adyacente al punto de control de un bloque vecino afín puede establecerse como el vector de semilla afín del bloque vecino afín. En el presente caso, el subbloque es un bloque que tiene un tamaño/forma predefinido en el codificador y el descodificador, y puede ser un bloque que tiene un tamaño/forma básico para almacenar un vector de movimiento. Por ejemplo, el subbloque puede ser un bloque cuadrado de un tamaño de 4 x 4. Como alternativa, un vector de movimiento para una posición de muestra específica puede establecerse como el vector de semilla afín del bloque vecino afín.
La figura 13 es una vista que muestra un ejemplo de establecimiento de un vector de movimiento de un subbloque como un vector de semilla afín de un bloque vecino afín.
Un vector de movimiento de un subbloque adyacente a un punto de control puede establecerse como un vector de semilla afín del punto de control. Por ejemplo, en el ejemplo mostrado en la figura 13, un vector de movimiento (nv4x, nv4y) de un subbloque (el subbloque inferior izquierdo) adyacente a la esquina inferior izquierda de un bloque vecino afín puede establecerse como el vector de semilla afín (nv2x, nv2x) del punto de control inferior izquierdo y un vector de movimiento (nv5x, nv5y) de un subbloque (el subbloque inferior derecho) adyacente a la esquina inferior derecha puede establecerse como el vector de semilla afín (nv3x, nv3y) del punto de control en la esquina inferior derecha. En el presente caso, el subbloque inferior izquierdo puede significar un subbloque que incluye una muestra (por ejemplo, una muestra en la posición de (xn2 , yn2 - 1)) adyacente al punto de control inferior izquierdo (xn2, yn2) en el bloque afín vecino, y el subbloque inferior derecho puede significar un bloque que incluye una muestra (por ejemplo, una muestra en la posición de (xn3 - 1, yn3 - 1)) adyacente al punto de control inferior derecho (xn3, yn3) en el bloque afín vecino. Cuando se derivan vectores de semilla afines del bloque actual basándose en las Ecuaciones 7 y 8, el tercer vector de semilla afín del bloque vecino afín puede sustituirse con el vector de movimiento del subbloque inferior izquierdo, y el cuarto vector de semilla afín puede sustituirse con el vector de movimiento del subbloque inferior derecho.
En lo sucesivo en el presente documento, en la realización descrita a continuación, un subbloque usado como el vector de semilla afín de un bloque vecino afín se denominará subbloque afín.
De acuerdo con una realización de la presente invención, un subbloque afín puede determinarse basándose en una muestra en una posición específica. Por ejemplo, un subbloque que incluye una muestra en una posición específica puede establecerse como un subbloque afín. En lo sucesivo en el presente documento, una muestra en una posición específica se denominará muestra de referencia afín. Además, una muestra de referencia usada para determinar un subbloque afín del punto de control inferior izquierdo se denomina muestra de referencia inferior izquierda, y una muestra de referencia usada para determinar un subbloque afín del punto de control inferior derecho se denomina muestra de referencia inferior derecha.
La muestra de referencia inferior izquierda y la muestra de referencia inferior derecha pueden seleccionarse de entre muestras incluidas en el bloque vecino afín. Por ejemplo, al menos una de entre la muestra superior izquierda, la muestra inferior izquierda, la muestra superior derecha y la muestra inferior izquierda del subbloque inferior izquierdo puede establecerse como la muestra de referencia inferior izquierda, y al menos una de entre la muestra superior izquierda, la muestra inferior izquierda, la muestra superior derecha y la muestra inferior izquierda del subbloque inferior derecho puede establecerse como la muestra de referencia inferior derecha. En consecuencia, vectores de movimiento del subbloque inferior izquierdo que incluye la muestra de referencia inferior izquierda y el subbloque inferior derecho que incluye la muestra de referencia inferior derecha pueden establecerse como un vector de semilla afín para el punto de control inferior izquierdo y un vector de semilla afín para el punto de control inferior derecho, respectivamente.
Como otro ejemplo, al menos una de entre la muestra de referencia inferior izquierda y la muestra de referencia inferior derecha puede establecerse como una muestra situada fuera del bloque vecino afín. Esto se describirá con detalle con referencia a las figuras 14 a 16.
Las figuras 14 a 16 son vistas que muestran posiciones de muestras de referencia.
Como se muestra en el ejemplo de la figura 14(a), la muestra superior izquierda del subbloque inferior izquierdo puede establecerse como la muestra de referencia (xn4, yn4) para el punto de control inferior izquierdo. En consecuencia, el subbloque inferior izquierdo que incluye la muestra de referencia (xn4 e yn4) puede establecerse como el subbloque afín para el punto de control inferior izquierdo.
Una muestra situada en el lado derecho de la muestra superior derecha del subbloque inferior derecho puede establecerse como la muestra de referencia (xn5, yn5) para el punto de control inferior derecho. En consecuencia, un subbloque adyacente al lado derecho del subbloque inferior derecho que incluye la muestra de referencia (xn5 e yn5) puede establecerse como un subbloque afín para el punto de control inferior derecho.
Como alternativa, como se muestra en el ejemplo de la figura 14(b), una muestra situada en el lado izquierdo de la muestra superior izquierda del subbloque inferior izquierdo puede establecerse como la muestra de referencia (xn4, yn4) para el punto de control inferior izquierdo. En consecuencia, un subbloque adyacente al lado izquierdo del subbloque inferior izquierdo que incluye la muestra de referencia (xn4 e yn4) puede establecerse como el subbloque afín para el punto de control inferior izquierdo.
La muestra superior derecha del subbloque inferior derecho puede establecerse como la muestra de referencia (xn5, yn5) para el punto de control inferior derecho. En consecuencia, el subbloque inferior derecho que incluye la muestra de referencia (xn5 e yn5) puede establecerse como el subbloque afín para el punto de control inferior derecho.
Como alternativa, como se muestra en el ejemplo de la figura 15(a), la muestra inferior izquierda del subbloque inferior izquierdo puede establecerse como la muestra de referencia (xn4, yn4) para el punto de control inferior izquierdo. En consecuencia, el subbloque inferior izquierdo que incluye la muestra de referencia (xn4 e yn4) puede establecerse como el subbloque afín para el punto de control inferior izquierdo.
Una muestra situada en el lado derecho de la muestra inferior derecha del subbloque inferior derecho puede establecerse como la muestra de referencia (xn5, yn5) para el punto de control inferior derecho. En consecuencia, un subbloque adyacente al lado derecho del subbloque inferior derecho que incluye la muestra de referencia (xn5 e yn5) puede establecerse como el subbloque afín para el punto de control inferior derecho.
Como alternativa, como se muestra en el ejemplo de la figura 15(b), una muestra situada en el lado izquierdo de la muestra inferior izquierda del subbloque inferior izquierdo puede establecerse como la muestra de referencia (xn4, yn4) para el punto de control inferior izquierdo. En consecuencia, un subbloque adyacente al lado izquierdo del subbloque inferior izquierdo que incluye la muestra de referencia (xn4 e yn4) puede establecerse como el subbloque afín para el punto de control inferior izquierdo.
La muestra inferior derecha del subbloque inferior derecho puede establecerse como la muestra de referencia (xn5 , yn5) para el punto de control inferior derecho. En consecuencia, el subbloque inferior derecho que incluye la muestra de referencia (xn5 e yn5) puede establecerse como el subbloque afín para el punto de control inferior derecho.
Como alternativa, como se muestra en el ejemplo de la figura 16(a), una muestra situada entre la muestra superior izquierda y la muestra inferior izquierda del subbloque inferior izquierdo (por ejemplo, una muestra media izquierda) puede establecerse como la muestra de referencia (xn4, yn4) para el punto de control inferior izquierdo. En consecuencia, el subbloque inferior izquierdo que incluye la muestra de referencia (xn4 e yn4) puede establecerse como el subbloque afín para el punto de control inferior izquierdo.
Una muestra situada en el lado derecho de una muestra situada entre la muestra superior derecha y la muestra inferior derecha del subbloque inferior derecho (por ejemplo, una muestra media derecha) puede establecerse como la muestra de referencia (xn5, yn5) para el punto de control inferior derecho. En consecuencia, un subbloque adyacente al lado derecho del subbloque inferior derecho que incluye la muestra de referencia (xn5 e yn5) puede establecerse como el subbloque afín para el punto de control inferior derecho.
Como alternativa, como se muestra en el ejemplo de la figura 16(b), una muestra situada en el lado izquierdo de una muestra situada entre la muestra superior izquierda y la muestra inferior izquierda del subbloque inferior izquierdo puede establecerse como la muestra de referencia (xn4, yn4) para el punto de control inferior izquierdo. En consecuencia, un subbloque adyacente al lado izquierdo del subbloque inferior izquierdo que incluye la muestra de referencia (xn4 e yn4) puede establecerse como el subbloque afín para el punto de control inferior izquierdo.
Una muestra situada entre la muestra superior derecha y la muestra inferior derecha del subbloque inferior derecho puede establecerse como la muestra de referencia (xn5, yn5) para el punto de control inferior derecho. En consecuencia, el subbloque inferior derecho que incluye la muestra de referencia (xn5 e yn5) puede establecerse como el subbloque afín para el punto de control inferior derecho.
Cuando se derivan los vectores de semilla afines del bloque actual basándose en las Ecuaciones 7 y 8, el tercer vector de semilla afín de un bloque vecino afín puede sustituirse con el vector de movimiento del subbloque afín para el punto de control inferior izquierdo, y el cuarto vector de semilla afín puede sustituirse con el vector de movimiento del subbloque afín para el punto de control inferior derecho. Además, la posición del punto de control inferior izquierdo puede sustituirse con la posición de la muestra de referencia inferior izquierda, y la posición del punto de control inferior derecho puede sustituirse con la posición de la muestra de referencia inferior derecha.
A diferencia de las realizaciones descritas con referencia a las figuras 14 a 16, un subbloque que incluye una muestra adyacente a una muestra de referencia puede establecerse como un subbloque afín. Específicamente, una muestra situada fuera de un subbloque vecino afín puede establecerse como una muestra de referencia, y un subbloque incluido en un bloque vecino afín puede establecerse como un subbloque afín. Por ejemplo, en el ejemplo mostrado en la figura 14 (a), la muestra situada en el lado derecho de la muestra superior derecha del subbloque inferior derecho puede establecerse como la muestra de referencia (xn5, yn5), y el subbloque inferior derecho puede establecerse como el subbloque afín para la esquina inferior derecha. Como alternativa, en el ejemplo mostrado en la figura 14 (b), la muestra situada a la izquierda de la muestra superior izquierda del subbloque inferior izquierdo puede establecerse como la muestra de referencia (xn4 , yn4), y el subbloque inferior izquierdo puede establecerse como el subbloque afín para la esquina inferior izquierda.
Las realizaciones descritas anteriormente pueden aplicarse por igual a las figuras 15 y 16. Es decir, en el ejemplo mostrado en la figura 15 (a) o en la figura 16 (a), la muestra situada en el lado derecho de la muestra inferior derecha o la muestra media derecha del subbloque inferior derecho puede establecerse como la muestra de referencia (xn5 , yn5), y el subbloque inferior derecho puede establecerse como el subbloque afín para la esquina inferior derecha. Como alternativa, en el ejemplo mostrado en la figura 15 (b) o en la figura 16 (b), la muestra situada en el lado izquierdo de la muestra inferior izquierda o la muestra media izquierda del subbloque inferior izquierdo puede establecerse como la muestra de referencia (xn4, yn4), y el subbloque inferior izquierdo puede establecerse como el subbloque afín para la esquina inferior izquierda.
Como se muestra en los ejemplos descritos anteriormente, un vector de semilla afín de un bloque vecino afín puede derivarse usando el vector de movimiento de un subbloque afín. Para este fin, en el caso de un bloque que se ha codificado/descodificado, el vector de movimiento puede ser almacenado por la unidad de subbloque.
Como otro ejemplo, después de almacenar un número mínimo de vectores de semilla afines para un bloque vecino afín, un vector de movimiento de un subbloque afín puede derivarse usando los vectores de semilla afines almacenados.
Las ecuaciones 9 y 10 muestran un ejemplo de derivación de un vector de movimiento de un subbloque afín usando vectores de semilla afines de un bloque vecino afín.
En las Ecuaciones 9 y 10, (nv4x, nv4y) denota un vector de movimiento de un subbloque afín para el punto de control inferior izquierdo y (nv5x, nv5y) denota un vector de movimiento de un subbloque afín para el punto de control inferior derecho. Debido a que el vector de movimiento de un subbloque afín y el vector de semilla afín de un punto de control se establecen por igual, (nv4x, nv4y) puede sustituirse con el vector de semilla afín (nv2x, nv2y) para el punto de control inferior izquierdo, o (nv5x, nv5y) puede sustituirse con el vector de semilla afín (nv3x, nv3y) para el punto de control inferior derecho.
(xn4, yn4) denota la posición de una muestra de referencia para el subbloque inferior izquierdo. Como alternativa, en lugar de esto puede usarse la posición central del subbloque inferior izquierdo o la posición del punto de control inferior izquierdo. (xn5, yn5) denota la posición de una muestra de referencia para el subbloque inferior derecho. Como alternativa, en lugar de esto puede usarse la posición central del subbloque inferior derecho o la posición del punto de control inferior derecho.
Las ecuaciones 9 y 10 pueden aplicarse cuando el bloque actual no está en contacto con la frontera de una unidad de árbol de codificación. Cuando el bloque actual está en contacto con la frontera superior de una unidad de árbol de codificación, en lugar de usar las Ecuaciones 9 y 10, un vector de movimiento de traslación de un subbloque afín determinado basándose en la muestra de referencia inferior izquierda puede establecerse como el tercer vector de semilla afín, y un vector de movimiento de traslación de un subbloque afín determinado basándose en la muestra de referencia inferior derecha puede establecerse como el cuarto vector de semilla afín.
En las Ecuaciones 7 y 8, (xn3 - xn2) denota la anchura entre el punto de control inferior izquierdo y el punto de control inferior derecho. Como se ha descrito anteriormente, xn3 puede sustituirse con la posición xn5 de la muestra de referencia inferior derecha, y xn2 puede sustituirse con la posición xn4 de la muestra de referencia inferior izquierda. En lo sucesivo en el presente documento, (xn3 - xn2) o un valor obtenido sustituyendo las posiciones de la ecuación anterior con las posiciones de muestras de referencia (por ejemplo, (xn5 - xn4)) se define como la variable Wsemilla, y la variable se denomina anchura de vector de subsemilla.
De acuerdo con las posiciones de muestras de referencia, puede tener lugar un caso en el que la anchura de vector de subsemilla no es una serie de potencias de 2 (por ejemplo, 2n). Por ejemplo, cuando la muestra inferior izquierda del subbloque inferior izquierdo se establece como la muestra de referencia inferior izquierda, y la muestra inferior derecha del subbloque inferior derecho se establece como la muestra de referencia inferior derecha, la anchura de vector de subsemilla no es un múltiplo de 2. Como se ha descrito anteriormente, cuando la anchura de vector de subsemilla no es una serie de potencias de 2, la anchura de vector de subsemilla puede transformarse para que sea una serie de potencias de 2. La transformada puede incluir sumar un desplazamiento a, o restarlo de, la anchura de vector de subsemilla, o usar una posición de una muestra adyacente a la muestra de referencia en lugar de la posición de la muestra de referencia. Por ejemplo, una anchura de vector de subsemilla transformado puede derivarse sumando 1 a la anchura entre la muestra de referencia inferior izquierda y la muestra de referencia inferior derecha. Como alternativa, una anchura entre una muestra de referencia vecina adyacente al lado derecho de la muestra de referencia inferior derecha y una muestra de referencia inferior izquierda puede establecerse como la anchura de vector de subsemilla transformado. Posteriormente, un vector de semilla afín del bloque actual puede derivarse aplicando la anchura de vector de subsemilla transformado a las Ecuaciones 7 y 8.
La operación de división incluida en las Ecuaciones 7 y 8 puede cambiarse a una operación de desplazamiento. La operación de desplazamiento puede realizarse basándose en un valor derivado mediante la anchura de vector de subsemilla transformado (es decir, un valor expresado como una serie de potencias de 2).
Cuando la muestra de referencia usada para determinar el subbloque afín no pertenece al bloque vecino afín, el vector de semilla afín del bloque vecino afín puede derivarse basándose en una muestra adyacente a la muestra de referencia de entre las muestras incluidas en el bloque vecino afín. Específicamente, un vector de movimiento de traslación de
un subbloque que incluye una muestra adyacente a la muestra de referencia en el bloque vecino afín (denominada, en lo sucesivo en el presente documento, muestra de referencia vecina) puede establecerse como el vector de semilla afín del bloque vecino afín. De esta forma, un método para derivar un vector de semilla afín usando una muestra de referencia vecina puede definirse como un método de derivación de vector de fusión afín modificado.
La figura 17 es una vista que muestra un ejemplo de aplicación de un método de derivación de vector de fusión afín modificado.
Cuando la muestra de referencia inferior derecha (xn5, yn5) del bloque vecino afín E no pertenece al bloque vecino afín, puede derivarse un vector de semilla afín basándose en una muestra (xn5 - 1, yn5) adyacente al lado izquierdo de la muestra de referencia inferior derecha de entre las muestras incluidas en el bloque vecino afín. Específicamente, un vector de movimiento de traslación de un subbloque que incluye la muestra de referencia vecina (xn5 - 1, yn5) puede establecerse como el vector de semilla afín del punto de control inferior derecho.
En el ejemplo mostrado en la figura 17, se muestra que una muestra adyacente al lado derecho de la muestra superior derecha del subbloque inferior derecho es la muestra de referencia inferior derecha. Incluso cuando una muestra adyacente al lado derecho de la muestra inferior derecha del subbloque inferior derecho o una muestra adyacente al lado derecho de la muestra media derecha del subbloque inferior derecho se establece como muestra de referencia inferior derecha, puede derivarse un vector de semilla afín basándose en una muestra adyacente al lado izquierdo de la muestra de referencia vecina.
Además, incluso cuando la muestra de referencia inferior izquierda no pertenece al bloque vecino afín, de acuerdo con la realización descrita anteriormente, el vector de semilla afín puede derivarse basándose en una muestra adyacente al lado derecho de la muestra de referencia inferior izquierda.
Debido a que la posición de la muestra de referencia y el subbloque para derivar un vector de semilla afín se establecen de forma diferente, la anchura de vector de subsemilla puede establecerse a una serie de potencias de 2.
Un candidato de fusión, un candidato de predicción de vector de semilla afín o un vector de semilla afín del bloque actual puede derivarse usando un bloque vecino que no se ha codificado en un modo inter afín en las proximidades del bloque actual. Específicamente, los bloques no codificados en el modo inter afín pueden combinarse, y una combinación de los mismos puede establecerse como un candidato de fusión o un candidato de predicción de vector de semilla afín. Por ejemplo, una combinación de al menos uno de entre un vector de movimiento de uno cualquiera de entre bloques vecinos adyacentes a la esquina superior izquierda del bloque actual, un vector de movimiento de uno cualquiera de entre bloques vecinos adyacentes a la esquina superior derecha del bloque actual y un vector de movimiento de uno cualquiera de entre bloques vecinos adyacentes a la esquina inferior izquierda del bloque actual puede establecerse como un candidato de fusión o un candidato de predicción de vector de semilla afín. En este punto, un vector de movimiento de un bloque vecino adyacente a la esquina superior izquierda, un vector de movimiento de un bloque vecino adyacente a la esquina superior derecha y un vector de movimiento de un bloque vecino adyacente a la esquina inferior izquierda pueden establecerse como un primer vector de semilla afín para el punto de control superior izquierdo, un segundo vector de semilla afín para el punto de control superior derecho y un tercer vector de semilla afín para el punto de control inferior izquierdo, respectivamente.
Como alternativa, un candidato de fusión, un candidato de predicción de vector de semilla afín o un vector de semilla afín del bloque actual puede derivarse usando un bloque vecino que no se codifica en el modo inter afín en el método de derivación de vector de fusión afín modificado descrito anteriormente. En lo sucesivo en el presente documento, un bloque vecino que no se codifica en el modo inter afín se denominará bloque vecino no afín.
La figura 18 es una vista que muestra un ejemplo de derivación de un vector de semilla afín de un bloque actual basándose en un bloque vecino no afín.
En el ejemplo mostrado en la figura 18, se asume que todos los bloques vecinos adyacentes al bloque actual son bloques vecinos no afines.
Cuando se desea derivar un vector de semilla afín del bloque actual a partir del bloque vecino no afín A de entre los bloques vecinos adyacentes al bloque actual, puede establecerse una muestra de referencia inferior izquierda y una muestra de referencia inferior derecha para el bloque A. Por ejemplo, una muestra adyacente al lado izquierdo de la muestra inferior izquierda del bloque A puede establecerse como la muestra de referencia inferior izquierda, y la muestra inferior derecha del bloque A puede establecerse como la muestra de referencia inferior derecha. Debido a que la muestra de referencia inferior izquierda está fuera del bloque A, el vector de movimiento de un subbloque que incluye una muestra adyacente al lado derecho de la muestra de referencia inferior izquierda puede establecerse como un tercer vector de semilla afín del bloque A. Además, el vector de movimiento de un subbloque que incluye la muestra de referencia inferior derecha puede establecerse como un cuarto vector de semilla afín del bloque A. Posteriormente, un primer vector de semilla afín y un segundo vector de semilla afín para el bloque actual pueden derivarse del bloque A basándose en las ecuaciones 9 y 10.
Un método para derivar un vector de semilla afín a partir de un bloque vecino no afín puede usarse solo cuando una predicción de compensación de movimiento para un bloque vecino no afín es realizada por la unidad de subbloque. En el presente caso, la técnica de predicción para realizar la predicción de compensación de movimiento por la unidad de subbloque puede incluir al menos uno de entre STMVP, ATMVP, Flujo Óptico Bidireccional (BIO), Compensación de Movimiento de Bloque Superpuesto (OBMC) y Perfeccionamiento de Vectores de Movimiento de lado de Descodificador (DMVR).
En la realización descrita anteriormente, se ha descrito que, cuando la frontera superior del bloque actual está en contacto con la frontera de una unidad de árbol de codificación, un candidato de fusión, un candidato de predicción de vector de semilla afín o un vector de semilla afín del bloque actual se deriva usando el tercer vector de semilla afín para el punto de control inferior izquierdo y el cuarto vector de semilla afín para el punto de control inferior derecho del bloque vecino afín situado en la parte superior del bloque actual.
Como otro ejemplo, cuando la frontera superior del bloque actual está en contacto con la frontera de una unidad de árbol de codificación, y un bloque vecino situado en la parte superior del bloque actual pertenece a una unidad de árbol de codificación diferente de la del bloque actual, un candidato de fusión, un candidato de predicción de vector de semilla afín o un vector de semilla afín del bloque actual puede derivarse usando el bloque vecino más cercano al bloque vecino de entre los bloques incluidos en la unidad de árbol de codificación a la que pertenece el bloque actual, en lugar del bloque vecino.
En el ejemplo mostrado en la figura 19, se muestra que el bloque actual está en contacto con la frontera superior de una unidad de árbol de codificación, y los bloques B, C y E situados en la parte superior del bloque actual pertenecen a una unidad de árbol de codificación diferente de la del bloque actual. En consecuencia, en lugar de usar el bloque E, puede derivarse un vector de semilla afín del bloque actual usando el bloque F adyacente al bloque E de entre los bloques incluidos en la unidad de árbol de codificación a la que pertenece el bloque actual.
En aras de la predicción de compensación de movimiento del bloque actual, pueden usarse vectores de semilla afines de una pluralidad de bloques. Por ejemplo, es posible seleccionar una pluralidad de candidatos de fusión de entre la lista de candidatos de fusión y derivar un vector de semilla afín o un vector de subbloque para el bloque actual basándose en los vectores de semilla afines de los candidatos de fusión seleccionados. La codificación/descodificación del bloque actual usando los vectores de semilla afines de una pluralidad de bloques puede denominarse método de codificación de fusión afín múltiple.
Puede codificarse información que indica si el método de codificación de fusión afín múltiple se aplica, o no, al bloque actual, y transmitirse la misma a través de un flujo de bits. Como alternativa, puede determinarse si aplicar, o no, el método de codificación de fusión afín múltiple al bloque actual basándose en al menos uno de entre el número de bloques vecinos afines de entre los bloques vecinos adyacentes al bloque actual, el número de candidatos de fusión incluidos en la lista de candidatos de fusión y el modelo de movimiento afín del bloque actual.
Las figuras 20 y 21 son vistas que muestran el flujo de un método de predicción de compensación de movimiento que usa una pluralidad de candidatos de fusión.
La figura 20 una vista que muestra un ejemplo de derivación de vectores de semilla afines del bloque actual usando vectores de semilla afines de una pluralidad de candidatos de fusión. La figura 21 es una vista que muestra un ejemplo de derivación de un vector de movimiento de cada subbloque usando vectores de semilla afines de una pluralidad de candidatos de fusión.
Los vectores de semilla afines del bloque actual pueden generarse basándose en una operación de suma, de diferencia, de promedio o de suma ponderada de vectores de semilla afines de dos candidatos de fusión.
Las ecuaciones 11 y 12 muestran un ejemplo de derivación de un vector de semilla afín del bloque actual a través de la suma de vectores de semilla afines de candidatos de fusión.
En las Ecuaciones 11 y 12, sv4 denota un primer vector de semilla afín del bloque actual, sv0 denota un primer vector de semilla afín de un primer candidato de fusión, y sv2 denota un primer vector de semilla afín de un segundo candidato de fusión. Además, svs denota un segundo vector de semilla afín del bloque actual, sv1 denota un segundo vector de
semilla afín del primer candidato de fusión, y svs denota un segundo vector de semilla afín del segundo candidato de fusión.
Además, las ecuaciones 13 y 14 muestran un ejemplo de derivación de un vector de semilla afín del bloque actual a través de una operación de suma ponderada de vectores de semilla afines de candidatos de fusión.
Como otro ejemplo, pueden generarse un primer vector de movimiento de subbloque y un segundo vector de movimiento de subbloque para cada subbloque en el bloque actual, basándose en los vectores de semilla afines del primer candidato de fusión y en los vectores de semilla afines del segundo candidato de fusión. Posteriormente, puede generarse un vector de movimiento de subbloque final basándose en una operación de suma, de diferencia, de promedio o de suma ponderada del primer vector de movimiento de subbloque y el segundo vector de movimiento de subbloque.
La ecuación 15 muestra un ejemplo de derivación de un vector de movimiento de subbloque final a través de la suma del primer vector de movimiento de subbloque y el segundo vector de movimiento de subbloque.
En la Ecuación 15, V0 denota un primer vector de movimiento de subbloque, V1 denota un segundo vector de movimiento de subbloque, y V2 denota un vector de movimiento de subbloque final.
Además, la ecuación 16 muestra un ejemplo de derivación de un vector de movimiento de subbloque final a través de una operación de suma ponderada del primer vector de movimiento de subbloque y el segundo vector de movimiento de subbloque.
La intra predicción es para predecir un bloque actual usando muestras reconstruidas que se han codificado/descodificado alrededor del bloque actual. En este punto, pueden usarse muestras reconstruidas antes de aplicar un filtro en bucle para intra predicción del bloque actual.
La técnica de intra predicción incluye intra predicción basada en matriz e intra predicción general considerando la direccionalidad con respecto a las muestras reconstruidas vecinas. Puede señalizarse información que indica la técnica de intra predicción del bloque actual a través de un flujo de bits. La información puede ser una bandera de 1 bit. Como alternativa, la técnica de intra predicción del bloque actual puede determinarse basándose en al menos uno de entre la ubicación, el tamaño y la forma del bloque actual, o basándose en una técnica de intra predicción de un bloque vecino. Por ejemplo, cuando el bloque actual existe a través de una frontera de imagen, puede establecerse no aplicar la intra predicción de intra predicción basada en matriz al bloque actual.
La intra predicción basada en matriz es un método para adquirir un bloque de predicción del bloque actual mediante un codificador y un descodificador basándose en un producto de matriz entre una matriz previamente almacenada y muestras reconstruidas alrededor del bloque actual. Puede señalizarse información para especificar una cualquiera de entre una pluralidad de matrices previamente almacenadas a través de un flujo de bits. El descodificador puede determinar una matriz para intra predicción del bloque actual basándose en la información y el tamaño del bloque actual.
La intra predicción general es un método para adquirir un bloque de predicción para el bloque actual basándose en un modo de intra predicción no angular o un modo de intra predicción angular. En lo sucesivo en el presente documento, un proceso para realizar una intra predicción basándose en una intra predicción general se describirá con más detalle con referencia a las figuras.
La figura 22 es un diagrama de flujo que ilustra un método de intra predicción de acuerdo con una realización de la presente invención.
Puede determinarse una línea de muestra de referencia del bloque actual (S2201). La línea de muestra de referencia significa un conjunto de muestras de referencia incluidas en una k-ésima línea separada del lado superior y/o izquierdo del bloque actual. Las muestras de referencia pueden derivarse de muestras reconstruidas que se han codificado/descodificado alrededor del bloque actual.
Puede señalizarse información de índice para identificar la línea de muestra de referencia del bloque actual de entre una pluralidad de líneas de muestra de referencia a través de un flujo de bits. La pluralidad de líneas de muestra de referencia puede incluir al menos una de entre una primera línea, una segunda línea, una tercera línea y una cuarta línea en el lado superior y/o izquierdo del bloque actual. La Tabla 1 muestra índices asignados a las líneas de muestra de referencia, respectivamente. En la Tabla 1, se asume que la primera línea, la segunda línea y la cuarta línea se usan como candidatos de línea de muestra de referencia.
[Tabla 1]
La línea de muestra de referencia del bloque actual puede determinarse basándose en al menos uno de entre la ubicación, el tamaño y la forma del bloque actual, o basándose en un modo de codificación de predicción de un bloque vecino. Por ejemplo, cuando el bloque actual está en contacto con la frontera de una imagen, una tesela, un sector o una unidad de árbol de codificación, la primera línea de muestra de referencia puede determinarse como la línea de muestra de referencia del bloque actual.
La línea de muestra de referencia puede incluir muestras de referencia superiores ubicadas en la parte superior del bloque actual y muestras de referencia izquierdas ubicadas en el lado izquierdo del bloque actual. Las muestras de referencia superiores y las muestras de referencia izquierdas pueden derivarse de muestras reconstruidas alrededor del bloque actual. Las muestras reconstruidas pueden estar en un estado antes de que se aplique el filtro en bucle.
La figura 23 es una vista que muestra muestras de referencia incluidas en cada línea de muestra de referencia.
De acuerdo con el modo de intra predicción del bloque actual, puede adquirirse una muestra de predicción usando al menos una de entre muestras de referencia pertenecientes a una línea de muestra de referencia.
A continuación, puede determinarse el modo de intra predicción del bloque actual (S2202). En cuanto al modo de intra predicción del bloque actual, puede determinarse al menos uno de entre un modo de intra predicción no angular y un modo de intra predicción angular como el modo de intra predicción del bloque actual. El modo de intra predicción no angular incluye un modo plano y un modo de CC, y el modo de intra predicción angular incluye 33 o 65 modos entre la dirección diagonal inferior izquierda y la dirección diagonal superior derecha.
La figura 24 es una vista que muestra modos de intra predicción.
La figura 24 (a) muestra 35 modos de intra predicción y la figura 24 (b) muestra 67 modos de intra predicción.
Puede definirse un número mayor o menor de modos de intra predicción que los mostrados en la figura 24.
Puede establecerse un modo más probable (MPM) basándose en el modo de intra predicción de un bloque vecino adyacente al bloque actual. En el presente caso, el bloque vecino puede incluir un bloque vecino izquierdo adyacente al lado izquierdo del bloque actual y un bloque vecino superior adyacente a la parte superior del bloque actual. Cuando las coordenadas de la muestra superior izquierda del bloque actual son (0, 0), el bloque vecino izquierdo puede incluir una muestra en la posición de (-1, 0), (-1, H - 1) o (-1, (H - 1) / 2). En el presente caso, H denota la altura del bloque actual. El bloque vecino superior puede incluir una muestra en la posición de (0, -1), (W - 1, -1) o ((W - 1) / 2, -1). En el presente caso, W denota la anchura del bloque actual.
Cuando el bloque vecino se codifica mediante una intra predicción normal, el MPM puede derivarse basándose en el modo de intra predicción del bloque vecino. Específicamente, el modo de intra predicción del bloque vecino izquierdo puede establecerse a la variable candIntraPredModeA, y el modo de intra predicción del bloque vecino superior puede establecerse a la variable candIntraPredModeB.
En este punto, cuando el bloque vecino no está disponible (por ejemplo, cuando el bloque vecino no se ha codificado/descodificado aún o cuando la posición del bloque vecino está fuera de la frontera de imagen), cuando el bloque vecino se codifica mediante una intra predicción basada en matriz, cuando el bloque vecino se codifica mediante una inter predicción o cuando el bloque vecino se incluye en una unidad de árbol de codificación diferente del bloque actual, la variable candIntraPredModeX (en el presente caso, X es A o B) derivada basándose en el modo de intra predicción del bloque vecino puede establecerse como un modo por defecto. En el presente caso, el modo por defecto puede incluir al menos uno de entre un modo plano, un modo de CC, un modo de dirección vertical y un modo de dirección horizontal.
Como alternativa, cuando el bloque vecino se codifica mediante una intra predicción basada en matriz, puede establecerse a candIntraPredModeX un modo de intra predicción correspondiente a un valor de índice para especificar una cualquiera de entre las matrices. Para este fin, puede almacenarse previamente en el codificador y el descodificador una tabla de consulta que muestra la relación de correlación entre valores de índice para especificar una matriz y modos de intra predicción.
Los MPM pueden derivarse basándose en la variable candIntraPredModeA y en la variable candIntraPredModeB. El número de MPM incluidos en una lista de MPM puede establecerse previamente en el codificador y en el descodificador. El número de MPM incluidos en la lista de MPM puede establecerse previamente en el codificador y en el descodificador. Por ejemplo, el número de MPM puede ser 3, 4, 5 o 6. Como alternativa, puede señalizarse información que indica el número de MPM a través de un flujo de bits. Como alternativa, puede determinarse el número de MPM basándose en al menos uno de entre el modo de codificación de predicción del bloque vecino y el tamaño y la forma del bloque actual.
En las realizaciones descritas a continuación, se asume que el número de MPM es tres, y los tres MPM se denominarán MPM[0], MPM[1] y MPM[2]. Cuando el número de MPM es mayor que tres, los Mp M pueden configurarse para incluir tres MPM descritos en las realizaciones descritas a continuación.
Cuando candIntraPredA y candIntraPredB son iguales, y candIntraPredA es un modo plano o un modo de CC, MPM[0] y MPM[1] pueden establecerse a un modo plano y a un modo de CC, respectivamente. MPM[2] puede establecerse a un modo de intra predicción de dirección vertical, un modo de intra predicción de dirección horizontal o un modo de intra predicción de dirección diagonal. El modo de intra predicción de dirección diagonal puede ser un modo de intra predicción de dirección diagonal inferior izquierda, un modo de intra predicción de dirección superior izquierda o un modo de intra predicción de dirección superior derecha.
Cuando candIntraPredA y candIntraPredB son iguales, y candIntraPredA es un modo de intra predicción angular, MPM[0] puede establecerse para que sea igual que candIntraPredA. MPM[1] y MPM[2] pueden establecerse a un modo de intra predicción similar a candIntraPredA, respectivamente. El modo de intra predicción similar a candIntraPredA puede ser un modo de intra predicción en el que la diferencia entre candIntraPredA y un índice es de ± 1 o ± 2. Puede usarse una operación de módulo (%) y un desplazamiento para derivar el modo de intra predicción similar a candIntraPredA.
Cuando candIntraPredA y candIntraPredB son diferentes, MPM[0] puede establecerse para que sea igual que candIntraPredA y MPM[1] puede establecerse para que sea igual que candIntraPredB. En este punto, cuando tanto candIntraPredA como candIntraPredB son el modo de intra predicción no angular, MPM[2] puede establecerse a un modo de intra predicción de dirección vertical, un modo de intra predicción de dirección horizontal o un modo de intra predicción de dirección diagonal. Como alternativa, cuando al menos uno de entre candIntraPredA y candIntraPredB es un modo de intra predicción angular, MPM[2] puede establecerse a un modo de intra predicción derivado sumando un desplazamiento a, o restándolo de, un modo plano, un modo de CC o uno de entre candIntraPredA y candIntraPredB que tiene un valor mayor. En el presente caso, el desplazamiento puede ser 1 o 2.
Se genera una lista de MPM que incluye una pluralidad de MPM y puede señalizarse información que indica si un MPM que es igual que el modo de intra predicción del bloque actual se incluye en la lista de MPM a través de un flujo de bits. La información es una bandera de 1 bit y puede denominarse bandera de MPM. Cuando la bandera de MPM indica que un MPM igual que el del bloque actual se incluye en la lista de MPM, puede señalizarse información de índice que identifica uno de entre los MPM a través de un flujo de bits. El MPM especificado por la información de índice puede establecerse como el modo de intra predicción del bloque actual. Cuando la bandera de MPM indica que un MPM igual que el del bloque actual no se incluye en la lista de MPM, puede señalizarse información de modo residual que indica uno cualquiera de entre los modos de intra predicción residuales que no sean MPM a través de un flujo de bits. La información de modo residual indica un valor de índice correspondiente al modo de intra predicción del bloque actual cuando los índices se reasignan a los modos de intra predicción residuales excluyendo los MPM. El descodificador puede disponer los MPM en orden ascendente y determinar el modo de intra predicción del bloque actual comparando la información de modo residual con los MPM. Por ejemplo, cuando la información de modo residual es igual a o menor que el MPM, el modo de intra predicción del bloque actual puede derivarse sumando 1 a la información de modo residual.
En lugar de establecer el modo por defecto a MPM, puede señalizarse información que indica si el modo de intra predicción del bloque actual es el modo por defecto a través de un flujo de bits. La información es una bandera de 1 bit y la bandera puede denominarse bandera de modo por defecto. La bandera de modo por defecto puede señalizarse solo cuando la bandera de MPM indica que un MPM igual que el del bloque actual se incluye en la lista de MPM. Como se ha descrito anteriormente, el modo por defecto puede incluir al menos uno de entre un modo plano, un modo de CC, un modo de dirección vertical y un modo de dirección horizontal. Por ejemplo, cuando el modo plano se establece como el modo por defecto, la bandera de modo por defecto puede indicar si el modo de intra predicción del bloque actual es un modo plano. Cuando la bandera de modo por defecto indica que el modo de intra predicción del bloque actual no es el modo por defecto, puede establecerse uno de entre los MPM indicados por la información de índice como el modo de intra predicción del bloque actual.
Cuando se establece una pluralidad de modos de intra predicción como modos por defecto, puede señalizarse adicionalmente información de índice que indica uno cualquiera de entre los modos por defecto. El modo de intra predicción del bloque actual puede establecerse como el modo por defecto indicado por la información de índice.
Cuando el índice de la línea de muestra de referencia del bloque actual no es 0, puede establecerse no usar el modo por defecto. En consecuencia, cuando el índice de la línea de muestra de referencia no es 0, no se señaliza la bandera de modo por defecto y el valor de la bandera de modo por defecto puede establecerse a un valor predefinido (es decir, falso).
Cuando se determina el modo de intra predicción del bloque actual, pueden adquirirse muestras de predicción para el bloque actual basándose en el modo de intra predicción determinado (S2203).
Cuando se selecciona el modo de CC, se generan muestras de predicción para el bloque actual basándose en un valor promedio de muestras de referencia. Específicamente, pueden generarse valores de todas las muestras en un bloque de predicción basándose en un valor promedio de las muestras de referencia. El valor promedio puede derivarse usando al menos una de entre muestras de referencia superiores ubicadas en la parte superior del bloque actual y muestras de referencia izquierdas ubicadas en el lado izquierdo del bloque actual.
Dependiendo de la forma del bloque actual, el número o intervalo de las muestras de referencia usadas para derivar el valor promedio puede variar. Por ejemplo, cuando el bloque actual es un bloque de forma no cuadrada cuya anchura es mayor que la altura, el valor promedio puede calcularse usando solo las muestras de referencia superiores. Por otro lado, cuando el bloque actual es un bloque de forma no cuadrada del cual la anchura es menor que la altura, el valor promedio puede calcularse usando solo las muestras de referencia izquierdas. Es decir, cuando la anchura y la altura del bloque actual son diferentes, el valor promedio puede calcularse usando solo muestras de referencia adyacentes al más largo. Como alternativa, basándose en la relación de anchura a altura del bloque actual, puede determinarse si calcular, o no, el valor promedio usando solo las muestras de referencia superiores o si calcular, o no, el valor promedio usando solo las muestras de referencia izquierdas.
Cuando se selecciona el modo plano, puede adquirirse una muestra de predicción usando una muestra de predicción de dirección horizontal y una muestra de predicción de dirección vertical. En el presente caso, la muestra de predicción de dirección horizontal se adquiere basándose en una muestra de referencia izquierda y una muestra de referencia derecha situada en una línea horizontal igual que la de la muestra de predicción, y la muestra de predicción de dirección vertical se adquiere basándose en una muestra de referencia superior y una muestra de referencia inferior situada en una línea vertical igual que la de la muestra de predicción. En el presente caso, la muestra de referencia derecha puede generarse mediante la copia de una muestra de referencia adyacente a la esquina superior derecha del bloque actual, y la muestra de referencia inferior puede generarse mediante la copia de una muestra de referencia adyacente a la esquina inferior izquierda del bloque actual. La muestra de predicción de dirección horizontal puede adquirirse basándose en una operación de suma ponderada de la muestra de referencia izquierda y la muestra de referencia derecha, y la muestra de predicción de dirección vertical puede adquirirse basándose en una operación de suma ponderada de la muestra de referencia superior y la muestra de referencia inferior. En este punto, puede determinarse un valor de ponderación asignado a cada muestra de referencia de acuerdo con la posición de la muestra de predicción. La muestra de predicción puede adquirirse basándose en una operación promedio o una operación de suma ponderada de la muestra de predicción de dirección horizontal y la muestra de predicción de dirección vertical. Cuando se realiza la operación de suma ponderada, pueden determinarse valores de ponderación aplicados a la muestra de predicción de dirección horizontal y la muestra de predicción de dirección vertical basándose en la posición de la muestra de predicción.
Cuando se selecciona un modo de predicción angular, puede determinarse un parámetro que indica la dirección de predicción (o ángulo de predicción) del modo de predicción angular seleccionado. La Tabla 2 muestra el parámetro de intra dirección intraPredAng de cada modo de intra predicción.
[Tabla 2]
Cuando se definen 35 modos de intra predicción, la Tabla 2 muestra el parámetro de intra dirección de cada modo de intra predicción que tiene un índice de uno cualquiera de entre 2 y 34. Cuando se definen más de 33 modos de intra predicción angular, la Tabla 2 se subdivide adicionalmente para establecer el parámetro de intra dirección de cada modo de intra predicción angular.
Después de disponer muestras de referencia superiores y muestras de referencia izquierdas del bloque actual en una línea, puede adquirirse una muestra de predicción basándose en el valor del parámetro de intra dirección. En este punto, cuando el valor del parámetro de intra dirección es un valor negativo, las muestras de referencia izquierdas y las muestras de referencia superiores pueden disponerse en una línea.
Las figuras 25 y 26 son vistas que muestran un ejemplo de una disposición ordenada unidimensional que dispone muestras de referencia en una línea.
La figura 25 es una vista que muestra un ejemplo de una disposición unidimensional de dirección vertical que dispone muestras de referencia en la dirección vertical y la figura 26 es una vista que muestra un ejemplo de una disposición ordenada unidimensional de dirección horizontal que dispone muestras de referencia en la dirección horizontal. Las realizaciones de las figuras 25 y 26 se describirán suponiendo que se definen 35 modos de intra predicción.
Cuando el índice de modo de intra predicción es uno cualquiera de entre 11 y 18, puede aplicarse una disposición ordenada unidimensional de dirección horizontal en el que las muestras de referencia superiores se giran en sentido antihorario, y cuando el índice de modo de intra predicción es uno cualquiera de entre 19 y 25, puede aplicarse una disposición ordenada unidimensional de dirección vertical en el que las muestras de referencia izquierdas se giran en sentido horario. Al disponer las muestras de referencia en una línea, puede considerarse un ángulo de modo de intra predicción.
Puede determinarse un parámetro de determinación de muestra de referencia basándose en un parámetro de intra dirección. El parámetro de determinación de muestra de referencia puede incluir un índice de muestra de referencia para especificar una muestra de referencia y un parámetro de valor de ponderación para determinar un valor de ponderación aplicado a la muestra de referencia.
El índice de muestra de referencia ildx y el parámetro de valor de ponderación ifact pueden adquirirse a través de las Ecuaciones 17 y 18 que se muestran a continuación, respectivamente.
En las Ecuaciones 17 y 18, Pang denota un parámetro de intra dirección. La muestra de referencia especificada por el índice de muestra de referencia ildx corresponde a un pel entero.
Pueden especificarse al menos una o más muestras de referencia para derivar una muestra de predicción. Específicamente, puede especificarse la posición de una muestra de referencia usada para derivar una muestra de predicción considerando la pendiente del modo de predicción. Por ejemplo, puede especificarse una muestra de referencia usada para derivar una muestra de predicción usando el índice de muestra de referencia ildx.
En este punto, cuando la pendiente del modo de intra predicción no se expresa mediante una muestra de referencia, puede generarse una muestra de predicción mediante la interpolación de una pluralidad de muestras de referencia. Por ejemplo, cuando la pendiente del modo intra predicción es un valor entre una pendiente entre una muestra de predicción y una primera muestra de referencia y una pendiente entre una muestra de predicción y una segunda muestra de referencia, la muestra de predicción puede adquirirse interpolando la primera muestra de referencia y la segunda muestra de referencia. Es decir, cuando una línea angular después de un ángulo de intra predicción no pasa a través de una muestra de referencia situada en un pel entero, la muestra de predicción puede adquirirse mediante la interpolación de muestras de referencia adyacentes a los lados izquierdo y derecho o hacia arriba y hacia abajo de una posición a través de la cual pasa la línea angular.
La ecuación 19 muestra un ejemplo de adquisición de una muestra de predicción basándose en muestras de referencia.
En la Ecuación 19, P denota una muestra de predicción y Ref_1D denota una cualquiera de entre muestras de referencia dispuestas unidimensionalmente. En este punto, puede determinarse la posición de una muestra de referencia mediante la posición ((x, y) de la muestra de predicción y el índice ildx de la muestra de referencia.
Cuando la pendiente del modo intra predicción puede expresarse como una muestra de referencia, el parámetro de valor de ponderación ifact se establece a 0. En consecuencia, la Ecuación 19 puede simplificarse como se muestra en la Ecuación 20.
La intra predicción para el bloque actual puede realizarse basándose en una pluralidad de modos de intra predicción. Por ejemplo, puede derivarse un modo de intra predicción para cada muestra de predicción y puede derivarse la muestra de predicción basándose en un modo de intra predicción asignado a cada muestra de predicción.
Como alternativa, puede derivarse un modo de intra predicción para cada región y puede realizarse intra predicción para cada región basándose en el modo de intra predicción asignado a cada región. En el presente caso, la región puede incluir al menos una muestra. Puede determinarse adaptativamente al menos uno de entre el tamaño y la forma de la región basándose en al menos uno de entre el tamaño, la forma y el modo de intra predicción del bloque actual. Como alternativa, al menos uno de entre el tamaño y la forma de la región puede definirse previamente en el codificador y en el descodificador para ser independiente del tamaño o la forma del bloque actual.
Como alternativa, la intra predicción puede realizarse basándose en cada una de una pluralidad de intra predicciones y una muestra de predicción final puede derivarse basándose en una operación promedio o una operación de suma ponderada de una pluralidad de muestras de predicción adquiridas a través de la pluralidad de intra predicciones. Por ejemplo, puede adquirirse una primera muestra de predicción realizando una intra predicción basándose en un primer modo de intra predicción, y puede adquirirse una segunda muestra de predicción realizando una intra predicción basándose en un segundo modo de intra predicción. Posteriormente, puede adquirirse una muestra de predicción final basándose en una operación promedio o una operación de suma ponderada de la primera muestra de predicción y la segunda muestra de predicción. En este punto, puede determinarse un valor de ponderación asignado a cada una de la primera muestra de predicción y la segunda muestra de predicción considerando al menos uno de entre si el primer modo de intra predicción es, o no, un modo de intra predicción no angular/angular, si el segundo modo de intra predicción es, o no, un modo de intra predicción no angular/angular y un modo de intra predicción de un bloque vecino.
La pluralidad de modos de intra predicción puede ser una combinación de un modo de intra predicción no angular y un modo de intra predicción angular, una combinación de modos de intra predicción angular o una combinación de modos de intra predicción no angular.
La figura 27 es una vista que muestra un ejemplo de ángulos formados entre modos de intra predicción angular y una línea recta paralela al eje x.
Como se muestra en el ejemplo de la figura 27, los modos de predicción angular pueden existir entre la dirección diagonal inferior izquierda y la dirección diagonal superior derecha. Describiendo en términos de un ángulo formado por el eje x y el modo de predicción angular, los modos de predicción angular pueden existir entre 45 grados (dirección diagonal inferior izquierda) y -135 grados (dirección diagonal superior derecha).
Cuando el bloque actual es una forma no cuadrada, de acuerdo con el modo de intra predicción del bloque actual, puede haber un caso de derivación de una muestra de predicción mediante el uso de una muestra de referencia más alejada de la muestra de predicción, en lugar de una muestra de referencia más cercana a la muestra de predicción, de entre las muestras de referencia situadas en la línea angular después del ángulo de intra predicción.
La figura 28 es una vista que muestra una realización de adquisición de muestras de predicción cuando el bloque actual es una forma no cuadrada.
Por ejemplo, como se muestra en el ejemplo de la figura 28(a), se asume que el bloque actual es una forma no cuadrada de la cual la anchura es mayor que la altura, y el modo de intra predicción del bloque actual es un modo de intra predicción angular que tiene un ángulo entre 0 y 45 grados. En el caso anterior, cuando se deriva la muestra de predicción A cerca de la columna derecha del bloque actual, puede haber un caso de uso de muestra de referencia izquierda L lejos de la muestra de predicción, en lugar de muestra de referencia superior T cercana a la muestra de predicción, de entre las muestras de referencia situadas en un modo angular después del ángulo.
Como otro ejemplo, como se muestra en el ejemplo de la figura 28 (b), se asume que el bloque actual es una forma no cuadrada de la cual la altura es mayor que la anchura, y el modo de intra predicción del bloque actual es un modo de intra predicción angular que tiene un ángulo entre -90 y -135 grados. En el caso anterior, cuando se deriva la muestra de predicción A cerca de la fila inferior del bloque actual, puede haber un caso de uso de muestra de referencia superior T lejos de la muestra de predicción, en lugar de muestra de referencia izquierda L cercana a la muestra de predicción, de entre las muestras de referencia situadas en un modo angular después del ángulo.
Para solucionar el problema descrito anteriormente, cuando el bloque actual es una forma no cuadrada, el modo de intra predicción del bloque actual se puede sustituir con un modo de intra predicción del sentido opuesto. En consecuencia, los modos de predicción angular que tienen un ángulo mayor o menor que el de los modos de predicción angular mostrados en la figura 24 puede usarse para un bloque de forma no cuadrada. El modo de intra predicción angular como este puede definirse como un modo de intra predicción de ángulo amplio. El modo de intra predicción de ángulo amplio representa un modo de intra predicción angular que no pertenece al intervalo de 45 a -135 grados.
La figura 29 es una vista que muestra modos de intra predicción de ángulo amplio.
En el ejemplo mostrado en la figura 29, los modos de intra predicción con un índice de -1 a - 14 y los modos de intra predicción con un índice de 67 a 80 representan modos de intra predicción de ángulo amplio.
Aunque en la figura 29 se muestran 14 modos de intra predicción de ángulo amplio (-1 a -14) que tienen un ángulo mayor que 45 grados y 14 modos de intra predicción de ángulo ancho (67 a 80) que tienen un ángulo menor que -135 grados, puede definirse un número mayor o menor de modos de intra predicción de ángulo amplio.
Cuando se usa un modo de intra predicción de ángulo amplio, la longitud de las muestras de referencia superiores puede establecerse a 2W 1, y la longitud de las muestras de referencia izquierdas puede establecerse a 2H 1.
Debido a que se usa un modo de intra predicción de ángulo amplio, la muestra A mostrada en la figura 28(a) puede predecirse usando muestra de referencia T y muestra A mostrada en figura 28(b) puede predecirse usando la muestra de referencia L.
Añadiendo modos de intra predicción existentes y modos de intra predicción de ángulo amplio N, puede usarse un total de 67 N modos de intra predicción. Por ejemplo, la Tabla 3 muestra parámetros de intra dirección de modos de intra predicción cuando se definen 20 modos de intra predicción de ángulo amplio.
[Tabla 3]
Cuando el bloque actual es una forma no cuadrada y el modo de intra predicción del bloque actual adquirido en la etapa S2202 pertenece a un intervalo de transformada, el modo de intra predicción del bloque actual puede transformarse en un modo de intra predicción de ángulo amplio. Puede determinarse el intervalo de transformada basándose en al menos uno de entre el tamaño, la forma y la relación del bloque actual. En el presente caso, la relación puede representar una relación de anchura a altura del bloque actual.
Cuando el bloque actual es una forma no cuadrada de la cual la anchura es mayor que la altura, el intervalo de transformada puede establecerse a partir de un índice de modo de intra predicción (por ejemplo, 66) de la dirección diagonal superior derecha (un índice del modo de intra predicción en la dirección diagonal superior derecha - N). En el presente caso, puede determinarse N basándose en la relación del bloque actual. Cuando el modo de intra predicción del bloque actual pertenece al intervalo de transformada, el modo de intra predicción puede transformarse en un modo de intra predicción de ángulo amplio. La transformada puede ser una resta de un valor predefinido del modo de intra predicción y el valor predefinido puede ser el número total (por ejemplo, 67) de modos de intra predicción excluyendo los modos de intra predicción de ángulo amplio.
De acuerdo con la realización descrita anteriormente, los modos de intra predicción del 66° al 53° pueden transformarse en los modos de intra predicción de ángulo amplio del -1° al -14°, respectivamente.
Cuando el bloque actual es una forma no cuadrada de la cual la altura es mayor que la anchura, el intervalo de transformada puede establecerse a partir de un índice de modo de intra predicción (por ejemplo, 2) de la dirección diagonal inferior izquierda (un índice del modo de intra predicción en la dirección diagonal inferior izquierda M). En el presente caso, puede determinarse M basándose en la relación del bloque actual. Cuando el modo de intra predicción del bloque actual pertenece al intervalo de transformada, el modo de intra predicción puede transformarse en un modo de intra predicción de ángulo amplio. La transformada puede ser una suma de un valor predefinido al modo de intra predicción y el valor predefinido puede ser el número total (por ejemplo, 65) de modos de intra predicción angular excluyendo los modos de intra predicción de ángulo amplio.
De acuerdo con la realización descrita anteriormente, los modos de intra predicción del 2° al 15° pueden transformarse en los modos de intra predicción de ángulo amplio del 67° al 80°, respectivamente.
En lo sucesivo en el presente documento, los modos de intra predicción que pertenecen al intervalo de transformada se denominarán modos de intra predicción de sustitución de ángulo amplio.
Puede determinarse el intervalo de transformada basándose en la relación del bloque actual. Por ejemplo, las Tablas 4 y 5 muestran un intervalo de transformada cuando 35 modos de intra predicción y 67 modos de intra predicción se definen excluyendo los modos de intra predicción de ángulo amplio, respectivamente.
[Tabla 4]
Tabla 5]
Como se muestra en los ejemplos de las Tablas 4 y 5, el número de modos de intra predicción de sustitución de ángulo amplio que pertenecen al intervalo de transformada puede variar de acuerdo con la relación del bloque actual.
Debido a que los modos de intra predicción de ángulo amplio se usan además de los modos de intra predicción existentes, los recursos necesarios para codificar los modos de intra predicción de ángulo amplio aumentan y, por lo tanto, puede reducirse la eficiencia de codificación. En consecuencia, la eficiencia de codificación puede mejorarse codificando modos de intra predicción de sustitución para los modos de intra predicción de ángulo amplio, en lugar de codificar los modos de intra predicción de ángulo amplio tal cual están.
Por ejemplo, cuando el bloque actual se codifica usando el 67° modo de intra predicción de ángulo amplio, el 2° modo de intra predicción, que es el modo de intra predicción de sustitución del 67° modo de intra predicción de ángulo amplio, puede codificarse usando el modo de intra predicción del bloque actual. Además, cuando el bloque actual se codifica usando el -1er modo de intra predicción de ángulo amplio, el 66° modo de intra predicción, que es el modo de intra predicción de sustitución del -1er modo de intra predicción de ángulo amplio, puede codificarse usando el modo de intra predicción del bloque actual.
El descodificador puede descodificar el modo de intra predicción del bloque actual y determinar si el modo de intra predicción descodificado pertenece al intervalo de transformada. Cuando el modo de intra predicción descodificado es un modo de intra predicción de sustitución de ángulo amplio, el modo de intra predicción puede transformarse en el modo de intra predicción de ángulo amplio.
Como alternativa, cuando el bloque actual se codifica usando el modo de intra predicción de ángulo amplio, el modo de intra predicción de ángulo amplio puede codificarse tal cual está.
La codificación del modo de intra predicción puede realizarse basándose en la lista de MPM descrita anteriormente. En lo sucesivo en el presente documento, se describirá con detalle un método para configurar la lista de MPM. En las realizaciones que se describen a continuación, se asume que se definen 10 modos de intra predicción de ángulo amplio (-1 a -10) con un ángulo mayor que 45 grados y 10 modos de intra predicción de ángulo ancho (67 a 76) con un ángulo menor que -135 grados.
Cuando un bloque vecino se codifica usando un modo de intra predicción de ángulo amplio, el MPM puede establecerse basándose en un modo de intra predicción de sustitución de ángulo amplio correspondiente al modo de intra predicción de ángulo amplio. Por ejemplo, cuando un bloque vecino se codifica usando un modo de intra predicción de ángulo amplio, la variable candIntraPredX (X es A o B) puede establecerse al modo de intra predicción de sustitución de ángulo amplio.
Como alternativa, un método para derivar un MPM puede determinarse de acuerdo con la forma del bloque actual. Por ejemplo, cuando el bloque actual es una forma cuadrada cuya anchura es igual que la altura, candIntraPredX
puede establecerse al modo de intra predicción de sustitución de ángulo amplio. Por otro lado, cuando el bloque actual es una forma no cuadrada, candIntraPredX puede establecerse al modo de intra predicción de ángulo amplio.
Como alternativa, si establecer, o no, candIntraPredX al modo de intra predicción de ángulo amplio puede determinarse basándose en si el modo de intra predicción de ángulo amplio de un bloque vecino puede aplicarse al bloque actual. Por ejemplo, cuando el bloque actual es una forma no cuadrada cuya anchura es mayor que la altura, un modo de intra predicción de ángulo amplio cuyo índice es mayor que el del modo de intra predicción de la dirección diagonal superior derecha se establece como candIntraPredX tal cual está. Sin embargo, un modo de intra predicción de sustitución de ángulo amplio correspondiente al mismo se establece como candIntraPredX para un modo de intra predicción de ángulo amplio cuyo índice es menor que el del modo de intra predicción de la dirección diagonal inferior izquierda. Por otro lado, cuando el bloque actual es una forma no cuadrada cuya altura es mayor que la anchura, un modo de intra predicción de ángulo amplio cuyo índice es menor que el del modo de intra predicción de la dirección diagonal inferior izquierda se establece como candIntraPredX tal cual está. Sin embargo, un modo de intra predicción de sustitución de ángulo amplio correspondiente al mismo se establece como candIntraPredX para un modo de intra predicción de ángulo amplio cuyo índice es mayor que el del modo de intra predicción de la dirección diagonal superior derecha.
Es decir, si derivar, o no, el MPM usando el modo de intra predicción de ángulo amplio tal cual está, o si derivar, o no, el MPM usando el modo de intra predicción de sustitución de ángulo amplio, puede determinarse de acuerdo con si el bloque vecino codificado en el modo de intra predicción de ángulo amplio tiene una forma que es igual que o similar a la del bloque actual.
Como alternativa, el modo de intra predicción de ángulo amplio del bloque vecino puede establecerse como candIntraPredX independientemente de la forma del bloque actual.
En resumen, candIntraPredX puede establecerse a un modo de intra predicción de ángulo amplio o a un modo de intra predicción de sustitución de ángulo amplio de un bloque vecino.
El MPM puede derivarse basándose en candIntraPredA y en candIntraPredB. En este caso, el MPM puede derivarse en un modo de intra predicción similar a candIntraPredA o candIntraPredB. El modo de intra predicción similar a candIntraPredA o candIntraPredB puede derivarse basándose en una operación de módulo y en un desplazamiento. En este punto, la constante y el desplazamiento usados para la operación de módulo pueden determinarse de forma diferente de acuerdo con la forma del bloque actual.
La Tabla 6 muestra un ejemplo de derivación de un MPM de acuerdo con la forma del bloque actual.
[Tabla 6]
Se asume que candIntraPredA y candIntraPredB son iguales, y candIntraPredA es un modo de intra predicción angular. Cuando el bloque actual es una forma cuadrada, puede obtenerse un modo de intra predicción similar a candIntraPredA en función de una operación modular basándose en un valor obtenido restando 1 al número total de modos de intra predicción angulares que excluyen modos de intra predicción de ángulo amplio. Por ejemplo, cuando el número de modos de intra predicción angular que no sean los modos de intra predicción de ángulo amplio es 65, el MPM puede derivarse en función de un valor derivado basándose en candIntraPredA y una operación de módulo de 64. Por otro lado, cuando el bloque actual no tiene forma cuadrada, puede obtenerse un modo de intra predicción similar a candIntraPredA en función de una operación modular basándose en un valor obtenido restando 1 al número total de modos de intra predicción angulares que incluyen modos de intra predicción de ángulo amplio. Por ejemplo, cuando el número de modos de intra predicción de ángulo amplio es 20, el MPM puede derivarse en función de un valor derivado basándose en candIntraPredA y una operación de módulo de 84.
Debido a que la constante usada para la operación de módulo se establece de forma diferente de acuerdo con la forma del bloque actual, puede determinarse si el modo de intra predicción de ángulo amplio puede establecerse a un modo de intra predicción angular similar a candIntraPredA. Por ejemplo, el modo de intra predicción de ángulo amplio no
puede establecerse como un modo de intra predicción angular similar a candIntraPredA en una operación de módulo usando 64, mientras que el modo de intra predicción de ángulo amplio puede establecerse como un modo de intra predicción angular similar a candIntraPredA en una operación de módulo usando 84.
Como alternativa, cuando candIntraPredA y candIntraPredB son iguales, el MPM puede derivarse considerando la forma del bloque actual y si candIntraPredA es un modo de intra predicción de ángulo amplio.
La Tabla 7 muestra un ejemplo de derivación de un MPM de acuerdo con la forma del bloque actual.
[Tabla 7]
Se asume que candIntraPredA y candIntraPredB son iguales.
Cuando el bloque actual es una forma cuadrada y candIntraPredA es un modo de intra predicción de ángulo amplio, los MPM pueden establecerse a modos por defecto. Por ejemplo, MPM[0], MPM[1] y m Pm [2] pueden establecerse a un modo plano, un modo de CC y un modo de intra predicción vertical, respectivamente.
Cuando el bloque actual es una forma cuadrada y candIntraPredA no es un modo de intra predicción de ángulo amplio, sino un modo de intra predicción angular, los MPM pueden establecerse a candIntraPredA y a un modo de intra predicción angular similar al mismo. Por ejemplo, MPM[0] puede establecerse a candIntraPredA, y MPM[1] y MPM[2] pueden establecerse a candIntraPredA y a un modo de intra predicción angular similar al mismo.
Cuando el bloque actual es una forma no cuadrada y candIntraPredA no es un modo de intra predicción angular, los MPM pueden establecerse a candIntraPredA y a un modo de intra predicción angular similar al mismo. Por ejemplo, MPM[0] puede establecerse a candIntraPredA, y MPM[1] y MPM[2] pueden establecerse a candIntraPredA y a un modo de intra predicción angular similar al mismo.
El modo de intra predicción angular similar a candIntraPredA puede derivarse usando una operación de módulo y un desplazamiento. En este punto, la constante usada para la operación de módulo puede variar de acuerdo con la forma del bloque actual. Además, el desplazamiento usado para derivar un modo de intra predicción angular similar a candIntraPredA puede establecerse de forma diferente de acuerdo con la forma del bloque actual. Por ejemplo, cuando el bloque actual es una forma no cuadrada cuya anchura es mayor que la altura, un modo de intra predicción angular similar a candIntraPredA puede derivarse usando un desplazamiento 2. Por otro lado, cuando el bloque actual es una forma no cuadrada cuya altura es mayor que la anchura, un modo de intra predicción angular similar a candIntraPredA puede derivarse usando unos desplazamientos 2 y -8.
Como alternativa, los MPM pueden derivarse considerando si candIntraPredX es un modo de intra predicción de ángulo amplio que tiene el índice más grande o más pequeño.
La Tabla 8 muestra un ejemplo de derivación de un MPM considerando el índice del modo de intra predicción de ángulo amplio.
[Tabla 8]
Se asume que candIntraPredA y candIntraPredB son iguales. Por conveniencia de explicación, los modos de intra predicción de ángulo amplio que tienen un valor de índice menor que el del modo de intra predicción de la dirección diagonal inferior izquierda se denominan modos de intra predicción de ángulo amplio de dirección inferior, y los modos de intra predicción de ángulo amplio que tienen un valor de índice mayor que el del modo de intra predicción de la dirección diagonal superior derecha se denominan modos de intra predicción de ángulo amplio de dirección derecha.
Cuando candIntraPredA es un modo de intra predicción de ángulo amplio de dirección inferior, los MPM pueden establecerse a candIntraPredA y a un modo de intra predicción angular similar al mismo. En este punto, cuando candIntraPredA es un modo de intra predicción de ángulo amplio de dirección inferior que tiene el valor más pequeño, el MPM puede establecerse a un modo de intra predicción de ángulo amplio de dirección inferior que tiene un valor de índice predefinido. En el presente caso, el índice predefinido puede ser un índice que tiene el valor más grande de entre los índices de los modos de intra predicción de ángulo amplio de dirección inferior. Por ejemplo, cuando candIntraPredA es -10, MPM[0], MPM[1] y MPM[2] pueden establecerse a -10, -1 y -9, respectivamente.
Cuando candIntraPredA es un modo de intra predicción de ángulo amplio de dirección derecha, los MPM pueden establecerse a candIntraPredA y a un modo de intra predicción angular similar al mismo. En este punto, cuando candIntraPredA es un modo de intra predicción de ángulo amplio de dirección derecha que tiene el valor más grande, el MPM puede establecerse a un modo de intra predicción de ángulo amplio de dirección derecha que tiene un valor de índice predefinido. En el presente caso, el índice predefinido puede ser un índice que tiene el valor más pequeño de entre los índices de los modos de intra predicción de ángulo amplio de dirección derecha. Por ejemplo, cuando candIntraPredA es 77, MPM[0], MPM[1] y MPM[2] pueden establecerse a 77, 76 y 67, respectivamente.
Como alternativa, cuando un índice derivado restando o sumando 1 al índice de candIntraPredA es menor que el valor más pequeño o mayor que el valor más grande de entre los índices de los modos de intra predicción, el MPM puede establecerse al modo por defecto. En el presente caso, el modo por defecto puede incluir al menos uno de entre un modo plano, un modo de CC, un modo de intra predicción vertical, un modo de intra predicción horizontal y un modo de intra predicción diagonal.
Como alternativa, cuando un índice derivado restando o sumando 1 al índice de candIntraPredA es menor que el valor más pequeño o mayor que el valor más grande de entre los índices de los modos de intra predicción, el MPM puede establecerse a un modo de intra predicción opuesto a candIntraPredA o a un modo de intra predicción similar al modo de intra predicción opuesto al candIntraPredA.
Como alternativa, pueden derivarse candidatos de MPM considerando la forma del bloque actual y la forma de un bloque vecino. Por ejemplo, el método para derivar los MPM cuando tanto el bloque actual como el bloque vecino son formas cuadradas puede ser diferente del método para derivar los MPM cuando el bloque actual es una forma cuadrada y el bloque vecino es una forma no cuadrada.
Los MPM en la lista de MPM pueden reorganizarse (o reordenarse) considerando al menos uno de entre el tamaño del bloque actual, la forma del bloque actual, el tamaño del bloque vecino y la forma del bloque vecino. En el presente caso, la reorganización indica la reasignación de los índices asignados a cada uno de los MPM. Por ejemplo, puede asignarse un índice menor a un MPM que es igual que el modo de intra predicción de un bloque vecino que tiene un tamaño o una forma que es igual que la del bloque actual.
Se asume que MPM[0] y MPM[1] se establecen al modo de intra predicción candIntraPredA del bloque vecino izquierdo y al modo de intra predicción candIntraPredB del bloque vecino superior, respectivamente.
Cuando el bloque actual y el bloque vecino superior son formas no cuadradas cuya anchura es mayor que la altura, los MPM pueden reorganizarse de tal modo que el modo de intra predicción candIntraPredB del bloque vecino superior puede tener un índice menor. Es decir, candIntraPredB puede reorganizarse a MPM[0] y candIntraPredA puede reorganizarse a MPM[1].
Como alternativa, cuando el bloque actual y el bloque vecino superior son formas no cuadradas cuya altura es mayor que la anchura, los MPM pueden reorganizarse de tal modo que el modo de intra predicción candIntraPredB del bloque vecino superior tiene un índice menor. Es decir, candIntraPredB puede reorganizarse a MPM[0] y candIntraPredA puede reorganizarse a MPM[1].
Como alternativa, cuando el bloque actual y el bloque vecino superior son formas cuadradas, los MPM pueden reorganizarse de tal modo que el modo de intra predicción candIntraPredB del bloque vecino superior tiene un índice menor. Es decir, candIntraPredB puede reorganizarse a MPM[0] y candIntraPredA puede reorganizarse a MPM[1].
En lugar de reorganizar los MPM, cuando candIntraPredX se asigna inicialmente al MPM, puede considerarse al menos uno de entre el tamaño del bloque actual, la forma del bloque actual, el tamaño del bloque vecino y la forma del bloque vecino.
Los MPM pueden reorganizarse basándose en el tamaño o la forma del bloque actual. Por ejemplo, cuando el bloque actual es una forma no cuadrada cuya anchura es mayor que la altura, los MPM pueden reorganizarse en orden descendente. Por otro lado, cuando el bloque actual es una forma no cuadrada cuya altura es mayor que la anchura, los MPM pueden reorganizarse en orden ascendente.
Un vídeo residual derivado puede derivarse restando un vídeo de predicción de un vídeo original. En este punto, cuando el vídeo residual se cambia al dominio de la frecuencia, la calidad de vídeo subjetiva del vídeo no se reduce
significativamente, aunque se eliminan las componentes de alta frecuencia de entre las componentes de frecuencia. En consecuencia, cuando los valores de las componentes de alta frecuencia se convierten para ser pequeños o los valores de las componentes de alta frecuencia se establecen a 0, hay un efecto de aumentar la eficiencia de compresión sin generar una distorsión visual significativa. Al reflejar esta característica, el bloque actual puede transformarse para descomponer un vídeo residual en componentes de frecuencia bidimensionales. La transformada puede realizarse usando una técnica de transformada tal como transformada discreta del coseno (DCT) o transformada discreta del seno (DST).
La DCT descompone (o transforma) un vídeo residual en componentes de frecuencia bidimensionales usando una transformada de coseno, y la DST descompone (o transforma) un vídeo residual en componentes de frecuencia bidimensionales usando una transformada sinusoidal. Como resultado de transformar el vídeo residual, las componentes de frecuencia pueden expresarse como un vídeo de base. Por ejemplo, cuando la transformada DCT se realiza sobre un bloque de un tamaño N x N, pueden adquirirse tantos componentes de patrón básicos como N2. El tamaño de cada uno de los componentes de patrón básicos incluidos en un bloque de un tamaño N x N puede adquirirse a través de la transformada. De acuerdo con una técnica de transformada usada para ello, el tamaño del componente de patrón básico puede denominarse coeficiente de DCT o coeficiente de DST.
Se usa principalmente la técnica de transformada DCT para transformar un vídeo en el que se distribuyen muchas componentes de baja frecuencia no nulos. Se usa principalmente la técnica de transformada DST para vídeos en los que se distribuyen muchas componentes de alta frecuencia.
El vídeo residual puede transformarse usando una técnica de transformada que no sea la DCT o la DST.
En lo sucesivo en el presente documento, la transformada de un vídeo residual en componentes de frecuencia bidimensionales se denominará transformada de vídeo bidimensional. Además, el tamaño de los componentes de patrón básicos adquiridos como resultado de la transformada se denomina coeficiente de transformada. Por ejemplo, el coeficiente de transformada puede significar un coeficiente de DCT o un coeficiente de DST. Cuando se aplican tanto la primera transformada como la segunda transformada descritas a continuación, el coeficiente de transformada puede significar el tamaño de un componente de patrón básico generado como resultado de la segunda transformada.
Puede determinarse la técnica de transformada para cada bloque. Puede determinarse la técnica de transformada basándose en al menos uno de entre el modo de codificación de predicción del bloque actual, el tamaño del bloque actual y el tamaño del bloque actual. Por ejemplo, cuando el bloque actual se codifica en el modo de intra predicción y el tamaño del bloque actual es menor que N x N, la transformada puede realizarse usando la técnica de transformada DST. Por otro lado, cuando no se satisfacen las condiciones anteriores, la transformada puede realizarse usando la técnica de transformada DCT.
La transformada de vídeo bidimensional puede no realizarse para algunos bloques del vídeo residual. No realizar la transformada de vídeo bidimensional puede denominarse omisión de transformada. Cuando se aplica la omisión de transformada, la cuantificación puede aplicarse a coeficientes residuales que no se han transformado.
Después de que el bloque actual se haya transformado usando DCT o DST, el bloque actual transformado puede transformarse de nuevo. En este punto, la transformada basándose en DCT o DST puede definirse como una primera transformada y transformar de nuevo un bloque al cual se aplica la primera transformada puede definirse como una segunda transformada.
La primera transformada puede realizarse usando uno cualquiera de entre una pluralidad de candidatos de núcleo de transformada. Por ejemplo, la primera transformada puede realizarse usando una cualquiera de entre DCT2, DCT8 o DCT7.
Pueden usarse diferentes núcleos de transformada para la dirección horizontal y la dirección vertical. Puede señalizarse información que indica la combinación de un núcleo de transformada de la dirección horizontal y un núcleo de transformada de la dirección vertical a través de un flujo de bits.
Las unidades para realizar la primera transformada y la segunda transformada pueden ser diferentes. Por ejemplo, la primera transformada puede realizarse sobre un bloque de 8 x 8, y la segunda transformada puede realizarse sobre un subbloque de un tamaño de 4 x 4 de entre el bloque de 8 x 8 transformado. En este punto, los coeficientes de transformada de las regiones residuales que no se han realizado, la segunda transformada puede establecerse a 0.
Como alternativa, la primera transformada puede realizarse sobre un bloque de 4 x 4, y la segunda transformada puede realizarse sobre una región de un tamaño de 8 x 8 que incluye el bloque de 4 x 4 transformado.
Puede señalizarse información que indica si se ha realizado, o no, la segunda transformada a través de un flujo de bits.
El descodificador puede realizar una transformada inversa de la segunda transformada (una segunda transformada inversa) y puede realizar una transformada inversa de la primera transformada (una primera transformada inversa) sobre un resultado de la transformada inversa. Como resultado de realizar la segunda transformada inversa y la primera transformada inversa, pueden adquirirse señales residuales para el bloque actual.
La cuantificación es para reducir la energía de un bloque, y el proceso de cuantificación incluye un proceso de división de un coeficiente de transformada por un valor constante específico. El valor constante puede derivarse mediante un parámetro de cuantificación, y el parámetro de cuantificación puede definirse como un valor entre 1 y 63.
Cuando el codificador realiza transformada y cuantificación, el descodificador puede adquirir un bloque residual a través de cuantificación inversa y transformada inversa. El descodificador puede adquirir un bloque reconstruido para el bloque actual sumando un bloque de predicción y el bloque residual.
Cuando se adquiere un bloque reconstruido del bloque actual, la pérdida de información que tiene lugar en el proceso de cuantificación y codificación se puede reducir a través de un filtrado en bucle. Un filtro en bucle puede incluir al menos uno de entre un filtro de desbloqueo, un filtro de desplazamiento adaptativo de muestra (SAO) y un filtro de bucle adaptativo (ALF). En lo sucesivo en el presente documento, un bloque reconstruido antes de aplicar el filtro en bucle se denomina primer bloque reconstruido, y un bloque reconstruido después de aplicar el filtro en bucle se denomina segundo bloque reconstruido.
Puede adquirirse el segundo bloque reconstruido mediante la aplicación de al menos uno de entre el filtro de desbloqueo, el SAO y el ALF al primer bloque reconstruido. En este punto, puede aplicarse SAO o ALF después de aplicar el filtro de desbloqueo.
El filtro de desbloqueo es para mitigar el deterioro de la calidad de vídeo (artefacto de bloqueo) en la frontera de un bloque, que tiene lugar cuando se realiza la cuantificación sobre bloques individuales. Para aplicar el filtro de desbloqueo, puede determinarse una fuerza de bloque (BS) entre el primer bloque reconstruido y un bloque reconstruido vecino.
La figura 30 es un diagrama de flujo que ilustra un proceso de determinación de fuerza de bloque.
En el ejemplo mostrado en la figura 30, P denota un primer bloque reconstruido y Q denota un bloque reconstruido vecino. En el presente caso, el bloque reconstruido vecino puede ser un bloque adyacente al lado izquierdo o al lado superior del bloque actual.
En el ejemplo mostrado en la figura 30, se muestra que la fuerza de bloque se determina considerando los modos de codificación de predicción de P y Q, si se incluye un coeficiente de transformada no nulo, si la inter predicción se realiza usando la misma imagen de referencia y si el valor de diferencia de vectores de movimiento es mayor que o igual a un valor umbral.
Puede determinarse si aplicar, o no, el filtro de desbloqueo basándose en la fuerza de bloque. Por ejemplo, cuando la fuerza de bloque es 0, puede no realizarse un filtrado.
El SAO es para mitigar un fenómeno de aparición de anillos (artefacto de aparición de anillos) que tiene lugar cuando se realiza la cuantificación en el dominio de la frecuencia. El SAO puede realizarse sumando o restando un desplazamiento determinado considerando el patrón del primer vídeo reconstruido. El método para determinar el desplazamiento incluye un desplazamiento de borde (EO) o un desplazamiento de banda. El EO denota un método para determinar un desplazamiento de una muestra actual de acuerdo con el patrón de píxeles circundantes. El BO denota un método para aplicar un desplazamiento común a un conjunto de píxeles que tienen valores de brillo similares en una región. Específicamente, el brillo de píxel puede dividirse en 32 secciones iguales y los píxeles que tienen valores de brillo similares pueden establecerse como un conjunto. Por ejemplo, pueden establecerse cuatro bandas adyacentes de entre 32 bandas como un grupo, y puede aplicarse el mismo valor de desplazamiento a las muestras que pertenecen a las cuatro bandas.
El ALF es un método para generar un segundo vídeo reconstruido mediante la aplicación de un filtro que tiene un tamaño/forma predefinido al primer vídeo reconstruido o un vídeo reconstruido al que se ha aplicado un filtro de desbloqueo. La ecuación 21 muestra un ejemplo de aplicación del ALF.
[Ecuación 21]
Uno cualquiera de entre los candidatos de filtro predefinidos puede seleccionarse mediante la unidad de una imagen, una unidad de árbol de codificación, un bloque de codificación, un bloque de predicción o un bloque de transformada. Cada uno de los candidatos de filtro puede ser diferente o bien en el tamaño o bien en la forma.
La figura 31 es una vista que muestra candidatos de filtro predefinidos.
Como se muestra en el ejemplo de la figura 31, puede seleccionarse al menos una de entre las formas de rombo de 5 x 5, 7 x 7 y 9 x 9.
Solo puede usarse una forma de rombo de un tamaño de 5 x 5 para un componente de croma.
En aras de la codificación en tiempo real o de retardo bajo de vídeos de resolución alta tales como vídeos panorámicos, vídeos de 360 grados o vídeos de UHD (Definición Ultra Alta) de 4K/8K, puede considerarse un método para subdividir una imagen en una pluralidad de regiones y codificar/descodificar la pluralidad de regiones en paralelo. Para este fin, una imagen puede subdividirse en teselas, es decir, una unidad básica de codificación/descodificación paralela, y las teselas pueden procesarse en paralelo.
Las teselas pueden restringirse para que tengan una forma rectangular. En la codificación/descodificación de una tesela, no se usan datos de las otras teselas. Una tabla de probabilidad del contexto de la codificación aritmética binaria adaptativa al contexto (CABAC) puede inicializarse mediante la unidad de tesela, y puede establecerse no aplicar un filtro en bucle en las fronteras de las teselas.
La figura 32 es una vista que muestra un ejemplo de subdivisión de una imagen en una pluralidad de teselas.
Una tesela incluye al menos una unidad de árbol de codificación y la frontera de una tesela se superpone con la frontera de la unidad de árbol de codificación.
Como se muestra en el ejemplo de la figura 32, una imagen puede subdividirse en una pluralidad de conjuntos de teselas. Puede señalizarse información para subdividir una imagen en una pluralidad de conjuntos de teselas a través de un flujo de bits.
De acuerdo con el tipo de subdivisión de una imagen, las teselas pueden tener el mismo tamaño en todas las regiones excepto por las fronteras de imagen.
Como alternativa, una imagen puede subdividirse de tal modo que las teselas adyacentes en la dirección horizontal pueden tener la misma altura, o la imagen puede subdividirse de tal modo que las teselas adyacentes en la dirección vertical pueden tener la misma anchura.
Debido a que una imagen se subdivide usando al menos una de entre una línea vertical y una línea horizontal que cruzan la imagen, cada una de las teselas pertenece a una columna y/o fila diferente. En la realización descrita a continuación, una columna a la que pertenece una tesela se denomina columna de tesela, y una fila a la que pertenece una tesela se denomina fila de tesela.
Puede señalizarse información para determinar una forma de subdivisión de una imagen en teselas a través de un flujo de bits. La información puede codificarse y señalizarse a través de un conjunto de parámetros de imagen o un conjunto de parámetros de secuencia. La información es para determinar el número de teselas en una imagen y puede incluir información que indica el número de filas de tesela e información que indica el número de columnas de tesela. Por ejemplo, el elemento de sintaxis num_tile_columns_minus1 indica un valor obtenido restando 1 del número de columnas de tesela, y el elemento de sintaxis num_tile_rows_minus1 indica un valor obtenido restando 1 del número de filas de tesela.
En el ejemplo mostrado en la figura 32, debido a que el número de columnas de tesela es 4 y el número de filas de tesela es 3, num_tile_columns_minus1 puede ser 3 y num_tile_rows_minus1 puede ser 2.
Cuando una imagen se subdivide en una pluralidad de teselas, puede señalizarse información que indica el tamaño de una tesela a través de un flujo de bits. Por ejemplo, cuando una imagen se subdivide en una pluralidad de columnas de tesela, se señaliza información que indica la anchura de cada columna de tesela a través de un flujo de bits, y cuando la imagen se subdivide en una pluralidad de filas de tesela, se señaliza información que indica la altura de cada fila de tesela a través de un flujo de bits. Por ejemplo, el elemento de sintaxis column_width_minus1 que indica la anchura de la columna de tesela puede codificarse y señalizarse para cada columna de tesela, y el elemento de sintaxis row_height_minus1 que indica la altura de la fila de tesela puede codificarse y señalizarse para cada fila de tesela.
Column_width_minus1 puede indicar un valor obtenido restando 1 de la anchura de una columna de tesela, y row_height_minus1 puede indicar un valor obtenido restando 1 de la altura de una fila de tesela.
La codificación de column_width_minus1 puede omitirse para la última columna de tesela, y la codificación de row_height_minus1 puede omitirse para la última fila de tesela. La anchura de la última columna de tesela y la altura de la última fila pueden derivarse considerando un tamaño de imagen.
El descodificador puede determinar un tamaño de tesela basándose en column_width_minus1 y en row_height_minus1.
La Tabla 9 muestra una tabla de sintaxis para subdividir una imagen en teselas.
[Tabla 9]
Haciendo referencia a la Tabla 9, pueden señalizarse el elemento de sintaxis num_tile_columns_minus1 que indica el número de columnas de tesela y el elemento de sintaxis num_tile_rows_minus1 que indica el número de filas de tesela.
A continuación, puede señalizarse el elemento de sintaxis uniform_spacing_flag que indica si una imagen se subdivide en teselas de un tamaño igual. Cuando la uniform_spacing_flag es verdadera, las teselas en el área restante excluyendo las fronteras de imagen pueden subdividirse en un tamaño igual.
Cuando la uniform_spacing_flag es falsa, pueden señalizarse el elemento de sintaxis column_width_minus1 que indica la anchura de cada columna de tesela y el elemento de sintaxis row_height_minus1 que indica la altura de cada fila de tesela.
El elemento de sintaxis loop_filter_across_tiles_enabled_flag indica si se permite usar un filtro de bucle en las fronteras de tesela.
Una columna de tesela que tiene la anchura más pequeña de entre las columnas de tesela puede denominarse tesela de anchura mínima, y una fila de tesela que tiene la altura más pequeña de entre las filas de tesela puede denominarse tesela de altura mínima. Pueden señalizarse información que indica la anchura de la tesela de anchura mínima e información que indica la altura de la tesela de altura mínima a través de un flujo de bits. Por ejemplo, el elemento de sintaxis min_column_width_minus1 indica un valor obtenido restando 1 de la anchura de la tesela de anchura mínima, y el elemento de sintaxis min_row_height_minus1 indica un valor obtenido restando 1 de la altura de la tesela de altura mínima.
Puede señalizarse información que indica un valor de diferencia con la anchura de tesela mínima para cada columna de tesela. Por ejemplo, el elemento de sintaxis diff_column_width indica un valor de diferencia en la anchura entre la columna de tesela actual y la columna de tesela mínima. El valor de diferencia en la anchura puede expresarse como un valor de diferencia en el número de columnas de unidades de árbol de codificación. El descodificador puede derivar la anchura de la tesela actual sumando la anchura de la tesela de anchura mínima derivada basándose en min_column_width_minus1 y el valor de diferencia en la anchura derivado basándose en diff_column_width.
Además, puede señalizarse información que indica un valor de diferencia con la altura de tesela mínima para cada fila de tesela. Por ejemplo, el elemento de sintaxis diff_row_height indica un valor de diferencia en la altura entre la fila de tesela actual y la fila de tesela mínima. El valor de diferencia en la altura puede expresarse como un valor de diferencia en el número de filas de unidades de árbol de codificación. El descodificador puede derivar la altura de la tesela actual
sumando la altura de la tesela de altura mínima derivada basándose en min_row_he¡ght_minus1 y el valor de diferencia en la altura derivado basándose en diff_row_heigth.
La Tabla 10 muestra una tabla de sintaxis que incluye información acerca de la diferencia de tamaño.
[Tabla 10]
Una imagen puede subdividirse de tal modo que las teselas adyacentes horizontalmente pueden tener diferentes alturas, o una imagen puede subdividirse de tal modo que las teselas adyacentes verticalmente pueden tener diferentes anchuras. El método para subdividir una imagen como esta puede denominarse método de subdivisión de teselas flexible, y las teselas subdivididas a través del método de subdivisión de teselas flexible pueden denominarse teselas flexibles.
La figura 33 es una vista que muestra un patrón de subdivisión de una imagen de acuerdo con una técnica de tesela flexible.
El orden de búsqueda de las teselas generadas subdividiendo una imagen puede seguir un orden de exploración predeterminado. Además, pueden asignarse un índice a cada una de las teselas de acuerdo con un orden de exploración predeterminado.
El orden de exploración de las teselas puede ser una cualquiera de entre una exploración por filas, una exploración diagonal, una exploración de dirección vertical y una exploración de dirección horizontal. Las figuras 33(a) a 33(d) muestran respectivamente ejemplos de asignación de un índice a cada una de las teselas de acuerdo con una exploración por filas, una exploración diagonal, una exploración de dirección vertical y una exploración de dirección horizontal.
Puede determinarse un orden de exploración siguiente de acuerdo con el tamaño o la posición de la tesela actual. Por ejemplo, cuando la altura de la tesela actual y la altura de una tesela adyacente al lado derecho de la tesela actual son diferentes (por ejemplo, cuando la altura de la tesela vecina derecha es mayor que la altura de la tesela actual), una tesela situada en el lado más a la izquierda de entre las teselas colocadas en una línea vertical que es igual que la de una tesela adyacente a la parte inferior de la tesela actual puede determinarse como un objetivo de exploración después de la tesela actual.
El orden de exploración de las teselas puede ser determinado por la unidad de imagen o secuencia.
Como alternativa, el orden de exploración de las teselas puede determinarse considerando el tamaño de la primera tesela en la imagen. Por ejemplo, cuando la anchura de la primera tesela es mayor que la altura, el orden de exploración de las teselas puede establecerse a exploración horizontal. Cuando la altura de la primera tesela es mayor que la anchura, el orden de exploración de las teselas puede establecerse a exploración vertical. Cuando la anchura de la primera tesela es igual que la altura, el orden de exploración de las teselas puede establecerse a exploración por filas o exploración diagonal.
Puede señalizarse información que indica el número total de teselas a través de un flujo de bits. Por ejemplo, cuando se aplica una técnica de tesela flexible, puede señalizarse el elemento de sintaxis number_of_tiles_in_picture_minus2 derivado restando 2 del número total de teselas en una imagen. El descodificador puede reconocer el número de teselas incluidas en la imagen actual basándose en el number_of_tiles_in_picture_minus2.
La Tabla 11 muestra una tabla de sintaxis que incluye información acerca del número de teselas.
[Tabla 11]
Para reducir el número de bits necesarios para codificar el tamaño de una tesela, puede codificarse y señalizarse información que indica el tamaño de una subtesela. La subtesela es una unidad básica que constituye una tesela, y cada tesela puede configurarse para incluir al menos una subtesela. La subtesela puede incluir una o más unidades de árbol de codificación.
Por ejemplo, el elemento de sintaxis subtile_width_minus1 indica un valor obtenido restando 1 de la anchura de una subtesela. El elemento de sintaxis subtile_height_minus1 indica un valor obtenido restando 1 de la altura de una subtesela.
Puede codificarse y señalizarse información que indica si las teselas restantes que no sean la primera tesela tienen un tamaño que es igual que el de una tesela previa. Por ejemplo, el elemento de sintaxis use_previous_tile_size_flag indica si el tamaño de la tesela actual es igual que el tamaño de una tesela previa. Cuando use_previous_tile_size_flag es verdadera, esta indica que el tamaño de la tesela actual es igual que el tamaño de una tesela previa. Cuando use_previous_tile_size_flag es falsa, puede codificarse y señalizarse información que indica el tamaño de la tesela actual. Para la primera tesela, puede omitirse la codificación de use_previous_tile_size_flag y un valor de la bandera puede establecerse a falso.
La información que indica el tamaño de tesela puede incluir el elemento de sintaxis tile_width_minus1 [i] que indica la anchura de la i-ésima tesela y el elemento de sintaxis tile_height_minus1 [i] que indica la altura de la i-ésima tesela.
La información que indica el tamaño de tesela puede indicar un valor de diferencia con el tamaño de una subtesela. Debido a que se usa la información de tamaño de una subtesela, la eficiencia de la codificación/descodificación puede potenciarse reduciendo el número de bits necesarios para codificar el tamaño de cada tesela. Por ejemplo, la anchura de la i-ésima tesela tileWidth puede derivarse basándose en la Ecuación 22 mostrada a continuación, y la altura de la i-ésima tesela tileHeight puede derivarse basándose en la Ecuación 23 mostrada a continuación.
Como alternativa, puede omitirse la codificación de información de tamaño de subtesela, y el tamaño de la i-ésima tesela puede codificarse tal cual está como información de tamaño de tesela. Opcionalmente, puede codificarse la información de tamaño de subtesela. Puede señalizarse información que indica si se codifica, o no, información de tamaño de subtesela a través de un conjunto de parámetros de vídeo, un conjunto de parámetros de secuencia o un conjunto de parámetros de imagen.
Puede codificarse información relacionada con el tamaño de tesela descrito anteriormente, y señalizarse la misma como que indica el número de unidades de árbol de codificación. Por ejemplo, column_width_minus1, min_column_width_minus1, subtile_width_minus1 o tile_width_minus1 puede indicar el número de columnas de unidades de árbol de codificación incluidas en una tesela. Además, diff_column_width puede indicar un valor de diferencia entre el número de columnas de unidades de árbol de codificación incluidas en la tesela de anchura mínima y el número de columnas de unidades de árbol de codificación incluidas en la tesela actual.
Además, row_height_minus1, min_row_height_minus1, subtile_height_minus1 o tile_height_minus1 puede indicar el número de filas de unidades de árbol de codificación incluidas en una tesela. Además, diff_row_height puede indicar un valor de diferencia entre el número de filas de unidades de árbol de codificación incluidas en la tesela de altura mínima y el número de filas de unidades de árbol de codificación incluidas en la tesela actual.
El descodificador puede determinar el tamaño de una tesela basándose en el número de columnas de unidades de árbol de codificación y/o en el número de filas de unidades de árbol de codificación derivadas basándose en los elementos de sintaxis y en el tamaño de la unidad de árbol de codificación. Por ejemplo, la anchura de la i-ésima tesela puede establecerse a (tile_width_minus1 [i] 1) * (anchura de la unidad de árbol de codificación), y la altura de la iésima tesela puede establecerse a (tile_height_minus1 [i] 1) * (altura de la unidad de árbol de codificación).
Por otro lado, puede señalizarse información que indica el tamaño de la unidad de árbol de codificación a través de un conjunto de parámetros de secuencia o un conjunto de parámetros de imagen.
En la Tabla 11, se describe que se usa el elemento de sintaxis use_previous_tile_size_flag que indica si el tamaño de la tesela actual es igual que el tamaño de una tesela previa. Como otro ejemplo, puede codificarse y señalizarse información que indica si la anchura de la tesela actual es igual que la anchura de una tesela previa o información que indica si la altura de la tesela actual es igual que la altura de una tesela previa.
La Tabla 12 muestra una tabla de sintaxis que incluye información que indica si la anchura de la tesela actual es igual que la anchura de una tesela previa.
[T a b la 12]
El elemento de sintaxis use_previous_tile_width_flag indica si la anchura de la tesela actual es igual que la anchura de una tesela previa. Cuando la use_previous_tile_width_flag es verdadera, la anchura de la tesela actual puede establecerse para que sea igual que la anchura de una tesela previa. En este caso, puede omitirse la codificación de la información que indica la anchura de la tesela actual, y la anchura de la tesela actual puede derivarse de la anchura de una tesela previa.
Cuando la use_previous_tile_width_flag es falsa, puede señalizarse información que indica la anchura de la tesela actual. Por ejemplo, tile_width_minus1[i] puede indicar un valor obtenido restando 1 de la anchura de la i-ésima tesela.
El elemento de sintaxis use_previous_tile_width_flag puede codificarse y señalizarse solo cuando se determina que el tamaño de la tesela actual es diferente del tamaño de una tesela previa (por ejemplo, cuando el valor de use_previous_tile_size_flag es 0).
Tile_width_minus1[i] puede tener un valor obtenido restando 1 del número de columnas de unidades de árbol de codificación incluidas en la i-ésima tesela. El descodificador puede derivar el número de columnas de unidades de árbol de codificación que pertenecen a la i-ésima tesela sumando 1 a tile_width_minus1[i], y calcular la anchura de tesela multiplicando el valor derivado por la anchura de la unidad de árbol de codificación.
La Tabla 13 muestra una tabla de sintaxis que incluye además información que indica si la altura de la tesela actual es igual que la altura de una tesela previa.
[T a b la 13]
El elemento de sintaxis use_previous_tile_height_flag indica si la altura de la tesela actual es igual que la altura de una tesela previa. Cuando la use_previous_tile_height_flag es verdadera, la altura de la tesela actual puede establecerse para que sea igual que la altura de una tesela previa. En este caso, puede omitirse la codificación de información que indica la altura de la tesela actual, y la altura de la tesela actual puede derivarse de la altura de una tesela previa.
Cuando la use_previous_tile_height_flag es falsa, puede señalizarse información que indica la altura de la tesela actual. Por ejemplo, tile_height_minus1 [i] puede indicar un valor obtenido restando 1 de la altura de la i-ésima tesela.
El elemento de sintaxis use_previous_tile_height_flag puede codificarse y señalizarse solo cuando se determina que el tamaño de la tesela actual es diferente del tamaño de una tesela previa (por ejemplo, cuando el valor de use_previous_tile_size_flag es 0). Además, el elemento de sintaxis use_previous_tile_height_flag puede señalizarse solo cuando use_previous_tile_width_flag es falsa.
La Tabla 12 muestra un ejemplo de un caso de uso de use_previous_tile_width_flag, y la Tabla 13 muestra un ejemplo de un caso de uso de use_previous_tile_width_flag y use_previous_tile_height_flag. Aunque no se muestra en las tablas anteriores, puede omitirse la codificación de use_previous_tile_width_flag, y puede usarse solo use_previous_tile_height_flag.
Cuál se usará de entre la use_previous_tile_height_flag y la use_previous_tile_size_flag puede determinarse basándose en al menos uno de entre un orden de exploración por teselas, la anchura y la altura de la primera tesela, y la anchura y la altura de una tesela previa. Por ejemplo, cuando el orden de exploración por teselas es en dirección vertical, puede usarse la use_previous_tile_height_flag, mientras que, cuando el orden de exploración por teselas es en dirección horizontal, puede usarse la use_previous_tile_width_flag. Como alternativa, cuando la primera tesela o una tesela previa es una forma no cuadrada cuya anchura es mayor que la altura, puede usarse la use_previous_tile_width_flag, mientras que, cuando la primera tesela o una tesela previa es una forma no cuadrada cuya altura es mayor que la anchura, puede usarse la use_previous_tile_height_flag.
Mientras se señaliza el número de teselas incluidos en una imagen, la codificación de información relacionada con el tamaño de tesela puede omitirse para la última tesela.
La Tabla 14 muestra un ejemplo en el que la codificación de información de tamaño de tesela se omite para la última tesela.
[Tabla 14]
Cuando se especifica el tamaño de teselas que no sean la última tesela, la región restante en la imagen puede establecerse como la última tesela.
Para cada unidad de árbol de codificación, puede asignarse un identificador para identificar una tesela a la que pertenece la unidad de árbol de codificación (denominado, en lo sucesivo en el presente documento, ID de tesela TileID).
La figura 34 es una vista que muestra un ejemplo de asignación de un ID de tesela a cada unidad de árbol de codificación.
Puede asignarse el mismo ID de tesela a unidades de árbol de codificación que pertenecen a la misma tesela. Específicamente, puede asignarse el N-ésimo TileID a unidades de árbol de codificación que pertenecen a la Tesela N.
Las variables x e y que indican la posición de una unidad de árbol de codificación en una imagen pueden determinarse para determinar un ID de tesela asignado a cada unidad de árbol de codificación. En el presente caso, x denota un valor obtenido dividiendo la coordenada de eje x de entre la posición (x0, y0) de la muestra superior izquierda de la unidad de árbol de codificación por la anchura de la unidad de árbol de codificación, e y denota un valor obtenido dividiendo la coordenada de eje y de entre la posición (x0, y0) de la muestra superior izquierda de la unidad de árbol de codificación por la altura de la unidad de árbol de codificación. Específicamente, x e y pueden derivarse mediante las Ecuaciones 24 y 25 mostradas a continuación.
[Ecuación 24]
x= {xO I [anchura de CTU))
[Ecuación 25]
y- [yOI [altura de CTU))
La asignación de un ID de tesela a cada unidad de árbol de codificación puede realizarse a través del proceso descrito a continuación.
i) Inicializar ID de tesela
El ID de tesela de cada unidad de árbol de codificación puede inicializarse con un valor obtenido restando 1 del número de teselas en una imagen.
[Tabla 15]
ii) Derivar ID de tesela
[Tabla 16]
En la realización descrita anteriormente, se ha descrito que una bandera que indica si se permite aplicar un filtro en bucle en las fronteras de las teselas se señaliza a través de un conjunto de parámetros de imagen. Sin embargo, cuando se establece no usar un filtro en bucle en todas las fronteras de tesela, puede tener lugar un problema de reducción de la calidad de imagen subjetiva y de disminución de la eficiencia de codificación.
Por lo tanto, puede codificarse y señalizarse información que indica si permitir, o no, un filtro en bucle para cada tesela.
La figura 35 es una vista que muestra un ejemplo de determinación selectiva de si aplicar, o no, un filtro en bucle a cada tesela.
Como se muestra en el ejemplo de la figura 35, puede determinarse para cada tesela si permitir, o no, un filtro en bucle (por ejemplo, un filtro de desbloqueo, SAO y/o ALF) en la frontera horizontal o vertical.
La Tabla 17 muestra un ejemplo en el que se codifica para cada tesela información que indica si permitir, o no, un filtro en bucle.
[Tabla 17]
En el ejemplo de la Tabla 17, el elemento de sintaxis loop_filter_across_tiles_flag[i] indica si se permite aplicar un filtro en bucle a la i-ésima tesela. Cuando el valor de loop_filter_across_tiles_flag[i] es 1, indica que puede usarse un filtro en bucle en las fronteras horizontales y verticales de una tesela cuyo ID de tesela es i. Cuando el valor de loop_filter_across_tiles_flag[i] es 0, indica que no puede usarse un filtro en bucle en las fronteras horizontales y verticales de una tesela cuyo ID de tesela es i.
Puede codificarse información que indica si permitir, o no, un filtro en bucle para cada una de las direcciones horizontal y vertical.
La Tabla 18 muestra un ejemplo en el que se codifica individualmente para la dirección horizontal y la dirección vertical información que indica si permitir, o no, un filtro en bucle.
[T a b la 18]
En el ejemplo de la Tabla 18, el elemento de sintaxis loop_filter_hor_across_tiles_flag[i] indica si se permite aplicar un filtro en bucle que cruza la i-ésima tesela en la dirección horizontal. El elemento de sintaxis loop_filter_ver_across_tiles_flag[i] indica si se permite aplicar un filtro en bucle que cruza la i-ésima tesela en la dirección vertical.
Cuando el valor de loop_filter_hor_across_tiles_flag[i] es 1, indica que puede usarse un filtro en bucle en la frontera horizontal de una tesela cuyo ID de tesela es i. Cuando el valor de loop_filter_hor_across_tiles_flag[i] es 0, indica que no puede usarse un filtro en bucle en la frontera horizontal de una tesela cuyo ID de tesela es i.
Cuando el valor de loop_filter_ver_across_tiles_flag[i] es 1, indica que puede usarse un filtro en bucle en la frontera vertical de una tesela cuyo ID de tesela es i, y cuando el valor de loop_filter_ver_across_tiles_flag[i] es 0, indica que no puede usarse un filtro en bucle en la frontera vertical de una tesela cuyo ID de tesela es i.
Como alternativa, puede codificarse y señalizarse información que indica si se permite un filtro en bucle para un grupo de teselas que incluye una pluralidad de teselas. Si permitir, o no, un filtro en bucle para una pluralidad de teselas incluidas en un grupo de teselas puede ser determinado por la información.
Para determinar un grupo de teselas, puede señalizarse al menos una de entre el número de teselas que pertenecen al grupo de teselas, el tamaño del grupo de teselas e información de subdivisión de una imagen a través de un flujo de bits. Como alternativa, una región de un tamaño predefinido en el codificador y el descodificador puede establecerse como un grupo de teselas.
Puede omitirse la codificación de información que indica si se permite un filtro en bucle, y puede determinarse si permitir, o no, un filtro en bucle basándose en al menos uno de entre el número de unidades de árbol de codificación incluidas en una tesela, la anchura de la tesela y la altura de la tesela. Por ejemplo, cuando la anchura de tesela es menor que un valor de referencia, puede permitirse un filtro en bucle para la dirección horizontal, y cuando la altura de una tesela es menor que un valor de referencia, puede permitirse un filtro en bucle para la dirección vertical.
Cuando se usa un filtro en bucle en una frontera de tesela, datos reconstruidos fuera de la tesela pueden generarse basándose en los datos incluidos en la tesela. En este punto, un vídeo reconstruido fuera de la tesela puede adquirirse rellenando o interpolando los datos incluidos en la tesela. Posteriormente, puede aplicarse un filtro en bucle usando los datos reconstruidos fuera de la tesela.
La aplicación de las realizaciones descritas anteriormente que se centran en un proceso de descodificación o en un proceso de codificación a un proceso de codificación o en un proceso de descodificación se incluye en el alcance de
la presente invención. Cambiar las realizaciones en un orden predeterminado en un orden diferente del orden descrito también se incluye en el alcance de la presente invención.
Aunque las realizaciones anteriores se han descrito basándose en una serie de etapas o diagramas de flujo, esto no limita el orden de series temporales de la presente invención, y puede realizarse simultáneamente o en un orden diferente como sea necesario. Además, cada uno de los componentes (por ejemplo, unidades, módulos, etc.) que constituyen el diagrama de bloques en las realizaciones descritas anteriormente pueden implementarse como un dispositivo o software de hardware, o una pluralidad de componentes pueden combinarse para implementarse como un único dispositivo o software de hardware. Las realizaciones descritas anteriormente pueden implementarse en forma de órdenes de programa que pueden ejecutarse a través de diversos componentes informáticos y registrarse en un medio de registro legible por ordenador. El medio de registro legible por ordenador puede incluir órdenes de programa, archivos de datos, estructuras de datos y similares, independientemente o en combinación. El medio de registro legible por ordenador incluye, por ejemplo, medios magnéticos tales como un disco duro, un disquete y una cinta magnética, medios de registro ópticos tales como un CD-ROM y un DVD, medios magneto-ópticos tales como un disco óptico flexible y dispositivos de hardware configurados especialmente para almacenar y ejecutar órdenes de programa, tales como una ROM, una RAM, una memoria flash y similares. Los dispositivos de hardware descritos anteriormente pueden configurarse para funcionar usando uno o más módulos de software para realizar el proceso de la presente invención y viceversa.
La presente invención puede aplicarse a un dispositivo electrónico que codifica y descodifica un vídeo.