ES2967663T3 - Método y aparato para el almacenamiento de información de movimiento - Google Patents

Método y aparato para el almacenamiento de información de movimiento Download PDF

Info

Publication number
ES2967663T3
ES2967663T3 ES19759556T ES19759556T ES2967663T3 ES 2967663 T3 ES2967663 T3 ES 2967663T3 ES 19759556 T ES19759556 T ES 19759556T ES 19759556 T ES19759556 T ES 19759556T ES 2967663 T3 ES2967663 T3 ES 2967663T3
Authority
ES
Spain
Prior art keywords
motion information
parameter
distance
prediction
block
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
ES19759556T
Other languages
English (en)
Inventor
Semih Esenlik
Elena Alshina
Biao Wang
Anand Kotra
Han Gao
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Huawei Technologies Co Ltd
Original Assignee
Huawei Technologies Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Huawei Technologies Co Ltd filed Critical Huawei Technologies Co Ltd
Application granted granted Critical
Publication of ES2967663T3 publication Critical patent/ES2967663T3/es
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/169Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding
    • H04N19/17Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding the unit being an image region, e.g. an object
    • H04N19/176Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding the unit being an image region, e.g. an object the region being a block, e.g. a macroblock
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/134Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the element, parameter or criterion affecting or controlling the adaptive coding
    • H04N19/136Incoming video signal characteristics or properties
    • H04N19/137Motion inside a coding unit, e.g. average field, frame or block difference
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/50Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using predictive coding
    • H04N19/503Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using predictive coding involving temporal prediction
    • H04N19/51Motion estimation or motion compensation
    • H04N19/537Motion estimation other than block-based
    • H04N19/543Motion estimation other than block-based using regions
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/102Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the element, parameter or selection affected or controlled by the adaptive coding
    • H04N19/103Selection of coding mode or of prediction mode
    • H04N19/105Selection of the reference unit for prediction within a chosen coding or prediction mode, e.g. adaptive choice of position and number of pixels used for prediction
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/102Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the element, parameter or selection affected or controlled by the adaptive coding
    • H04N19/103Selection of coding mode or of prediction mode
    • H04N19/109Selection of coding mode or of prediction mode among a plurality of temporal predictive coding modes
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/102Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the element, parameter or selection affected or controlled by the adaptive coding
    • H04N19/119Adaptive subdivision aspects, e.g. subdivision of a picture into rectangular or non-rectangular coding blocks
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/102Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the element, parameter or selection affected or controlled by the adaptive coding
    • H04N19/12Selection from among a plurality of transforms or standards, e.g. selection between discrete cosine transform [DCT] and sub-band transform or selection between H.263 and H.264
    • H04N19/122Selection of transform size, e.g. 8x8 or 2x4x8 DCT; Selection of sub-band transforms of varying structure or type
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/102Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the element, parameter or selection affected or controlled by the adaptive coding
    • H04N19/132Sampling, masking or truncation of coding units, e.g. adaptive resampling, frame skipping, frame interpolation or high-frequency transform coefficient masking
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/134Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the element, parameter or criterion affecting or controlling the adaptive coding
    • H04N19/167Position within a video image, e.g. region of interest [ROI]
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/169Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding
    • H04N19/186Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding the unit being a colour or a chrominance component
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/20Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using video object coding
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/42Methods or arrangements for coding, decoding, compressing or decompressing digital video signals characterised by implementation details or hardware specially adapted for video compression or decompression, e.g. dedicated software implementation
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/42Methods or arrangements for coding, decoding, compressing or decompressing digital video signals characterised by implementation details or hardware specially adapted for video compression or decompression, e.g. dedicated software implementation
    • H04N19/423Methods or arrangements for coding, decoding, compressing or decompressing digital video signals characterised by implementation details or hardware specially adapted for video compression or decompression, e.g. dedicated software implementation characterised by memory arrangements
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/50Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using predictive coding
    • H04N19/503Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using predictive coding involving temporal prediction
    • H04N19/51Motion estimation or motion compensation
    • H04N19/513Processing of motion vectors
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/70Methods or arrangements for coding, decoding, compressing or decompressing digital video signals characterised by syntax aspects related to video coding, e.g. related to compression standards

Landscapes

  • Engineering & Computer Science (AREA)
  • Multimedia (AREA)
  • Signal Processing (AREA)
  • Physics & Mathematics (AREA)
  • Discrete Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Compression Or Coding Systems Of Tv Signals (AREA)
  • Image Analysis (AREA)

Abstract

Un método de almacenamiento de información de movimiento comprende: determinar una distancia entre una muestra establecida en el bloque actual y el límite común; y comparar la distancia con un umbral para determinar si la tercera información de movimiento se almacena para el conjunto de muestra, en donde la tercera información de movimiento se deriva de la primera información de movimiento y la segunda información de movimiento. (Traducción automática con Google Translate, sin valor legal)

Description

DESCRIPCIÓN
Método y aparato para el almacenamiento de información de movimiento
CAMPO DE LA INVENCIÓN
Las realizaciones de la presente solicitud se refieren en general al campo de la codificación de vídeo y, más concretamente, a la inter-predicción.
ANTECEDENTES DE LA INVENCIÓN
La codificación de vídeo (codificación y decodificación de vídeo) se utiliza en una amplia variedad de aplicaciones de vídeo digital, por ejemplo, la televisión digital de difusión, la transmisión de vídeo a través de Internet y las redes móviles, las aplicaciones conversacionales en tiempo real como el videochat, las videoconferencias, los discos DVD y Blu-ray, los sistemas de adquisición y edición de contenidos de vídeo y las videocámaras de aplicaciones de seguridad.
La cantidad de datos de vídeo necesaria para representar incluso un vídeo relativamente corto puede ser considerable, lo que puede dar lugar a dificultades cuando los datos deben transmitirse o comunicarse de otro modo a través de una red de comunicaciones con una capacidad de ancho de banda limitada. Por lo tanto, los datos de vídeo suelen comprimirse antes de comunicarse a través de las redes de telecomunicaciones de módem. Asimismo, el tamaño de un vídeo puede ser un problema cuando se almacena en un dispositivo de almacenamiento debido a que los recursos de memoria pueden ser limitados. Los dispositivos de compresión de vídeo suelen utilizar software y/o hardware en el origen para codificar los datos de vídeo antes de su transmisión o almacenamiento, disminuyendo así la cantidad de datos necesarios para representar las imágenes de vídeo digital. Después, los datos comprimidos son recibidos en el destino por un dispositivo de descompresión de vídeo que decodifica los datos de vídeo. Con unos recursos de red limitados y una demanda cada vez mayor de una mayor calidad de vídeo, es deseable mejorar las técnicas de compresión y descompresión que mejoran la relación de compresión sacrificando poco o incluso nada la calidad de la imagen.
Francois E ET.AL.: ''Description of Core Experiment 2: Flexible Motion Partitioning" propone la partición de movimiento geométrica (GEO) que permite particionar un bloque cuadrado en 2 regiones usando una línea recta. Se envía un vector de movimiento para cada región. La partición geométrica se define por el ángulo y la distancia de la línea de partición desde el origen o. Si un píxel es un píxel de límite, la compensación de movimiento se realiza utilizando una suma ponderada de las predicciones de movimiento de los dos vectores de movimiento.
Blaser M ET.AL.: "Description of SDR and 360° video coding technology proposal by RWTH Aachen University" (JVET-J0023) describe la compensación de movimiento para bloques GEO, donde los dos segmentos inter-predichos se fusionan con ponderación de muestras utilizando máscaras de ponderación. Para evitar bordes fuertes en el límite, las máscaras de ponderación definen gradientes lineales ortogonales a los límites del segmento. Dependiendo de la distancia de un píxel a la partición, se asigna un factor de ponderación para el píxel respectivo.
RESUMEN
Las realizaciones de la presente solicitud proporcionan aparatos y métodos de codificación y decodificación de acuerdo con las reivindicaciones independientes.
Los objetivos anteriores y otros se logran mediante la materia objeto de las reivindicaciones independientes. Otras formas de aplicación se desprenden de las reivindicaciones dependientes, la descripción y las figuras. La invención se define en las reivindicaciones independientes. Características adicionales de la invención se proporcionan en las reivindicaciones dependientes. En lo siguiente, partes de la descripción y dibujos que se refieren a realizaciones que no están cubiertas por las reivindicaciones no se presentan como realizaciones de la invención, sino como ejemplos útiles para entender la invención.
De acuerdo con un primer aspecto de la presente solicitud, se describe un método de almacenamiento de información de movimiento, un bloque actual que consiste en un primer subbloque y un segundo subbloque, el primer subbloque y el segundo subbloque están separados por un límite común, el primer subbloque corresponde a la primera información de movimiento y el segundo subbloque corresponde a la segunda información de movimiento, el método comprende: determinar una distancia entre un conjunto de muestras en el bloque actual y el límite común; y comparar la distancia con un umbral para determinar si se almacena una tercera información de movimiento en el conjunto de muestras, en donde la tercera información de movimiento se obtiene de la primera información de movimiento y la segunda información de movimiento.
En una aplicación factible, comparar la distancia con un umbral para determinar si la tercera información de movimiento se almacena en el conjunto de muestras, comprende: determinar que la tercera información de movimiento se almacena en el conjunto de muestras en el caso de que un valor absoluto de la distancia sea menor o igual que el umbral.
En una aplicación factible, en el caso de que el valor absoluto de la distancia sea mayor que el umbral, el método además comprende: determinar que la primera información de movimiento se almacene para el conjunto de muestras en el caso de que la distancia sea positiva; o, determinar que la segunda información de movimiento se almacene para el conjunto de muestras en el caso de que la distancia sea negativa.
En una aplicación factible, el umbral está predeterminado.
En una aplicación factible, el umbral se basa en una relación geométrica entre el límite común y una dirección horizontal o una dirección vertical.
En una aplicación factible, el umbral se basa en un ángulo entre una dirección perpendicular del límite común y la dirección horizontal o la dirección vertical.
En una aplicación factible, el umbral se basa en una anchura y/o una altura del bloque actual.
En una aplicación factible, el límite común se determina mediante un parámetro angular y un parámetro de distancia, antes de determinar la distancia entre el conjunto de muestras en el bloque actual y el límite común, el método además comprende: determinar el parámetro angular y el parámetro de distancia.
En una aplicación factible, en un decodificador, determinar el parámetro angular y el parámetro de distancia, comprende: analizar el parámetro angular y el parámetro de distancia a partir de un flujo de bits; o bien, analizar un indicador a partir del flujo de bits, y obtener el parámetro angular y el parámetro de distancia en base al indicador. En una aplicación factible, después de determinar el parámetro angular y el parámetro de distancia, el método además comprende: determinar un primer parámetro de cálculo en base al parámetro angular; calcular un parámetro angular temporal en base al parámetro angular; determinar un segundo parámetro de cálculo en base al parámetro angular temporal; y calcular un tercer parámetro de cálculo en base al parámetro angular y al parámetro de distancia.
En una aplicación factible, el primer parámetro de cálculo se determina al comprobar una tabla de búsqueda preestablecida de acuerdo con el parámetro angular y el segundo parámetro de cálculo se determina al comprobar la tabla de búsqueda de acuerdo con el parámetro angular temporal, y en donde el primer parámetro de cálculo y el segundo parámetro de cálculo son un valor de coseno y un valor de seno de un mismo ángulo, respectivamente. En una aplicación factible, la distancia se calcula de la siguiente manera:
distDesdeLínea = (x K) * P1 (y K) * P2 - P3
en donde P1, P2 y P3 son el primer parámetro de cálculo, el segundo parámetro de cálculo y el tercer parámetro de cálculo, respectivamente, distDesdeLínea representa la distancia, K es un número entero no negativo, x representa una coordenada horizontal de una posición objetivo en el conjunto de muestras, y representa una coordenada vertical de la posición objetivo en un sistema de coordenadas rectangular, donde una posición de la muestra superior izquierda del bloque actual se establece como origen de coordenadas, la dirección derecha se establece como la dirección horizontal positiva y la dirección inferior se establece como la dirección vertical positiva.
En una aplicación factible, K es igual a 1.
En una aplicación factible, la posición del objetivo está predeterminada en el conjunto de muestras.
En una aplicación factible, la posición predeterminada es una posición superior izquierda del conjunto de muestras o una posición central del conjunto de muestras.
En una aplicación factible, la precisión de muestra de la distancia es mayor que la muestra entera; en consecuencia, la distancia se calcula de la siguiente manera:
distDesdeLínea = ((x<<N) K) * P1 ((y<<N) K) * P2 - P3
donde 2N representa el recíproco de la precisión muestral de la distancia.
En una aplicación factible, N es igual a 1.
En una aplicación factible, el conjunto de muestras es un conjunto de muestras de luma del bloque actual.
En una aplicación factible, antes de determinar la distancia entre el conjunto de muestras del bloque actual y el límite común, el método además comprende: particionar el bloque actual en múltiples conjuntos de muestras, en donde cada uno de los múltiples conjuntos de muestras tiene un mismo tamaño que el conjunto de muestras; o establecer el bloque actual como el conjunto de muestras.
En una aplicación factible, el conjunto de muestras es una matriz de muestra de 4x4.
En una aplicación factible, cada uno de los múltiples conjuntos de muestras corresponde a cada unidad de almacenamiento de información de movimiento, la unidad de almacenamiento de información de movimiento se utiliza para almacenar una de la primera información de movimiento, la segunda información de movimiento y la tercera información de movimiento.
En una aplicación factible, el primer subbloque y el segundo subbloque son una división triangular, una división trapezoidal o una división rectangular asimétrica.
En una aplicación factible, la primera información de movimiento comprende información de movimiento basada en una primera lista de imágenes de referencia, la segunda información de movimiento comprende información de movimiento basada en una segunda lista de imágenes de referencia, y en donde la tercera información de movimiento comprende la primera información de movimiento y la segunda información de movimiento.
De acuerdo con un segundo aspecto de la presente solicitud, se describe un aparato para decodificar una transmisión de vídeo que incluye un procesador y una memoria. La memoria almacena instrucciones que hacen que el procesador realice el método de acuerdo con el primer aspecto.
De acuerdo con un tercer aspecto de la presente solicitud, se describe un aparato para codificar una transmisión de vídeo que incluye un procesador y una memoria. La memoria almacena instrucciones que hacen que el procesador realice el método de acuerdo con el primer aspecto.
De acuerdo con un cuarto aspecto, se propone un medio de almacenamiento legible por computadora que tiene almacenadas instrucciones que cuando se ejecutan hacen que uno o más procesadores configurados codifiquen datos de vídeo. Las instrucciones hacen que uno o más procesadores realicen un método de acuerdo con el primer aspecto. De acuerdo con un quinto aspecto, un programa informático que comprende un código de programa para realizar el método de acuerdo con el primer aspecto cuando se ejecuta en una computadora.
Los detalles de una o más realizaciones se exponen en los dibujos adjuntos y en la descripción a continuación. Otras características, objetos y ventajas se desprenden de la descripción, los dibujos y las reivindicaciones.
BREVE DESCRIPCIÓN DE LOS DIBUJOS
Las siguientes realizaciones de la solicitud se describen con más detalle y con referencia a las figuras y dibujos adjuntos.
La FIG. 1A es un diagrama de bloques que muestra un ejemplo de un sistema de codificación de vídeo configurado para implementar realizaciones de la solicitud.
La FIG. 1B es un diagrama de bloques que muestra otro ejemplo de un sistema de codificación de vídeo configurado para implementar realizaciones de la solicitud.
La FIG. 2 es un diagrama de bloques que muestra un ejemplo de un codificador de vídeo configurado para implementar realizaciones de la solicitud.
La FIG. 3 es un diagrama de bloques que muestra una estructura ejemplar de un decodificador de vídeo configurado para implementar realizaciones de la solicitud.
LA FIG. 4 es un diagrama de bloques que ilustra un ejemplo de un aparato de codificación o un aparato de decodificación.
LA FIG. 5 es un diagrama de bloques que ilustra otro ejemplo de un aparato de codificación o un aparato de decodificación.
LA FIG. 6 es un diagrama que muestra un ejemplo de las posiciones del candidato de fusión espacial.
La FIG. 7 es un diagrama que muestra un ejemplo de pares de candidatos considerados para la comprobación de la redundancia de los candidatos de fusión espacial.
La FIG. 8 es un diagrama que muestra un ejemplo del cambio de escala del vector de movimiento para el candidato de fusión temporal.
La FIG. 9 es un diagrama que muestra un ejemplo de almacenamiento de vectores de movimiento para un bloque de predicción de muestras de luma de tamaño 8x8.
La FIG. 10 es un diagrama que muestra un ejemplo de inter-predicción basada en un particionamiento de triángulo. La FIG. 11 es un diagrama que muestra un ejemplo de selección de MV de uni-predicción para el modo de particionamiento de triángulo.
La FIG. 12 es un diagrama que muestra un ejemplo de los pesos utilizados en el proceso de combinación.
La FIG. 13 es un diagrama que muestra un ejemplo de almacenamiento de vectores de movimiento para un modo de particionamiento de triángulo.
La FIG. 14 es un diagrama que muestra un ejemplo de particionamiento geométrico diferente.
LA FIG. 15 es un diagrama que muestra un ejemplo de parámetros de particionamiento GEO.
La FIG. 16 es un diagrama que muestra un ejemplo de operación de combinación.
La FIG. 17 es un diagrama que muestra un ejemplo de tabla de búsqueda para la operación de combinación.
La FIG. 18 es un diagrama que muestra un ejemplo de almacenamiento de movimiento de 4x4 con posición entera y posición de medio píxel.
La FIG. 19 es un diagrama que muestra un ejemplo de un método de almacenamiento de movimiento.
La FIG. 20 es un diagrama de bloques que ilustra un ejemplo de un método de almacenamiento de información de movimiento.
La FIG. 21 es un diagrama de bloques que ilustra un ejemplo de un aparato de almacenamiento de información de movimiento.
La FIG. 22 es un diagrama de bloques que muestra un ejemplo de estructura de un sistema de suministro de contenidos 3100 que realiza un servicio de suministro de contenidos.
La FIG. 23 es un diagrama de bloques que muestra la estructura de un ejemplo de un dispositivo terminal.
A continuación, los signos de referencia idénticos se refieren a características idénticas o al menos funcionalmente equivalentes, si no se especifica explícitamente lo contrario.
DESCRIPCIÓN DETALLADA DE LAS REALIZACIONES
En la siguiente descripción, se hace referencia a las figuras adjuntas, que forman parte de la descripción, y que muestran, a modo de ilustración, aspectos específicos de las realizaciones de la solicitud o aspectos específicos en los que pueden utilizarse las realizaciones de la presente solicitud. Se entiende que las realizaciones de la solicitud se pueden utilizar en otros aspectos y comprender cambios estructurales o lógicos que no se representan en las figuras. Por lo tanto, la siguiente descripción detallada no debe considerarse en un sentido limitante y el alcance de la presente solicitud se define por las reivindicaciones adjuntas.
Por ejemplo, se entiende que una descripción en relación con un método descrito también se puede considerar válida para un dispositivo o sistema correspondiente configurado para realizar el método y viceversa. Por ejemplo, si se describen uno o una pluralidad de pasos específicos del método, un dispositivo correspondiente puede incluir una unidad o pluralidad de unidades, por ejemplo, unidades funcionales, para realizar un paso o una pluralidad de pasos del método descrito (por ejemplo, una unidad que realice un paso o una pluralidad de pasos, o una pluralidad de unidades que realicen cada paso o la pluralidad de pasos), incluso si tales una o más unidades no se describen o ilustran explícitamente en las figuras. Por otra parte, por ejemplo, si se describe un aparato específico en base a una unidad o pluralidad de unidades, por ejemplo, unidades funcionales, un método correspondiente puede incluir un paso para realizar la funcionalidad de la unidad o pluralidad de unidades (por ejemplo, un paso que realiza la funcionalidad de la unidad o pluralidad de unidades, o una pluralidad de pasos que realizan cada uno la funcionalidad de una unidad o la pluralidad de unidades), incluso si tal uno o pluralidad de pasos no se describen o ilustran explícitamente en las figuras. Además, se entiende que las características de las diversas realizaciones y/o aspectos ejemplares descritos en el presente documento pueden combinarse entre sí, a menos que se indique específicamente lo contrario.
La codificación de vídeo suele referirse al procesamiento de una secuencia de imágenes, que forman el vídeo o la secuencia de vídeo. En lugar del término “imagen” se puede utilizar el término “fotograma” como sinónimos en el campo de la codificación de vídeo. La codificación de vídeo (o la codificación en general) comprende dos partes: la codificación de vídeo y la decodificación de vídeo. La codificación de vídeo se lleva a cabo en el lado del origen, y suele incluir el procesamiento (por ejemplo, mediante compresión) de las imágenes de vídeo originales para reducir la cantidad de datos necesarios para representar las imágenes de vídeo (para un almacenamiento y/o transmisiones más eficientes). La decodificación de vídeo se realiza en el lado de destino y suele comprender el procesamiento inverso al del codificador para reconstruir las imágenes de vídeo. Se entenderá que las realizaciones que se refieren a la “codificación” de las imágenes de vídeo (o de las imágenes en general) se relacionan a la “codificación” o “decodificación” de las imágenes de vídeo o de las respectivas secuencias de vídeo. La combinación de la parte de codificación y la parte de decodificación también se denomina CÓDEC (codificación y decodificación, del inglés Coding and Decoding).
En el caso de la codificación de vídeo sin pérdidas, las imágenes de vídeo originales pueden reconstruirse, es decir, las imágenes de vídeo reconstruidas tienen la misma calidad que las imágenes de vídeo originales (suponiendo que no haya pérdidas de transmisión ni otras pérdidas de datos durante el almacenamiento o la transmisión). En el caso de la codificación de vídeo con pérdidas, se realiza una compresión adicional, por ejemplo, mediante la cuantificación, para reducir la cantidad de datos que representan las imágenes de vídeo, que no se pueden reconstruir completamente en el decodificador, es decir, la calidad de las imágenes de vídeo reconstruidas es inferior o peor en comparación con la calidad de las imágenes de vídeo originales.
Varios estándares de codificación de vídeo pertenecen al grupo de los “códecs de vídeo híbridos con pérdidas” (es decir, combinan la predicción espacial y temporal en el dominio de la muestra y la codificación por transformación 2D para aplicar la cuantificación en el dominio de la transformada). Cada imagen de una secuencia de vídeo se suele particionar en un conjunto de bloques no superpuestos y la codificación se suele realizar a nivel de bloque. En otras palabras, en el codificador normalmente el vídeo se procesa, es decir, se codifica, a nivel de bloque (bloque de vídeo), por ejemplo, utilizando la predicción espacial (intra-imagen) y/o temporal (inter-imagen) para generar un bloque de predicción, restando el bloque de predicción del bloque actual (bloque actualmente procesado/por procesar) para obtener un bloque residual, transformando el bloque residual y cuantificando el bloque residual en el dominio de la transformada para reducir la cantidad de datos que se van a transmitir (compresión), mientras que en el decodificador se aplica al bloque codificado o comprimido el procesamiento inverso en comparación al codificador para reconstruir el bloque actual para su representación. Además, el codificador duplica el bucle de procesamiento del decodificador de manera que ambos generen predicciones idénticas (por ejemplo, intra e inter-predicciones) y/o reconstrucciones para el procesamiento, es decir, la codificación, de los bloques posteriores.
En las siguientes realizaciones de un sistema de codificación de vídeo 10, se describen un codificador de vídeo 20 y un decodificador de vídeo 30 en base a las Figs. 1 a 3.
La Fig. 1A es un diagrama de bloques esquemático que ilustra un sistema de codificación 10 ejemplar, por ejemplo, un sistema de codificación de vídeo 10 (o sistema de codificación corto 10) que puede utilizar técnicas de la presente solicitud. El codificador de vídeo (o codificador corto 20) y el decodificador de vídeo (o decodificador corto 30) del sistema de codificación de vídeo 10 representan ejemplos de dispositivos que se pueden configurar para realizar técnicas de acuerdo con varios ejemplos descritos en la presente solicitud.
Tal como se muestra en la FIG. 1A, el sistema de codificación 10 comprende un dispositivo de origen 12 configurado para proporcionar datos de imagen codificados 21, por ejemplo, a un dispositivo de destino 14 para decodificar los datos de imagen codificados 13.
El dispositivo de origen 12 comprende un codificador 20, y además puede comprender, es decir, opcionalmente, un origen de imágenes 16, un preprocesador (o unidad de preprocesamiento) 18, por ejemplo, un preprocesador de imágenes 18 y una interfaz de comunicación o unidad de comunicación 22.
El origen de imágenes 16 puede comprender o ser cualquier tipo de dispositivo de captura de imágenes, por ejemplo, una cámara para capturar una imagen en entorno real, y/o cualquier tipo de dispositivo de generación de imágenes, por ejemplo, un procesador de gráficos por computadora para generar una imagen animada por computadora, o cualquier otro tipo de dispositivo para obtener y/o proporcionar una imagen en entorno real, una imagen generada por computadora (por ejemplo, un contenido de pantalla, una imagen de realidad virtual (VR)) y/o cualquier combinación de las mismas (por ejemplo, una imagen de realidad aumentada (AR)). El origen de imágenes puede ser cualquier tipo de memoria o almacenamiento que almacene cualquiera de las imágenes mencionadas.
A diferencia del preprocesador 18 y del procesamiento realizado por la unidad de preprocesamiento 18, la imagen o los datos de la imagen 17 también se pueden denominar imagen si procesar o datos de la imagen sin procesar 17.
El preprocesador 18 está configurado para recibir los datos de la imagen 17 (sin procesar) y realizar un preprocesamiento de los datos de la imagen 17 para obtener una imagen preprocesada 19 o datos de la imagen preprocesados 19. El preprocesamiento realizado por el preprocesador 18 puede, por ejemplo, comprender recorte, conversión del formato de color (por ejemplo, de RGB a YCbCr), corrección del color o la eliminación del ruido. Se puede entender que la unidad de preprocesamiento 18 puede ser un componente opcional.
El codificador de vídeo 20 está configurado para recibir los datos de imagen preprocesados 19 y proporcionar datos de imagen codificados 21 (más adelante se describirán más detalles, por ejemplo, en base a la Fig. 2).
La interfaz de comunicación 22 del dispositivo de origen 12 se puede configurar para recibir los datos de imagen codificados 21 y para transmitir los datos de imagen codificados 21 (o cualquier otra versión procesada de los mismos) a través del canal de comunicación 13 a otro dispositivo, por ejemplo, el dispositivo de destino 14 o cualquier otro dispositivo, para su almacenamiento o reconstrucción directa.
El dispositivo de destino 14 comprende un decodificador 30 (por ejemplo, un decodificador de vídeo 30), y puede comprender además, es decir, opcionalmente, una interfaz de comunicación o unidad de comunicación 28, un postprocesador 32 (o unidad de postprocesamiento 32) y un dispositivo de visualización 34.
La interfaz de comunicación 28 del dispositivo de destino 14 está configurada para recibir los datos de imagen codificados 21 (o cualquier otra versión procesada de los mismos), por ejemplo, directamente desde el dispositivo de origen 12 o desde cualquier otro origen, por ejemplo, un dispositivo de almacenamiento, por ejemplo, un dispositivo de almacenamiento de datos de imagen codificados, y proporcionar los datos de imagen codificados 21 al decodificador 30.
La interfaz de comunicación 22 y la interfaz de comunicación 28 se pueden configurar para transmitir o recibir los datos de imagen codificados 21 o los datos codificados 13 a través de un enlace de comunicación directo entre el dispositivo de origen 12 y el dispositivo de destino 14, por ejemplo, una conexión directa por cable o inalámbrica, o a través de cualquier tipo de red, por ejemplo, una red por cable o inalámbrica o cualquier combinación de ellas, o cualquier tipo de red privada y pública o cualquier tipo de combinación de ellas.
La interfaz de comunicación 22 se puede, por ejemplo, configurar para agrupar los datos de imagen codificados 21 en un formato adecuado, por ejemplo, paquetes, y/o procesar los datos de imagen codificados utilizando cualquier tipo de codificación o procesamiento de transmisión para la transmisión a través de un enlace o red de comunicación.
La interfaz de comunicación 28, que forma la contraparte de la interfaz de comunicación 22, se puede, por ejemplo, configurar para recibir los datos transmitidos y procesar los datos de transmisión utilizando cualquier tipo de decodificación o procesamiento de transmisión correspondiente y/o desagrupar para obtener los datos de imagen codificados 21.
Tanto la interfaz de comunicación 22 como la interfaz de comunicación 28 se pueden configurar como interfaces de comunicación unidireccionales, tal como se indica en la flecha del canal de comunicación 13 de la Fig. 1A que apunta desde el dispositivo de origen 12 al dispositivo de destino 14, o como interfaces de comunicación bidireccionales, y se pueden configurar, por ejemplo, para enviar y recibir mensajes, por ejemplo, para establecer una conexión, para acusar recibo e intercambiar cualquier otra información relacionada con el enlace de comunicación y/o la transmisión de datos, por ejemplo, la transmisión de datos de imágenes codificadas.
El decodificador 30 está configurado para recibir los datos de imagen codificados 21 y proporcionar datos de imagen decodificados 31 o una imagen decodificada 31 (más adelante se describirán más detalles, por ejemplo, en base a la Fig. 3 o la Fig. 5).
El postprocesador 32 del dispositivo de destino 14 está configurado para procesar posteriormente los datos de imagen decodificada 31 (también denominados datos de imagen reconstruida), por ejemplo, la imagen decodificada 31, para obtener datos de imagen postprocesada 33, por ejemplo, una imagen postprocesada 33. El postprocesamiento realizado por la unidad de postprocesamiento 32 puede comprender, por ejemplo, la conversión del formato de color (por ejemplo, de YCbCr a RGB), la corrección del color, el recorte o el remuestreo, o cualquier otro procesamiento, por ejemplo, para preparar los datos de imagen decodificada 31 para su visualización, por ejemplo, mediante el dispositivo de visualización 34.
El dispositivo de visualización 34 del dispositivo de destino 14 está configurado para recibir los datos de la imagen postprocesada 33 para mostrar la imagen, por ejemplo, a un usuario o espectador. El dispositivo de visualización 34 puede ser o comprender cualquier tipo de pantalla para representar la imagen reconstruida, por ejemplo, una pantalla o monitor integrado o externo. Las pantallas pueden ser, por ejemplo, pantallas de cristal líquido (LCD, del inglés liquid crystal displays), pantallas de diodos orgánicos emisores de luz (OLED, del inglés organic light emitting diodes), pantallas de plasma, proyectores, pantallas de micro LED, cristal líquido sobre silicio (LCoS, del inglés liquid crystal on silicon), procesador digital de luz (DLP, del inglés digital light processor) o cualquier otro tipo de pantalla.
Aunque la Fig. 1A representa el dispositivo de origen 12 y el dispositivo de destino 14 como dispositivos individuales, las realizaciones de los dispositivos también pueden comprender ambas funcionalidades, el dispositivo de origen 12 o la funcionalidad correspondiente y el dispositivo de destino 14 o la funcionalidad correspondiente. En tales realizaciones, el dispositivo de origen 12 o la funcionalidad correspondiente y el dispositivo de destino 14 o la funcionalidad correspondiente se pueden implementar con el mismo hardware y/o software o mediante hardware y/o software separados o cualquier combinación de los mismos.
Como será evidente para la persona experta en base a la descripción, la existencia y la división (exacta) de las funcionalidades de las diferentes unidades o funcionalidades dentro del dispositivo de origen 12 y/o el dispositivo de destino 14, tal como se muestra en la Fig. 1A, puede variar dependiendo del dispositivo y la aplicación reales.
El codificador 20 (por ejemplo, un codificador de vídeo 20) o el decodificador 30 (por ejemplo, un decodificador de vídeo 30) o ambos, el codificador 20 y el decodificador 30, se pueden implementar a través de circuitos de procesamiento, tal como se muestra en la Fig. 1B, tales como uno o más microprocesadores, procesadores de señales digitales (DSP, del inglés digital signal processors), circuitos integrados de aplicación específica (ASIC, del inglés application-specific integrated circuits), matrices de puertas programables en campo (FPGA, del inglés fieldprogrammable gate arrays), lógica discreta, hardware, codificación de vídeo dedicada o cualquier combinación de los mismos. El codificador 20 se puede implementar a través de los circuitos de procesamiento 46 para incorporar los diversos módulos tal como se describe con respecto al codificador 20 de la Fig. 2 y/o cualquier otro sistema o subsistema de codificación descrito en el presente documento. El decodificador 30 se puede implementar a través de la circuitería de procesamiento 46 para incorporar los diversos módulos tal como se describe con respecto al decodificador 30 de la Fig. 3 y/o cualquier otro sistema o subsistema decodificador descrito en el presente documento. La circuitería de procesamiento se puede configurar para realizar las diversas operaciones como se describe más adelante. Como se muestra en la Fig. 5, si las técnicas se implementan parcialmente en software, un dispositivo puede almacenar instrucciones para el software en un medio de almacenamiento legible por computadora no transitorio adecuado y puede ejecutar las instrucciones en hardware utilizando uno o más procesadores para realizar las técnicas de esta descripción. Tanto el codificador de vídeo 20 como el decodificador de vídeo 30 se pueden integrar como parte de un codificador/decodificador combinado (CÓDEC) en un único dispositivo, por ejemplo, tal como se muestra en la Fig. 1B.
El dispositivo de origen 12 y el dispositivo de destino 14 pueden ser cualquiera de una amplia variedad de dispositivos, incluyendo cualquier tipo de dispositivos manuales o fijos, por ejemplo, computadoras portátiles, teléfonos móviles, teléfonos inteligentes, tabletas, cámaras, computadoras de escritorio, decodificadores, televisores, dispositivos de visualización, reproductores de medios digitales, consolas de videojuegos, dispositivos de transmisión de vídeo (como servidores de servicios de contenidos o servidores de entrega de contenidos), dispositivos receptores de emisiones, dispositivos transmisores de emisiones, o similares, y pueden utilizar cualquier tipo de sistema operativo o ninguno. En algunos casos, el dispositivo de origen 12 y el dispositivo de destino 14 pueden estar equipados para la comunicación inalámbrica. Por lo tanto, el dispositivo de origen 12 y el dispositivo de destino 14 pueden ser dispositivos de comunicación inalámbrica.
En algunos casos, el sistema de codificación de vídeo 10 ilustrado en la Fig. 1A es simplemente un ejemplo y las técnicas de la presente solicitud pueden aplicarse a configuraciones de codificación de vídeo (por ejemplo, codificación de vídeo o decodificación de vídeo) que no incluyen necesariamente una comunicación de datos entre los dispositivos de codificación y decodificación. En otros ejemplos, los datos se recuperan de una memoria local, se transmiten a través de una red o similares. Un dispositivo de codificación de vídeo puede codificar y almacenar datos en la memoria, y/o un dispositivo de decodificación de vídeo puede recuperar y decodificar datos de la memoria. En algunos ejemplos, los dispositivos que no se comunican entre sí realizan la codificación y decodificación, que simplemente codifican los datos en la memoria y/o recuperan y decodifican los datos de la memoria.
Para facilitar la descripción, las realizaciones de la solicitud se describen en el presente documento, por ejemplo, haciendo referencia a la codificación de vídeo de alta eficiencia (HEVC, del inglés High-Efficiency Video Coding) o al software de referencia de la codificación de vídeo versátil (VVC, del inglés Versatile Video Coding), el estándar de codificación de vídeo de próxima generación desarrollado por Joint Collaboration Team on Video Coding(Equipo de Colaboración Conjunta sobre Codificación de Vídeo)(JCT-VC) del ITU-T Video Coding Experts Group(Grupo de Expertos en Codificación de Vídeo del UIT-T)(VCEG) y el ISO/IEC Motion Picture Experts Group(Grupo de Expertos en Imágenes en Movimiento)(MPEG) de la ISO/CEI. Un experto en la técnica comprenderá que las realizaciones de la solicitud no se limitan a HEVC o VVC.
Codificador y método de codificación
La Fig. 2 muestra un diagrama de bloques esquemático de un codificador de vídeo 20 ejemplar que está configurado para implementar las técnicas de la presente solicitud. En el ejemplo de la Fig. 2, el codificador de vídeo 20 comprende una entrada 201 (o interfaz de entrada 201), una unidad de cálculo residual 204, una unidad de procesamiento de transformada 206, una unidad de cuantificación 208, una unidad de cuantificación inversa 210, y una unidad de procesamiento de transformada inversa 212, una unidad de reconstrucción 214, una unidad de filtro de bucle 220, una memoria intermedia de imagen decodificada (DPB, del inglés decoded picture buffer) 230, una unidad de selección de modo 260, una unidad de codificación de entropía 270 y una salida 272 (o interfaz de salida 272). La unidad de selección de modo 260 puede incluir una unidad de inter-predicción 244, una unidad de intra-predicción 254 y una unidad de particionamiento 262. La unidad de inter-predicción 244 puede incluir una unidad de estimación de movimiento y una unidad de compensación de movimiento (no mostrada). Un codificador de vídeo 20 tal como se muestra en la Fig. 2 también se puede denominar codificador de vídeo híbrido o codificador de vídeo de acuerdo con un códec de vídeo híbrido.
La unidad de cálculo residual 204, la unidad de procesamiento de transformada 206, la unidad de cuantificación 208, la unidad de selección de modo 260 se pueden referir como que forman una ruta de señal directa del codificador 20, mientras que la unidad de cuantificación inversa 210, la unidad de procesamiento de transformada inversa 212, la unidad de reconstrucción 214, la memoria intermedia 216, el filtro de bucle 220, la memoria intermedia de imágenes decodificadas (DPB) 230, la unidad de inter-predicción 244 y la unidad de intra-predicción 254 se pueden referir como que forman una trayectoria de señal de retorno del codificador de vídeo 20, en la que la trayectoria de señal de retorno del codificador de vídeo 20 corresponde a la trayectoria de señal del decodificador (consultar el decodificador de vídeo 30 en la Fig. 3). La unidad de cuantificación inversa 210, la unidad de procesamiento de transformada inversa 212, la unidad de reconstrucción 214, el filtro de bucle 220, la memoria intermedia de imágenes decodificadas (DPB) 230, la unidad de inter-predicción 244 y la unidad de intra-predicción 254 también se pueden referir como que forman el “decodificador incorporado” del codificador de vídeo 20.
Imágenes y particionamiento de imágenes (imágenes y bloques)
El codificador 20 puede estar configurado para recibir, por ejemplo, a través de la entrada 201, una imagen 17 (o datos de imagen 17), por ejemplo, la imagen de una secuencia de imágenes que forman un vídeo o una secuencia de vídeo. La imagen o los datos de imagen recibidos también pueden ser una imagen preprocesada 19 (o datos de imagen preprocesados 19). En aras de la simplicidad, la siguiente descripción se refiere a la imagen 17. La imagen 17 también se puede denominar imagen actual o imagen a codificar (en particular, en la codificación de vídeo para distinguir la imagen actual de otras imágenes, por ejemplo, las imágenes previamente codificadas y/o decodificadas de la misma secuencia de vídeo, es decir, la secuencia de vídeo que también comprende la imagen actual).
Una imagen (digital) es o puede considerarse como una matriz bidimensional de muestras con valores de intensidad. Una muestra de la matriz también puede denominarse píxel (forma abreviada de elemento de imagen) o pel. El número de muestras en dirección horizontal y vertical (o eje) de la matriz o imagen define el tamaño y/o la resolución de la imagen. Para la representación del color, normalmente se emplean tres componentes de color, es decir, la imagen puede representarse o incluir tres matrices de muestras. En el formato o espacio de color RBG, una imagen comprende una matriz de muestras correspondiente al rojo, al verde y al azul. Sin embargo, en la codificación de vídeo, cada píxel se representa normalmente en un formato o espacio de color de luminancia y crominancia, por ejemplo, YCbCr, que comprende un componente de luminancia indicado por Y (a veces también se utiliza L en su lugar) y dos componentes de crominancia indicados por Cb y Cr. El componente de luminancia (o luma de manera corta) Y representa el brillo o la intensidad del nivel de gris (por ejemplo, como en una imagen en escala de grises), mientras que los dos componentes de crominancia (o croma de manera corta) Cb y Cr representan los componentes de cromaticidad o información de color. Por consiguiente, una imagen en formato YCbCr comprende una matriz de muestras de luminancia de valores de muestra de luminancia (Y) y dos matrices de muestras de crominancia de valores de crominancia (Cb y Cr). Las imágenes en formato RGB se pueden convertir o transformarse en formato YCbCr y viceversa, proceso que también se conoce como transformación o conversión del color. Si una imagen es monocromática, la imagen puede comprender sólo una matriz de muestras de luminancia. En consecuencia, una imagen puede ser, por ejemplo, una matriz de muestras de luminancia en formato monocromo o una matriz de muestras de luminancia y dos matrices correspondientes de muestras de croma en formato de color 4:2:0, 4:2:2 y 4:4:4.
Las realizaciones del codificador de vídeo 20 pueden comprender una unidad de particionamiento de imágenes (no mostrada en la Fig. 2) configurada para particionar la imagen 17 en una pluralidad de bloques de imágenes 203 (normalmente no superpuestos). Estos bloques también se pueden denominar bloques raíz, macrobloques (H.264/AVC) o bloques de árbol de codificación (CTB) o unidades de árbol de codificación (CTU) (H.265/HEVC y VVC). La unidad de particionamiento de imágenes se puede configurar para utilizar el mismo tamaño de bloque para todas las imágenes de una secuencia de vídeo y la cuadrícula correspondiente que define el tamaño de bloque, o para cambiar el tamaño de bloque entre imágenes o subconjuntos o grupos de imágenes y particionar cada imagen en los bloques correspondientes.
En otras realizaciones, el codificador de vídeo se puede configurar para recibir directamente un bloque 203 de la imagen 17, por ejemplo, uno, varios o todos los bloques que forman la imagen 17. El bloque de imagen 203 también se puede denominar bloque de imagen actual o bloque de imagen a codificar.
Al igual que la imagen 17, el bloque de imágenes 203 también es o puede considerarse como una matriz bidimensional de muestras con valores de intensidad (valores de muestra), aunque de menor dimensión que la imagen 17. En otras palabras, el bloque 203 puede comprender, por ejemplo, una matriz de muestras (por ejemplo, una matriz de luma en el caso de una imagen monocromática 17, o una matriz de luma o croma en el caso de una imagen a color) o tres matrices de muestras (por ejemplo, una matriz de luma y dos matrices de croma en el caso de una imagen a color 17) o cualquier otro número y/o tipo de matrices en función del formato de color aplicado. El número de muestras en dirección horizontal y vertical (o eje) del bloque 203 define el tamaño del bloque 203. En consecuencia, un bloque puede ser, por ejemplo, una matriz MxN (M columnas por N filas) de muestras o una matriz MxN de coeficientes de transformada.
Las realizaciones del codificador de vídeo 20 tal como se muestra en la Fig. 2 se pueden configurar para codificar la imagen 17 bloque a bloque, por ejemplo, la codificación y predicción se realiza por bloque 203.
Las realizaciones del codificador de vídeo 20 tal como se muestra en la Fig. 2 se pueden configurar además para particionar y/o codificar la imagen mediante el uso de segmentos (también denominados segmentos de vídeo), en los que una imagen puede particionarse o codificarse utilizando uno o más segmentos (normalmente no superpuestos), y cada segmento puede comprender uno o más bloques (por ejemplo, CTU) o uno o más grupos de bloques (por ejemplo, mosaicos (H.265/HEVC y VVC) o ladrillos (v Vc )).
Las realizaciones del codificador de vídeo 20 tal como se muestra en la Fig. 2, se puede configurar además para particionar y/o codificar la imagen mediante el uso de grupos de segmentos/mosaicos (también denominados segmentos de vídeo) y/o mosaicos (también denominados mosaicos de vídeo), en los que una imagen puede particionarse o codificarse mediante uno o más grupos de segmentos/mosaicos (típicamente no superpuestos), y cada grupo de segmentos/mosaicos puede comprender, por ejemplo, uno o más bloques (por ejemplo, CTU) o uno o más mosaicos, en donde cada mosaico, por ejemplo, puede tener forma rectangular y puede comprender uno o más bloques (por ejemplo, CTU), por ejemplo, bloques completos o fraccionados.
Cálculo residual
La unidad de cálculo residual 204 se puede configurar para calcular un bloque residual 205 (también denominado residual 205) en base al bloque de imagen 203 y en un bloque de predicción 265 (más adelante se proporcionan más detalles sobre el bloque de predicción 265), por ejemplo, restando los valores de muestra del bloque de predicción 265 de los valores de muestra del bloque de imagen 203, muestra a muestra (píxel a píxel) para obtener el bloque residual 205 en el dominio de la muestra.
Transformada
La unidad de procesamiento de transformada 206 se puede configurar para aplicar una transformada, por ejemplo, una transformada coseno discreta (DCT, del inglés discrete cosine transform) o una transformada seno discreta (DST, del inglés discrete sine transform), sobre los valores de muestra del bloque residual 205 para obtener los coeficientes de transformada 207 en un dominio de la transformada. Los coeficientes de transformada 207 también se pueden denominar coeficientes residuales de transformada y representan el bloque residual 205 en el dominio de la transformada.
La unidad de procesamiento de transformada 206 se puede configurar para aplicar aproximaciones enteras de DCT/DST, como las transformadas especificadas para H.265/HEVe. En comparación con una transformada DCT ortogonal, dichas aproximaciones enteras se escalan típicamente por un determinado factor. Para preservar la norma del bloque residual que es procesado por las transformadas directa e inversa, se aplican factores de escala adicionales como parte del proceso de transformada. Los factores de escala se eligen normalmente en función de ciertas restricciones, como que los factores de escala sean una potencia de dos para las operaciones de desplazamiento, la profundidad de bits de los coeficientes de transformada, el equilibrio entre la precisión y los costos de implementación, etc. Los factores de escala específicos se especifican, por ejemplo, para la transformada inversa, por ejemplo por la unidad de procesamiento de transformada inversa 212 (y la correspondiente transformada inversa, por ejemplo por la unidad de procesamiento de transformada inversa 312 en el decodificador de vídeo 30) y se pueden especificar en consecuencia los correspondientes factores de escala para la transformada directa, por ejemplo, por la unidad de procesamiento de transformada 206, en un codificador 20.
Las realizaciones del codificador de vídeo 20 (respectivamente, la unidad de procesamiento de transformada 206) se puede configurar para emitir parámetros de transformada, por ejemplo, un tipo de transformada o transformadas, por ejemplo, directamente o codificadas o comprimidas a través de la unidad de codificación de entropía 270, de modo que, por ejemplo, el decodificador de vídeo 30 pueda recibir y utilizar los parámetros de transformada para la decodificación.
Cuantificación
La unidad de cuantificación 208 se puede configurar para cuantizar los coeficientes de transformada 207 para obtener coeficientes cuantificados 209, por ejemplo, aplicando cuantificación escalar o cuantificación vectorial. Los coeficientes cuantificados 209 también se pueden denominar coeficientes de transformada cuantificados 209 o coeficientes residuales cuantificados 209.
El proceso de cuantificación puede reducir la profundidad de bits asociada con algunos o todos los coeficientes de transformada 207. Por ejemplo, un coeficiente de transformada de n bits puede redondearse a un coeficiente de transformada de m bits durante la cuantificación, donde n es mayor que m. El grado de cuantificación se puede modificar al ajustar un parámetro de cuantificación (QP). Por ejemplo, para la cuantificación escalar, se pueden aplicar diferentes escalas para lograr una cuantificación más fina o más gruesa. Los tamaños de paso de cuantificación más pequeños corresponden a una cuantificación más fina, mientras que los tamaños de paso de cuantificación más grandes corresponden a una cuantificación más gruesa. El tamaño de paso de cuantificación aplicable puede indicarse mediante un parámetro de cuantificación (QP). El parámetro de cuantificación puede ser, por ejemplo, un índice de un conjunto predefinido de tamaños de paso de cuantificación aplicables. Por ejemplo, los parámetros de cuantificación pequeños pueden corresponder a una cuantificación fina (tamaños de paso de cuantificación pequeños) y los parámetros de cuantificación grandes pueden corresponder a una cuantificación gruesa (tamaños de paso de cuantificación grandes) o viceversa. La cuantificación puede incluir el particionamiento por un tamaño de paso de cuantificación y una correspondiente y/o la descuantificación inversa, por ejemplo, por la unidad de cuantificación inversa 210, puede incluir la multiplicación por el tamaño de paso de cuantificación. Las realizaciones de acuerdo con algunos estándares, por ejemplo, HEVC, pueden estar configuradas para utilizar un parámetro de cuantificación para determinar el tamaño del paso de cuantificación. Generalmente, el tamaño del paso de cuantificación se puede calcular en base a un parámetro de cuantificación utilizando una aproximación de punto fijo de una ecuación que incluye la división. Se pueden introducir factores de escala adicionales para la cuantificación y la descuantificación con el fin de restaurar la norma del bloque residual, que podría modificarse debido a la escala utilizada en la aproximación de punto fijo de la ecuación para el tamaño del paso de cuantificación y el parámetro de cuantificación. En un ejemplo de implementación, el escalado de la transformada inversa y la descuantificación podrían combinarse. Alternativamente, se pueden utilizar tablas de cuantificación personalizadas y señalizarlas desde un codificador a un decodificador, por ejemplo, en un flujo de bits. La cuantificación es una operación con pérdidas, en donde las pérdidas aumentan con el incremento del tamaño de los pasos de cuantificación.
Las realizaciones del codificador de vídeo 20 (respectivamente, la unidad de cuantificación 208) se pueden configurar para emitir parámetros de cuantificación (QP, del inglés quantization parameter), por ejemplo, directamente o codificados a través de la unidad de codificación de entropía 270, de modo que, por ejemplo, el decodificador de vídeo 30 pueda recibir y aplicar los parámetros de cuantificación para la decodificación.
Cuantificación inversa
La unidad de cuantificación inversa 210 está configurada para aplicar la cuantificación inversa de la unidad de cuantificación 208 sobre los coeficientes cuantificados para obtener los coeficientes 211 descuantificados, por ejemplo, aplicando la inversa del esquema de cuantificación aplicado por la unidad de cuantificación 208 en base al mismo tamaño de paso de cuantificación o utilizándolo como la unidad de cuantificación 208. Los coeficientes descuantificados 211 también se pueden denominar coeficientes residuales descuantificados 211 y corresponden a los coeficientes de transformada 207, aunque normalmente no son idénticos a los coeficientes de transformada debido a la pérdida por cuantificación.
Transformada inversa
La unidad de procesamiento de transformada inversa 212 está configurada para aplicar la transformada inversa de la transformada aplicada por la unidad de procesamiento de transformada 206, por ejemplo, una transformada coseno discreta inversa (DCT) o una transformada seno discreta inversa (DST) u otras transformadas inversas, para obtener un bloque residual reconstruido 213 (o los correspondientes coeficientes descuantificados 213) en el dominio de la muestra. El bloque residual reconstruido 213 también se puede denominar bloque de transformada 213.
Reconstrucción
La unidad de reconstrucción 214 (por ejemplo, el sumador 214) está configurada para sumar el bloque de transformada 213 (es decir, el bloque residual reconstruido 213) al bloque de predicción 265 para obtener un bloque reconstruido 215 en el dominio de la muestra, por ejemplo, sumando muestra a muestra los valores de muestra del bloque residual reconstruido 213 y los valores de muestra del bloque de predicción 265.
Filtrado
La unidad de filtro de bucle 220 (o “filtro de bucle” 220 de manera más corta), se configura para filtrar el bloque reconstruido 215 para obtener un bloque filtrado 221, o en general, para filtrar muestras reconstruidas para obtener valores de muestra filtrados. La unidad de filtro de bucle se configura, por ejemplo, para suavizar las transiciones de píxeles, o para mejorar de otro modo la calidad del vídeo. La unidad de filtro de bucle 220 puede comprender uno o más filtros de bucle, como un filtro de desbloqueo, un filtro de compensación adaptable a la muestra (SAO, del inglés sample-adaptive offset) o uno o más filtros, por ejemplo, un filtro de bucle adaptable (ALF, del inglés adaptive loop filter), un filtro de supresión de ruido (NSF, del inglés noise suppression filter) o cualquier combinación de los mismos. En un ejemplo, la unidad de filtro de bucle 220 puede comprender un filtro de desbloqueo, un filtro SAO y un filtro ALF. El orden del proceso de filtrado puede ser el filtro de desbloqueo, el SAO y el ALF. En otro ejemplo, se añade un proceso denominado mapeo de luma con escalado de croma (LMCS, del inglés luma mapping with chroma scaling) (es decir, el conformador adaptativo en bucle). Este proceso se realiza antes del desbloqueo. En otro ejemplo, el proceso de filtro de desbloqueo se puede aplicar también a los bordes internos de los subbloques, por ejemplo, los bordes de los subbloques afines, los bordes de los subbloques ATMVP, los bordes de la transformada de subbloques (SBT, del inglés sub-block transform) y los bordes de la intra-subpartición (ISP, del inglés intra subpartition). Aunque la unidad de filtro de bucle 220 se muestra en la Fig. 2 como un filtro dentro del bucle, en otras configuraciones, la unidad de filtro de bucle 220 se puede implementar como un filtro posterior al bucle. El bloque filtrado 221 también se puede denominar bloque reconstruido filtrado 221.
Las realizaciones del codificador de vídeo 20 (respectivamente la unidad de filtro de bucle 220) pueden estar configuradas para dar salida a los parámetros del filtro de bucle (como los parámetros del filtro SAO o los parámetros del filtro ALF o los parámetros LMCS), por ejemplo, directamente o codificados a través de la unidad de codificación de entropía 270, de modo que, por ejemplo, un decodificador 30 pueda recibir y aplicar los mismos parámetros del filtro de bucle o los respectivos filtros de bucle para la decodificación.
Memoria intermedia de imágenes decodificadas
La memoria intermedia de imágenes decodificadas (DPB, del inglés decoded picture buffer) 230 puede ser una memoria que almacena imágenes de referencia, o en general, datos de imágenes de referencia para la codificación de datos de vídeo por el codificador20 de vídeo. La DPB 230 puede estar formada por cualquiera de una variedad de dispositivos de memoria, como la memoria dinámica de acceso aleatorio (DRAM), incluyendo la DRAM sincrónica (SDRAM), la RAM magnetorresistiva (MRAM), la RAM resistiva (RRAM), u otros tipos de dispositivos de memoria. La memoria intermedia de imágenes decodificadas (DPB) 230 se puede configurar para almacenar uno o más bloques filtrados 221. La memoria intermedia de imágenes decodificadas 230 se puede configurar además para almacenar otros bloques filtrados previamente, por ejemplo, bloques previamente reconstruidos y filtrados 221, de la misma imagen actual o de imágenes diferentes, por ejemplo, imágenes previamente reconstruidas, y puede proporcionar imágenes completas previamente reconstruidas, es decir, decodificadas (y los correspondientes bloques de referencia y muestras) y/o una imagen actual parcialmente reconstruida (y los correspondientes bloques de referencia y muestras), por ejemplo, para la inter-predicción. La memoria intermedia de imágenes decodificadas (DPB) 230 también se puede configurar para almacenar uno o más bloques reconstruidos 215 no filtrados, o en general muestras reconstruidas no filtradas, por ejemplo, si el bloque reconstruido 215 no está filtrado por la unidad de filtro de bucle 220, o cualquier otra versión procesada de los bloques o muestras reconstruidos.
Selección de modo (particionamiento y predicción)
La unidad de selección de modo 260 comprende la unidad de particionamiento 262, la unidad de inter-predicción 244 y la unidad de intra-predicción 254, y está configurada para recibir u obtener datos de imagen original, por ejemplo, un bloque original 203 (bloque actual 203 de la imagen actual 17), y datos de imagen reconstruida, por ejemplo, muestras o bloques reconstruidos filtrados y/o no filtrados de la misma imagen (actual) y/o de una o una pluralidad de imágenes previamente decodificadas, por ejemplo, de la memoria intermedia de imágenes decodificadas 230 u otras memorias intermedias (por ejemplo, la memoria intermedia de líneas, no se muestra). Los datos de la imagen reconstruida se utilizan como datos de la imagen de referencia para la predicción, por ejemplo, inter-predicción o intra-predicción, para obtener un bloque de predicción 265 o predictor 265.
La unidad de selección de modo 260 se puede configurar para determinar o seleccionar un particionamiento para un modo de predicción de bloque actual (incluyendo la no particionamiento) y un modo de predicción (por ejemplo, un modo de intra o inter-predicción) y generar un bloque de predicción correspondiente 265, que se utiliza para el cálculo del bloque residual 205 y para la reconstrucción del bloque reconstruido 215.
Las realizaciones de la unidad de selección de modo 260 se pueden configurar para seleccionar la división y el modo de predicción (por ejemplo, de entre los soportados o disponibles para la unidad de selección de modo 260), que proporcionan la mejor coincidencia o, en otras palabras, el mínimo residual (el mínimo residual significa una mejor compresión para la transmisión o el almacenamiento), o una mínima sobrecarga de señalización (la mínima sobrecarga de señalización significa una mejor compresión para la transmisión o el almacenamiento), o que considera o equilibra ambos. La unidad de selección de modo 260 se puede configurar para determinar el modo de particionamiento y predicción en base a la optimización de la distorsión de la tasa (RDO), es decir, seleccionar el modo de predicción que proporciona una distorsión mínima de la tasa. Términos como “mejor”, “mínimo”, “óptimo”, etc., en este contexto no se refieren necesariamente a un “mejor”, “mínimo”, “óptimo” en general, etc., sino que también se pueden entender como el cumplimiento de un criterio de terminación o selección como un valor que exceda o esté por debajo de un umbral u otras restricciones que conduzcan potencialmente a una “selección subóptima” pero que reduzcan la complejidad y el tiempo de procesamiento.
En otras palabras, la unidad de particionamiento 262 se puede configurar para particionar una imagen de una secuencia de vídeo en una secuencia de unidades de árbol de codificación (CTU), y la CTLT 203 además se puede particionar en particiones de bloque o subbloques más pequeños (que forman de nuevo bloques), por ejemplo, de forma iterativa utilizando particionamiento de árbol cuaternario (QT), particionamiento binario (BT) o particionamiento de árbol triple (TT) o cualquier combinación de las mismas, y para realizar, por ejemplo, la predicción para cada una de las particiones o subbloques del bloque, en donde la selección del modo comprende la selección de la estructura de árbol del bloque particionado 203 y los modos de predicción se aplican a cada una de las particiones o subbloques del bloque.
A continuación, se explicará con más detalle la división (por ejemplo, mediante la unidad de particionamiento 260) y el procesamiento de predicción (mediante la unidad de inter-predicción 244 y la unidad de intra-predicción 254) realizados por un codificador de vídeo 20 ejemplar.
Particionamiento
La unidad de particionamiento 262 se puede configurar para particionar una imagen de una secuencia de vídeo en una secuencia de unidades de árbol de codificación (CTU), y la unidad de particionamiento 262 puede particionar (o particionar) una unidad de árbol de codificación (CTU) 203 en particiones más pequeñas, por ejemplo, bloques más pequeños de tamaño cuadrado o rectangular. Para una imagen que tiene tres matrices de muestras, una CTU consiste en un bloque NxN de muestras de luma junto con dos bloques correspondientes de muestras de croma. El tamaño máximo permitido del bloque de luma en una CTU se especifica en 128x128 en la codificación de vídeo versátil (VVC) en desarrollo, pero en el futuro se puede especificar un valor distinto de 128x128, por ejemplo, 256x256. Las CTU de una imagen se pueden agrupar como segmentos/grupos de mosaicos, baldosas o ladrillos. Un mosaico cubre una región rectangular de una imagen, y un mosaico puede particionarse en uno o más ladrillos. Un ladrillo consiste en un número de filas de CTLT dentro de un mosaico. Un mosaico que no está dividido en varios ladrillos se puede denominar ladrillo. Sin embargo, un ladrillo es un verdadero subconjunto de un mosaico y no se denomina baldosa. En VVC se admiten dos modos de grupos de baldosas, principalmente, el modo de grupo segmento/mosaicos de rasterización y el modo de segmento rectangular. En el modo de grupo de mosaicos de rasterización, un grupo de segmentos/mosaicos contiene una secuencia de mosaicos en la rasterización de una imagen. En el modo de segmento rectangular, un segmento contiene un número de ladrillos de una imagen que colectivamente forman una región rectangular de la imagen. Los ladrillos dentro de un segmento rectangular están en el orden de rasterización de ladrillos del segmento. Estos bloques más pequeños (que también se pueden denominar subbloques) pueden particionarse a su vez en particiones aún más pequeñas. Esto también se denomina particionamiento en árbol o particionamiento jerárquico en árbol, en el que un bloque raíz, por ejemplo, en el nivel de árbol raíz 0 (nivel jerárquico 0, profundidad 0), se puede particionar recursivamente, por ejemplo, en dos o más bloques de un nivel de árbol inmediatamente inferior, por ejemplo, los nodos del nivel de árbol 1 (nivel de jerarquía 1, profundidad 1), en los que estos bloques se pueden volver a particionar en dos o más bloques de un nivel inferior, por ejemplo, el nivel de árbol 2 (nivel jerárquico 2, profundidad 2), etc. hasta que se termine la división, por ejemplo, debido a que se cumple un criterio de terminación, por ejemplo, que se alcance una profundidad máxima de árbol o un tamaño mínimo de bloque. Los bloques que no se dividen más se denominan también bloques hoja o nodos hoja del árbol. Un árbol que utiliza la división en dos particiones se denomina árbol binario (BT), un árbol que utiliza la división en tres particiones se denomina árbol ternario (TT), y un árbol que utiliza la división en cuatro particiones se denomina árbol cuaternario (QT).
Por ejemplo, una unidad de árbol de codificación (CTU) puede ser o comprender un CTB de muestras de luma, dos CTB correspondientes de muestras de croma de una imagen que tiene tres matrices de muestras, o un CTB de muestras de una imagen monocromática o una imagen que se codifica utilizando tres planos de color separados y estructuras de sintaxis utilizadas para codificar las muestras. En consecuencia, un bloque de árbol de codificación (CTB) puede ser un bloque de muestras NxN para algún valor de N, de manera que la división de un componente en CTB es un particionamiento. Una unidad de codificación (CU) puede ser o comprender un bloque de codificación de muestras de luma, dos bloques de codificación correspondientes de muestras de croma de una imagen que tiene tres matrices de muestras, o un bloque de codificación de muestras de una imagen monocromática o una imagen que se codifica utilizando tres planos de color separados y estructuras de sintaxis utilizadas para codificar las muestras. En consecuencia, un bloque de codificación (CB) puede ser un bloque MxN de muestras para algunos valores de M y N, de modo que la división de un CTB en bloques de codificación es un particionamiento.
En las realizaciones, por ejemplo, de acuerdo con HEVC, una unidad de árbol de codificación (CTU) se puede particionar en CU utilizando una estructura de árbol cuaternario denominada árbol de codificación. La decisión de codificar un área de la imagen utilizando la inter-predicción-imagen (temporal) o intra-imagen (espacial) se realiza en el nivel de la CU de hoja. Cada CU de hoja puede particionarse a su vez en una, dos o cuatro PU según el tipo de particionamiento de la PU. Dentro de una PU, se aplica el mismo proceso de predicción y la información pertinente se transmite al decodificador en función de la PU. Después de obtener el bloque residual aplicando el proceso de predicción basado en el tipo de particionamiento de la PU, una CU de hoja puede particionarse en unidades de transformada (TU) según otra estructura de árbol cuaternario similar al árbol de codificación de la CU.
En las realizaciones, por ejemplo, de acuerdo con el último estándar de codificación de vídeo actualmente en desarrollo, que se denomina Codificación de Vídeo Versátil (VVC), se utiliza una estructura de segmentación combinada de árbol cuaternario anidado que utiliza divisiones binarias y ternarias, por ejemplo, para particionar una unidad de árbol de codificación. En la estructura de árbol de codificación dentro de una unidad de árbol de codificación, una CU puede tener una forma cuadrada o rectangular. Por ejemplo, la unidad de árbol de codificación (UAC) se divide primero en un árbol cuaternario. A continuación, los nodos hoja del árbol cuaternario se pueden particionar aún más mediante una estructura de árbol de tipo múltiple. Hay cuatro tipos de particionamiento en la estructura de árbol de tipo múltiple: particionamiento binario vertical (SPLIT_BT_VER), particionamiento binario horizontal (SPLIT_BT_HOR), particionamiento ternario vertical (SPLIT_TT_VER) y particionamiento ternario horizontal (SPLIT_TT_HOR). Los nodos hoja del árbol de tipo múltiple se denominan unidades de codificación (CU) y, a menos que la CU sea demasiado grande para la longitud máxima de la transformada, esta segmentación se utiliza para la predicción y el procesamiento de transformada sin ninguna otro particionamiento. Esto significa que, en la mayoría de los casos, la CU, la PU y la TU tienen el mismo tamaño de bloque en el árbol cuaternario con estructura de bloques de codificación de árbol de tipo múltiple anidado. La excepción se produce cuando la longitud máxima de la transformada admitida es menor que la anchura o la altura del componente de color de la CU.VVC desarrolla un mecanismo único de señalización de la información de particionamiento del particionamiento en árbol cuaternario con estructura de árbol de codificación de tipo múltiple anidado. En el mecanismo de señalización, una unidad de árbol de codificación (CTU) se trata como la raíz de un árbol cuaternario y se divide primero mediante una estructura de árbol cuaternario. Cada nodo hoja del árbol cuaternario (cuando es lo suficientemente grande como para permitirlo) se divide después mediante una estructura de árbol de tipo múltiple. En la estructura de árbol de tipo múltiple, se señala una primera bandera (mtt_split_cu_flag) para indicar si el nodo está dividido aún más; cuando un nodo está dividido aún más, se señala una segunda bandera (mtt_split_cu_vertical_flag) para indicar la dirección de la división, y luego se señala una tercera bandera (mtt_split_cu_binary_flag) para indicar si el particionamiento es un particionamiento binario o un particionamiento ternario. En base a los valores de mtt_split_cu_vertical_flag y mtt_split_cu_binary_flag, el modo de particionamiento de árbol de tipo múltiple (MttSplitMode) de una CU se puede derivar por un decodificador en base a una regla predefinida o en una tabla. Cabe señalar que, para un determinado diseño, por ejemplo, un bloque de luma de 64x64 y un diseño de canalización de croma de 32x32 en decodificadores de hardware VVC, el particionamiento TT no está permitido cuando la anchura o la altura de un bloque de codificación de luma es superior a 64, tal como se muestra en la Fig. 6. El particionamiento TT también está prohibido cuando la anchura o la altura de un bloque de codificación de croma es superior a 32. El diseño de ejecución en cascada (segmentación) particionará una imagen en unidades de datos virtuales (VPDU) que se definen como unidades no superpuestas en una imagen. En los decodificadores por hardware, las VPDU sucesivas son procesadas por múltiples etapas de ejecución en cascada simultáneamente. El tamaño de las VPDU es aproximadamente proporcional al tamaño de la memoria intermedia en la mayoría de las etapas de la ejecución en cascada, por lo que es importante que el tamaño de las VPDU sea pequeño. En la mayoría de los decodificadores por hardware, el tamaño de la VPDU puede ajustarse al tamaño máximo del bloque de transformada (TB). Sin embargo, en la VVC, la división del árbol ternario (TT) y del árbol binario (BT) puede hacer que aumente el tamaño de las VPDU. Además, hay que tener en cuenta que, cuando una parte de un bloque de nodos de árbol sobrepasa el límite inferior o derecho de la imagen, el bloque de nodos de árbol se ve obligado a particionarse hasta que todas las muestras de cada CU codificada se encuentren dentro de los límites de la imagen.
Por ejemplo, la herramienta de intra-subpartiticiones (ISP) puede particionar los bloques luma intra-previstos vertical u horizontalmente en 2 o 4 sub-particiones dependiendo del tamaño del bloque.
En un ejemplo, la unidad de selección de modo 260 del codificador de vídeo 20 se puede configurar para realizar cualquier combinación de las técnicas de particionamiento descritas en el presente documento.
Tal como se describió anteriormente, el codificador de vídeo 20 está configurado para determinar o seleccionar el mejor o un modo de predicción óptimo de un conjunto de modos de predicción (por ejemplo, predeterminados). El conjunto de modos de predicción puede comprender, por ejemplo, modos intra-predicción y/o modos inter-predicción.
Intra-Predicción
El conjunto de modos intra-predicción puede comprender 35 modos de intra-predicción diferentes, por ejemplo, modos no direccionales como el modo DC (o medio) y el modo planar, o modos direccionales, por ejemplo, como se define en HEVC, o puede comprender 67 modos de intra-predicción diferentes, por ejemplo, modos no direccionales como el modo DC (o medio) y el modo planar, o modos direccionales, por ejemplo, como se define en VVC. Como ejemplo, varios modos convencionales de intra-predicción angular se sustituyen de forma adaptativa por modos de intrapredicción gran angular para los bloques no cuadrados, por ejemplo, como se define en VVC. Como otro ejemplo, para evitar las operaciones de particionamiento para la predicción DC, sólo se utiliza el lado más largo para calcular la media de los bloques no cuadrados y los resultados de la intra-predicción del modo planar se pueden modificar aún más mediante un método de combinación de intra-predicción dependiente de la posición (PDPC).
La unidad de intra-predicción 254 está configurada para utilizar muestras reconstruidas de bloques vecinos de la misma imagen actual para generar un bloque de intra-predicción 265 de acuerdo con un modo de intra-predicción del conjunto de modos de intra-predicción.
La unidad de intra-predicción 254 (o en general la unidad de selección de modo 260) está configurada además para emitir parámetros de intra-predicción (o en general información indicativa del modo de intra-predicción seleccionado para el bloque) a la unidad de codificación de entropía 270 en forma de elementos de sintaxis 266 para su inclusión en los datos de imagen codificados 21, de modo que, por ejemplo, el decodificador de vídeo 30 puede recibir y utilizar los parámetros de predicción para la decodificación.
Inter-predicción
El conjunto de (o posibles) modos de inter-predicción depende de las imágenes de referencia disponibles (es decir, de las imágenes anteriores decodificadas, al menos parcialmente, por ejemplo, almacenadas en la DBP 230) y de otros parámetros de inter-predicción, por ejemplo, si se utiliza toda la imagen de referencia o sólo una parte, por ejemplo, un área de ventana de búsqueda en torno al área del bloque actual, para buscar el mejor bloque de referencia coincidente y/o, por ejemplo, si se aplica la interpolación de píxeles, por ejemplo, interpolación de medio/semipíxel, cuarto de píxel y/o 1/16 de píxel, o no.
Además de los modos de predicción anteriores, se puede aplicar el modo de salto y el modo directo.
La unidad de inter-predicción 244 puede incluir una unidad de estimación de movimiento (ME) y una unidad de compensación de movimiento (MC) (ambas no se muestran en la Fig. 2). La unidad de estimación de movimiento se puede configurar para recibir u obtener el bloque de imagen 203 (bloque de imagen actual 203 de la imagen actual 17) y una imagen decodificada 231, o al menos uno o una pluralidad de bloques previamente reconstruidos, por ejemplo, bloques reconstruidos de una o una pluralidad de otras/diferentes imágenes previamente decodificadas 231, para la estimación de movimiento. Por ejemplo, una secuencia de vídeo puede comprender la imagen actual y las imágenes previamente decodificadas 231, o en otras palabras, la imagen actual y las imágenes previamente decodificadas 231 pueden ser parte de o formar una secuencia de imágenes que forman una secuencia de vídeo.
El codificador 20, por ejemplo, se puede configurar para seleccionar un bloque de referencia de una pluralidad de bloques de referencia de la misma imagen o diferentes imágenes de la pluralidad de otras imágenes y proporcionar una imagen de referencia (o índice de imagen de referencia) y/o un desplazamiento (desplazamiento espacial) entre la posición (coordenadas x, y) del bloque de referencia y la posición del bloque actual como parámetros de inter predicción a la unidad de estimación de movimiento. Este desplazamiento también se denomina vector de movimiento (MV).
La unidad de compensación de movimiento está configurada para obtener, por ejemplo, recibir, un parámetro de inter predicción y para realizar una inter-predicción en base al parámetro de inter-predicción o utilizándolo para obtener un bloque de inter-predicción 265. La compensación de movimiento, realizada por la unidad de compensación de movimiento, puede implicar la obtención o generación del bloque de predicción en base al vector de movimiento/bloque determinado por la estimación de movimiento, posiblemente realizando interpolaciones con precisión de sub-píxeles. El filtrado de interpolación puede generar muestras de píxeles adicionales a partir de muestras de píxeles conocidas, aumentando así potencialmente el número de bloques de predicción candidatos que se pueden utilizar para codificar un bloque de imagen. Al recibir el vector de movimiento para la PU del bloque de imagen actual, la unidad de compensación de movimiento puede localizar el bloque de predicción al que apunta el vector de movimiento en una de las listas de imágenes de referencia.
La unidad de compensación de movimiento también puede generar elementos de sintaxis asociados a los bloques y a los segmentos de vídeo para que los utilice el decodificador de vídeo 30 en la decodificación de los bloques de imagen del segmento de vídeo. Además, o como alternativa a los segmentos y a los elementos de sintaxis respectivos, se pueden generar o utilizar grupos de mosaicos y/o mosaicos y elementos de sintaxis respectivos.
Codificación entrópica
La unidad de codificación de entropía 270 está configurada para aplicar, por ejemplo, un algoritmo o esquema de codificación de entropía (por ejemplo un esquema de codificación de longitud variable (VLC), un esquema VLC adaptable al contexto (CAVLC), un esquema de codificación aritmética, una binarización, una codificación aritmética binaria adaptable al contexto (CABAC), una codificación aritmética binaria adaptable al contexto basada en la sintaxis (SBAC), codificación de entropía de particionamiento de intervalo de probabilidad (PIPE) u otra metodología o técnica de codificación de entropía) o de derivación (sin compresión) sobre los coeficientes cuantificados 209, los parámetros de inter-predicción, los parámetros de intra-predicción, los parámetros de filtro de bucle y/u otros elementos de sintaxis para obtener los datos de imagen codificados 21 que se pueden emitir a través de la salida 272, por ejemplo, en forma de un flujo de bits codificado 21, de modo que, por ejemplo, el decodificador de vídeo 30 pueda recibir y utilizar los parámetros para la decodificación. El flujo de bits codificado 21 se puede transmitir al decodificador de vídeo 30, o almacenarse en una memoria para su posterior transmisión o recuperación por el decodificador de vídeo 30.
Se pueden utilizar otras variaciones estructurales del codificador de vídeo 20 para codificar la transmisión de vídeo. Por ejemplo, un codificador no basado en transformada 20 puede cuantificar la señal residual directamente sin la unidad de procesamiento de transformada 206 para ciertos bloques o fotogramas. En otra implementación, un codificador 20 puede tener la unidad de cuantificación 208 y la unidad de cuantificación inversa 210 combinadas en una sola unidad.
Decodificador y método de decodificación
La Fig. 3 muestra un ejemplo de decodificador de vídeo 30 configurado para implementar las técnicas de la presente solicitud. El decodificador de vídeo 30 está configurado para recibir datos de imagen codificados 21 (por ejemplo, flujo de bits codificado 21), por ejemplo, codificados por el codificador 20, para obtener una imagen decodificada 331. Los datos de imagen codificados o el flujo de bits comprenden información para decodificar los datos de imagen codificados, por ejemplo, datos que representan bloques de imagen de una porción de vídeo codificada (y/o grupos de mosaicos o mosaicos) y elementos de sintaxis asociados.
En el ejemplo de la Fig. 3, el decodificador 30 comprende una unidad de decodificación de entropía 304, una unidad de cuantificación inversa 310, una unidad de procesamiento de transformada inversa 312, una unidad de reconstrucción 314 (por ejemplo, un sumador 314), un filtro de bucle 320, una memoria intermedia de imágenes decodificadas (DBP) 330, una unidad de aplicación de modo 360, una unidad de inter-predicción 344 y una unidad de intra-predicción 354. La unidad de inter-predicción 344 puede ser o incluir una unidad de compensación de movimiento. El decodificador de vídeo 30 puede, en algunos ejemplos, realizar un pase de decodificación generalmente recíproco al pase de codificación descrito con respecto al codificador de vídeo 100 de la Fig. 2.
Como se ha explicado con respecto al codificador 20, la unidad de cuantificación inversa 210, la unidad de procesamiento de transformada inversa 212, la unidad de reconstrucción 214, el filtro de bucle 220, la memoria intermedia de imágenes decodificadas (DPB) 230, la unidad de inter-predicción 344 y la unidad de inter-predicción 354 también se conocen como que forman el “decodificador incorporado” del codificador de vídeo 20. En consecuencia, la unidad de cuantificación inversa 310 puede ser idéntica en función a la unidad de cuantificación inversa 110, la unidad de procesamiento de transformada inversa 312 puede ser idéntica en función a la unidad de procesamiento de transformada inversa 212, la unidad de reconstrucción 314 puede ser idéntica en función a la unidad de reconstrucción 214, el filtro de bucle 320 puede ser idéntico en función al filtro de bucle 220, y la memoria intermedia de imagen decodificada 330 puede ser idéntica en función a la memoria intermedia de imagen decodificada 230. Por lo tanto, las explicaciones proporcionadas para las respectivas unidades y funciones del codificador de vídeo 20 se aplican correspondientemente a las respectivas unidades y funciones del decodificador de vídeo 30.
Decodificación de entropía
La unidad de decodificación de entropía 304 está configurada para analizar el flujo de bits 21 (o, en general, los datos de imagen codificados 21) y realizar, por ejemplo, la decodificación de entropía de los datos de imagen codificados 21 para obtener, por ejemplo, coeficientes cuantificados 309 y/o parámetros de codificación decodificados (no se muestran en la Fig. 3), por ejemplo, alguno o todos los parámetros de inter-predicción (por ejemplo, índice de imagen de referencia y vector de movimiento), parámetro de intra-predicción (por ejemplo, modo o índice de intra-predicción), parámetros de transformada, parámetros de cuantificación, parámetros de filtro de bucle y/u otros elementos de sintaxis. La unidad de decodificación de entropía 304 puede estar configurada para aplicar los algoritmos o esquemas de decodificación correspondientes a los esquemas de codificación descritos con respecto a la unidad de codificación de entropía 270 del codificador 20. La unidad de decodificación de entropía 304 se puede configurar además para proporcionar parámetros de inter-predicción, parámetros de intra-predicción y/u otros elementos de sintaxis a la unidad de aplicación de modo 360 y otros parámetros a otras unidades del decodificador 30. El decodificador de vídeo 30 puede recibir los elementos de sintaxis en el nivel de segmento de vídeo y/o en el nivel del bloque de vídeo. Además, o como alternativa a los segmentos y a los elementos de sintaxis respectivos, pueden recibirse y/o utilizarse grupos de mosaicos y/o mosaicos y elementos de sintaxis respectivos.
Cuantificación inversa
La unidad de cuantificación inversa 310 se puede configurar para recibir parámetros de cuantificación (QP) (o en general información relacionada con la cuantificación inversa) y coeficientes cuantificados a partir de los datos de imagen codificados 21 (por ejemplo, mediante el análisis sintáctico y/o la decodificación, por ejemplo, mediante la unidad de decodificación de entropía 304) y para aplicar, en base a los parámetros de cuantificación, una cuantificación inversa sobre los coeficientes cuantificados decodificados 309 para obtener coeficientes 311 descuantificados, que también se pueden denominar coeficientes de transformada 311. El proceso de cuantificación inversa puede incluir el uso de un parámetro de cuantificación determinado por el codificador de vídeo 20 para cada bloque de vídeo en el segmento de vídeo (o mosaico o grupo de mosaicos) para determinar un grado de cuantificación y, del mismo modo, un grado de cuantificación inversa que debe aplicarse.
Transformada inversa
La unidad de procesamiento de transformada inversa 312 se puede configurar para recibir los coeficientes descuantificados 311, también denominados coeficientes de transformada 311, y para aplicar una transformada a los coeficientes descuantificados 311 con el fin de obtener bloques residuales reconstruidos 213 en el dominio de la muestra. Los bloques residuales reconstruidos 213 también pueden denominarse bloques de transformada 313. La transformada puede ser una transformada inversa, por ejemplo, una DCT inversa, una DST inversa, una transformada entera inversa, o un proceso de transformada inversa conceptualmente similar. La unidad de procesamiento de transformada inversa 312 se puede configurar además para recibir los parámetros de transformada o la información correspondiente de los datos de imagen codificados 21 (por ejemplo, mediante el análisis sintáctico y/o la decodificación, por ejemplo, mediante la unidad de decodificación de entropía 304) para determinar la transformada que debe aplicarse a los coeficientes descuantificados 311.
Reconstrucción
La unidad de reconstrucción 314 (por ejemplo, el sumador 314) se puede configurar para añadir el bloque residual reconstruido 313, al bloque de predicción 365 para obtener un bloque reconstruido 315 en el dominio de la muestra, por ejemplo, sumando los valores de muestra del bloque residual reconstruido 313 y los valores de muestra del bloque de predicción 365.
Filtrado
La unidad de filtro de bucle 320 (ya sea en el bucle de codificación o después del bucle de codificación) está configurada para filtrar el bloque reconstruido 315 para obtener un bloque filtrado 321, por ejemplo, para suavizar las transiciones de píxeles, o para mejorar de otro modo la calidad del vídeo. La unidad de filtro de bucle 320 puede comprender uno o más filtros de bucle, como un filtro de desbloqueo, un filtro de compensación adaptable a la muestra (SAO) o uno o más filtros, por ejemplo, un filtro de bucle adaptable (ALF), un filtro de supresión de ruido (NSF), o cualquier combinación de los mismos. En un ejemplo, la unidad de filtro de bucle 220 puede comprender un filtro de desbloqueo, un filtro SAO y un filtro ALF. El orden del proceso de filtrado puede ser el filtro de desbloqueo, el SAO y el ALF. En otro ejemplo, se añade un proceso denominado mapeo de luma con escalado de croma (LMCS) (es decir, el conformador adaptativo en bucle). Este proceso se realiza antes del desbloqueo. En otro ejemplo, el proceso de filtro de desbloqueo puede aplicarse también a los bordes internos de los subbloques, por ejemplo, los bordes de los subbloques afines, los bordes de los subbloques ATMVP, los bordes de la transformada de subbloques (SBT) y los bordes de intra-subpartición (ISP). Aunque la unidad de filtro de bucle 320 se muestra en la Fig. 3 como un filtro dentro del bucle, en otras configuraciones, la unidad de filtro de bucle 320 se puede implementar como un filtro posterior al bucle.
Memoria intermedia de imágenes decodificadas
Los bloques de vídeo decodificados 321 de una imagen se almacenan entonces en la memoria intermedia de imágenes decodificadas 330, que almacena las imágenes decodificadas 331 como imágenes de referencia para la posterior compensación de movimiento de otras imágenes y/o para la salida respectivamente para visualización.
El decodificador 30 está configurado para emitir la imagen decodificada 311, por ejemplo, a través de la salida 132, para su presentación o visualización a un usuario.
Predicción
La unidad de inter-predicción 344 puede ser idéntica a la unidad de inter-predicción 244 (en particular a la unidad de compensación de movimiento) y la unidad de intra-predicción 354 puede ser idéntica a la unidad de inter-predicción 254 en cuanto a su función, y realiza decisiones de particionamiento o particionamiento y predicción en base a los parámetros de particionamiento y/o predicción o en la información respectiva recibida de los datos de imagen codificados 21 (por ejemplo, mediante el análisis sintáctico y/o la decodificación, por ejemplo, mediante la unidad de decodificación de entropía 304). La unidad de aplicación del modo 360 se puede configurar para realizar la predicción (intra o inter-predicción) por bloque en base a las imágenes reconstruidas, los bloques o las muestras respectivas (filtradas o sin filtrar) para obtener el bloque de predicción 365.
Cuando el segmento de vídeo está codificado como un segmento intra-codificado (I), la unidad de intra-predicción 354 de la unidad de aplicación de modo 360 está configurada para generar el bloque de predicción 365 para un bloque de imagen del segmento de vídeo actual en base a un modo de intra-predicción señalado y en los datos de los bloques previamente decodificados de la imagen actual. Cuando la imagen de vídeo se codifica como un segmento inter codificado (es decir, B, o P), la unidad de inter-predicción 344 (por ejemplo, la unidad de compensación de movimiento) de la unidad de aplicación de modo 360 está configurada para producir bloques de predicción 365 para un bloque de vídeo del segmento de vídeo actual en base a los vectores de movimiento y otros elementos de sintaxis recibidos de la unidad de decodificación de entropía 304. Para la inter-predicción, los bloques de predicción pueden producirse a partir de una de las imágenes de referencia dentro de una de las listas de imágenes de referencia. El decodificador de vídeo 30 puede construir las listas de imágenes de referencia, la Lista 0 y la Lista 1, utilizando técnicas de construcción predeterminadas en base a las imágenes de referencia almacenadas en la DPB 330. Lo mismo o similar puede aplicarse para o por realizaciones que utilicen grupos de mosaicos (por ejemplo, grupos de mosaicos de vídeo) y/o mosaicos (por ejemplo, mosaicos de vídeo) adicional o alternativamente a los segmentos (por ejemplo, segmentos de vídeo), por ejemplo, un vídeo se puede codificar con mosaicos y/o grupos de mosaicos I, P o B.
La unidad de aplicación de modo 360 está configurada para determinar la información de predicción para un bloque de vídeo de la porción de vídeo actual al analizar los vectores de movimiento o la información relacionada y otros elementos de sintaxis, y utiliza la información de predicción para producir los bloques de predicción para el bloque de vídeo actual que se está decodificando. Por ejemplo, la unidad de aplicación de modo 360 utiliza algunos de los elementos de sintaxis recibidos para determinar un modo de predicción (por ejemplo, intra o inter-predicción) utilizado para codificar los bloques de vídeo del segmento de vídeo, un tipo de segmento de inter-predicción (por ejemplo, segmento B, segmento P, o segmento GPB), información de construcción para una o más de las listas de imágenes de referencia para el segmento, vectores de movimiento para cada bloque de vídeo inter-codificado del segmento, estado de inter-predicción para cada bloque de vídeo inter-codificado del segmento, y otra información para decodificar los bloques de vídeo en el segmento de vídeo actual. Lo mismo o similar se puede aplicar para o por realizaciones que utilizan grupos de mosaicos (por ejemplo, grupos de mosaicos de vídeo) y/o mosaicos (por ejemplo, mosaicos de vídeo) adicional o alternativamente a los segmentos (por ejemplo, segmentos de vídeo), por ejemplo, un vídeo se puede codificar con grupos de mosaicos y/o mosaicos I, P o B.
Las realizaciones del decodificador de vídeo 30, tal como se muestra en la Fig. 3, se pueden configurar para particionar y/o decodificar la imagen mediante el uso de segmentos (también denominados segmentos de vídeo), en los que una imagen puede particionarse o decodificarse utilizando uno o más segmentos (normalmente no superpuestos), y cada segmento puede comprender uno o más bloques (por ejemplo, CTU) o uno o más grupos de bloques (por ejemplo, mosaicos (H.265/HEVC y VVC) o ladrillos (VVC)).
Las realizaciones del decodificador de vídeo 30, tal como se muestra en la Fig. 3, se pueden configurar para particionar y/o decodificar la imagen mediante el uso de grupos de segmentos/mosaicos (también denominados grupos de mosaicos de vídeo) y/o mosaicos (también denominados mosaicos de vídeo), en los que una imagen puede particionarse o decodificarse mediante uno o más grupos de segmentos/mosaicos (normalmente no superpuestos), y cada grupo de segmentos/mosaicos puede comprender, por ejemplo, uno o más bloques (por ejemplo, CTU) o uno o más mosaicos, en los que cada mosaico, por ejemplo, puede tener forma rectangular y puede comprender uno o más bloques (por ejemplo, CTU), por ejemplo, bloques completos o fraccionados.
Se pueden utilizar otras variaciones del decodificador de vídeo 30 para decodificar los datos de imagen codificados 21. Por ejemplo, el decodificador 30 puede producir la transmisión de vídeo de salida sin la unidad de filtrado en bucle 320. Por ejemplo, un decodificador 30 no basado en transformada puede cuantificar inversamente la señal residual directamente sin la unidad de procesamiento de transformada inversa 312 para ciertos bloques o fotogramas. En otra implementación, el decodificador de vídeo 30 puede tener la unidad de cuantificación inversa 310 y la unidad de procesamiento de transformada inversa 312 combinadas en una sola unidad.
Debe entenderse que, en el codificador 20 y en el decodificador 30, el resultado del procesamiento de un paso actual puede ser procesado adicionalmente y, después, enviarse al siguiente paso. Por ejemplo, después del filtrado de interpolación, la derivación del vector de movimiento o el filtrado de bucle, se puede realizar una operación adicional, como el recorte o el desplazamiento, en el resultado del procesamiento del filtrado de interpolación, la derivación del vector de movimiento o el filtrado de bucle.
Hay que tener en cuenta que se pueden aplicar otras operaciones a los vectores de movimiento derivados del bloque actual (incluyendo, pero sin limitarse a, los vectores de movimiento de los puntos de control del modo afín, los vectores de movimiento de los subbloques en los modos afín, planar y ATMVP, los vectores de movimiento temporal, etc.). Por ejemplo, el valor del vector de movimiento se limita a un intervalo predefinido según su bit de representación. Si el bit de representación del vector de movimiento es profunidadBit, el intervalo es -2A(profundidadBit-1) ~ 2A(profundidadBit-1)-1, donde “A” significa exponenciación. Por ejemplo, si profundidadBit es igual a 16, el intervalo es -32768 ~ 32767; si profundidadBit es igual a 18, el intervalo es -131072~131071. Por ejemplo, el valor del vector de movimiento derivado (por ejemplo, las VM de cuatro subbloques de 4x4 dentro de un bloque de 8x8) se restringe de manera que la diferencia máxima entre las partes enteras de las cuatro VM de los subbloques de 4x4 no es más que N píxeles, como por ejemplo no más de 1 píxel. En este caso se ofrecen dos métodos para restringir el vector de movimiento de acuerdo con la profundidad de bits.
La Fig. 4 es un diagrama esquemático de un dispositivo de codificación de vídeo 400 de acuerdo con una realización de la divulgación. El dispositivo de codificación de vídeo 400 es adecuado para implementar las realizaciones descritas como se describe en el presente documento. En una realización, el dispositivo de codificación de vídeo 400 puede ser un decodificador como el decodificador de vídeo 30 de la Fig. 1A o un codificador como el codificador de vídeo 20 de la Fig. 1A.
El dispositivo de codificación de vídeo 400 comprende puertos de entrada 410 (o puertos de entrada 410) y unidades receptoras (Rx) 420 para recibir datos; un procesador, unidad lógica o unidad central de procesamiento (CPU) 430 para procesar los datos; unidades transmisoras (Tx) 440 y puertos de salida 450 para transmitir los datos; y una memoria 460 para almacenar los datos. El dispositivo de codificación de vídeo 400 también puede comprender componentes ópticos-eléctricos (OE) y componentes eléctricos-ópticos (EO) acoplados a los puertos de entrada 410, las unidades receptoras 420, las unidades transmisoras 440 y los puertos de salida 450 para la salida o entrada de señales ópticas o eléctricas.
El procesador 430 se implementa mediante hardware y software. El procesador 430 se puede implementar como uno o más chips de CPU, núcleos (por ejemplo, como un procesador multinúcleo), FPGA, ASIC y DSP. El procesador 430 está en comunicación con los puertos de entrada 410, las unidades receptoras 420, las unidades transmisoras 440, los puertos de salida 450 y la memoria 460. El procesador 430 comprende un módulo de codificación 470. El módulo de codificación 470 implementa las realizaciones descritas anteriormente. Por ejemplo, el módulo de codificación 470 implementa, procesa, prepara o proporciona las diversas operaciones de codificación. Por lo tanto, la inclusión del módulo de codificación 470 proporciona una mejora sustancial de la funcionalidad del dispositivo de codificación de vídeo 400 y efectúa una transformación del dispositivo de codificación de vídeo 400 a un estado diferente. Alternativamente, el módulo de codificación 470 se implementa como instrucciones almacenadas en la memoria 460 y ejecutadas por el procesador 430.
La memoria 460 puede comprender uno o más discos, unidades de cinta y unidades de estado sólido, y se puede utilizar como dispositivo de almacenamiento de datos de sobrecarga, para almacenar programas cuando dichos programas se seleccionan para su ejecución, y para almacenar instrucciones y datos que se leen durante la ejecución del programa. La memoria 460 puede ser, por ejemplo, volátil y/o no volátil y puede ser una memoria de sólo lectura (ROM), una memoria de acceso aleatorio (RAM), una memoria ternaria de contenido direccionable (TCAM), y/o una memoria estática de acceso aleatorio (SRAM).
La Fig. 5 es un diagrama de bloques simplificado de un aparato 500 que se puede utilizar como uno o ambos dispositivos de origen 12 y de destino 14 de la Fig. 1 de acuerdo con una realización ejemplar.
El procesador 502 del aparato 500 puede ser una unidad central de procesamiento. Alternativamente, el procesador 502 puede ser cualquier otro tipo de dispositivo, o múltiples dispositivos, capaces de manipular o procesar información ya existente o desarrollada posteriormente. Aunque las implementaciones descritas se pueden practicar con un único procesador, tal como se muestra, por ejemplo, el procesador 502, pueden lograrse ventajas de velocidad y eficiencia utilizando más de un procesador.
Una memoria 504 en el aparato 500 puede ser un dispositivo de memoria de sólo lectura (ROM) o un dispositivo de memoria de acceso aleatorio (RAM) en una implementación. Se puede utilizar cualquier otro tipo adecuado de dispositivo de almacenamiento como memoria 504. La memoria 504 puede incluir código y datos 506 a los que accede el procesador 502 mediante un bus 512. Además, la memoria 504 puede incluir un sistema operativo 508 y programas de aplicación 510, incluyendo los programas de aplicación 510 al menos un programa que permite al procesador 502 realizar los métodos descritos en el presente documento. Por ejemplo, los programas de aplicación 510 pueden incluir las aplicaciones 1 a N, que incluyen además una aplicación de codificación de vídeo que realiza los métodos descritos en el presente documento.
El aparato 500 también puede incluir uno o más dispositivos de salida, como una pantalla 518. La pantalla 518 puede ser, en un ejemplo, una pantalla sensible al tacto que combina una pantalla con un elemento sensible al tacto que es operable para detectar entradas táctiles. La pantalla 518 puede estar acoplada al procesador 502 a través del bus 512.
Aunque en el presente documento se representa como un único bus, el bus 512 del aparato 500 puede estar compuesto por múltiples buses. Además, el almacenamiento secundario 514 se puede acoplar directamente a los demás componentes del aparato 500 o se puede acceder a él a través de una red y puede comprender una única unidad integrada, como una tarjeta de memoria, o varias unidades, como múltiples tarjetas de memoria. De este modo, el aparato 500 se puede implementar en una amplia variedad de configuraciones.
A continuación, se presentan algunos ejemplos relacionados, y se señala que se utiliza como referencia el documento de la reunión JVET-N1002.
I. Predicción de fusión:
La lista de candidatos de fusión se construye al incluir los siguientes cinco tipos de candidatos en orden:
1) MVP espacial de las UC vecinas espaciales
2) MVP temporal de las UC ubicadas en el mismo lugar
3) MVP basado en el historial de una tabla FIFO
4) MVP promedio por parejas
5) Cero MV.
El tamaño de la lista de fusión se indica en el encabezado de la sección y el tamaño máximo permitido de la lista de fusión es un número entero, por ejemplo, el número podría ser 6. Para cada código de la CU en modo de fusión, se codifica un índice de mejor candidato de fusión. El proceso de generación de cada categoría de candidatos de fusión se proporciona en esta sesión.
(1) Derivación de candidatos espaciales
Como ejemplo, se seleccionan un máximo de cuatro candidatos de fusión entre los candidatos situados en las posiciones representadas en la Fig. 6. El orden de derivación es A0, B0, B1, A1 y B2. La posición B2 se considera sólo cuando alguna UC de la posición A0, B0, B1, A1 no está disponible (por ejemplo, debido a que pertenece a otro segmento o mosaico) o está intra-codificada. Después de añadir el candidato en la posición A1, la adición de los candidatos restantes se somete a una comprobación de redundancia que garantiza que los candidatos con la misma información de movimiento se excluyan de la lista. En una aplicación factible, sólo se consideran los pares vinculados con una flecha en la Fig. 7 y sólo se añade un candidato a la lista si el candidato correspondiente utilizado para la comprobación de redundancia no tiene la misma información de movimiento.
(2) Derivación de candidatos temporales
Como ejemplo, sólo se añade un candidato a la lista. En particular, en la derivación de este candidato de fusión temporal, se obtiene un vector de movimiento escalado en base a las UC coubicadas que pertenecen a la imagen de referencia colocada. La lista de imágenes de referencia que se utilizará para la derivación de la UC colocada se indica explícitamente en el encabezado del segmento. El vector de movimiento escalado para el candidato de fusión temporal se obtiene como se ilustra en la línea de puntos de la Fig. 8, que se escala a partir del vector de movimiento de la UC coubicada utilizando las distancias POC, tb y td, donde tb se define como la diferencia POC entre la imagen de referencia de la imagen actual y la imagen actual y td se define como la diferencia POC entre la imagen de referencia de la imagen coubicada y la imagen coubicada. El índice de la imagen de referencia del candidato de fusión temporal se fija en cero.
Cabe señalar que POC (Picture Order Count(Recuento de Orden de Imágenes)es una variable asociada a cada imagen, que identifica de forma exclusiva la imagen asociada entre todas las imágenes de la CVS (Coded Video Sequence(Secuencia de Vídeo Codificada)y que, cuando la imagen asociada va a salir de la memoria intermedia de imágenes decodificadas, indica la posición de la imagen asociada en el orden de salida en relación con las posiciones del orden de salida de las demás imágenes de la misma CVS que van a salir de la memoria intermedia de imágenes decodificadas.
(3) Derivación de candidatos de fusión basada en el historial
Los candidatos de fusión del MVP basado en el historial (HMVP) se añaden a la lista de fusión después del MVP espacial y el TMVP. La información de movimiento de un bloque previamente codificado se almacena en una tabla y se utiliza como MVP para la UC actual. La tabla con múltiples candidatos de HMVP se mantiene durante el proceso de codificación/decodificación. La tabla se restablece cuando se encuentra una nueva fila de CTU. Cada vez que hay una CU inter-codificada que no es un subbloque, la información de movimiento asociada se añade a la última entrada de la tabla como un nuevo candidato HMVP. Los últimos candidatos HMVP de la tabla se comprueban por orden y se insertan en la lista de candidatos después del candidato TMVP. La comprobación de redundancia se aplica a los candidatos HMVP al candidato de fusión espacial o temporal.
(4) Derivación de los candidatos de fusión promedio por pares
Los candidatos promedio por pares se generan promediando pares predefinidos de candidatos en la lista de candidatos de fusión existente, y los pares predefinidos se definen como {(0, 1), (0, 2), (1, 2), (0, 3), (1, 3), (2, 3)}, donde los números denotan los índices de fusión a la lista de candidatos de fusión. Los vectores de movimiento promediados se calculan de manera individual para cada lista de referencia. Si los dos vectores de movimiento están disponibles en una lista, estos dos vectores de movimiento se promedian, aunque apunten a diferentes imágenes de referencia; si sólo hay un vector de movimiento disponible, se utiliza directamente; si no hay un vector de movimiento disponible, se mantiene la lista inválida.
(5) Cuando la lista de fusión no está completa después de añadir los candidatos de fusión media por pares, los MVP cero se insertan al final hasta que se encuentra el número máximo de candidatos de fusión.
II. Bi-predicción
La predicción inter-imágenes utiliza la correlación temporal entre ellas para obtener una predicción compensada por el movimiento (MCP) para un bloque de muestras de imágenes. Para cada bloque, se puede encontrar un bloque correspondiente en una imagen previamente decodificada que sirve como predictor. La posición del bloque en una imagen previamente decodificada se indica mediante un vector de movimiento (Ax, Ay) donde Ax especifica el desplazamiento horizontal y Ay especifica el desplazamiento vertical relativo a la posición del bloque actual. Los vectores de movimiento (Ax, Ay) podrían tener una precisión de muestra fraccionaria para capturar con mayor exactitud el movimiento del objeto subyacente. La interpolación se aplica a las imágenes de referencia para obtener la señal de predicción cuando el vector de movimiento correspondiente tiene una precisión de muestra fraccional. La imagen decodificada previamente se denomina imagen de referencia y se indica mediante un índice de referencia At a una lista de imágenes de referencia.
En el caso de la bi-predicción (en comparación con la uni-predicción, que utiliza un conjunto de datos de movimiento), se utilizan dos conjuntos de datos de movimiento (Ax0, Ay0, At0 y Ax1, Ay1, At1) para generar dos MCP (pueden ser de diferentes imágenes, o de la misma imagen), que luego se combinan para obtener la MCP final. Por lo general, se obtiene por medio de un promedio. En el caso de la predicción ponderada, se pueden aplicar diferentes pesos a cada MCP. Las imágenes de referencia que se pueden utilizar en la bi-predicción se almacenan en dos listas distintas, la lista 0 y la lista 1.
III. Almacenamiento de la información de movimiento
Una vez realizada la compensación de movimiento, la información de movimiento (uni-predicción o bi-predicción) asociada al bloque de predicción se almacena en una memoria. La información de movimiento almacenada se utiliza como información de referencia de un bloque futuro (CU/PU), como por ejemplo a través de la predicción del vector de movimiento espacial o temporal.
En algunos ejemplos, el almacenamiento de la información de movimiento se realiza utilizando una matriz bidimensional de subbloques de información de movimiento o unidades de almacenamiento de información de movimiento. La resolución espacial de la matriz bidimensional puede ser diferente de la resolución espacial de la imagen a codificar. En un ejemplo, se utiliza una resolución inferior de la unidad de almacenamiento de información de movimiento para ahorrar espacio de memoria. Por ejemplo, muestras de luma de 16x16 corresponden a una única unidad de almacenamiento de información de movimiento, lo que significa que cada muestra de las muestras de luma de 16x16 tiene la misma información de movimiento y la misma información de movimiento se almacena en la única unidad de almacenamiento de información de movimiento que corresponde a estas muestras de luma de 16x16. En otras palabras, la unidad de almacenamiento de información de movimiento contiene información de predicción inter imágenes de un bloque de predicción asociado, que consiste en muestras de luma de 16x16.
Y se observa que las muestras de luma de 16x16 significa un conjunto de muestras de luma que es una matriz de muestras bidimensional, y tanto la anchura como la altura de la matriz de muestras bidimensional es 16. Una sola unidad de almacenamiento de información de movimiento también puede corresponder a muestras de luma de 8x8, muestras de luma de 4x4 u otras muestras de luma o croma de NxM, siendo N y M números enteros positivos. Es comprensible que un tamaño menor de la unidad de almacenamiento de información de movimiento permite una mejor predicción del vector de movimiento, pero cuesta más espacio de memoria. En la Fig. 9 se ejemplifica el almacenamiento del vector de movimiento para un bloque de predicción de tamaño 8x8 muestras de luma. La información de movimiento del bloque de predicción, etiquetado como Mv0, se almacena en cada unidad de almacenamiento de vectores de movimiento de 2x2.
III. Particionamiento de triángulo para la inter-predicción
Por ejemplo, el modo de particionamiento de triángulo sólo se aplica a las CU de 8x8 o más grandes y se codifican en modo de omisión o fusión. La bandera a nivel de ACU se señala para indicar si el modo de particionamiento de triángulo se aplica o no.
Una UC en modo de particionamiento de triángulo se divide uniformemente en dos particiones en forma de triángulo, utilizando la división diagonal o la división antidiagonal (Fig. 10). Cada partición de triángulo de la UC se inter-predice utilizando su propio movimiento; sólo se permite la uni-predicción para cada partición, es decir, cada partición tiene un vector de movimiento y un índice de referencia. La restricción de movimiento de uni-predicción se aplica para garantizar que, al igual que la bi-predicción convencional, sólo se necesitan dos predicciones compensadas de movimiento para cada CU. El movimiento de uni-predicción para cada partición se obtiene directamente de la lista de candidatos de fusión construida para la predicción de la fusión mencionada anteriormente, y la selección de un movimiento de unipredicción de un candidato de fusión dado en la lista es de acuerdo con el procedimiento “construcción de la lista de candidatos a la uni-predicción”. Después de predecir cada una de las particiones triangulares, los valores de la muestra a lo largo del borde diagonal o antidiagonal se ajustan utilizando un procesamiento de combinación con pesos adaptativos. Por último, se almacena el campo de movimiento de una UC predicha mediante el modo de particionamiento de triángulo.
(1) Construcción de la lista de candidatos uni-predicción
Dado un índice de candidato de fusión, el vector de movimiento de uni-predicción se obtiene de la lista de candidatos de fusión construida para la predicción de la fusión mencionada anteriormente, como ejemplo en la Fig. 11. Para un candidato de la lista, su vector de movimiento LX, con X igual a la paridad del valor del índice del candidato de fusión, se utiliza como vector de movimiento de uni-predicción para el modo de particionamiento de triángulo. Estos vectores de movimiento están marcados con “x” en la Fig. 11. En caso de que no exista un vector de movimiento LX correspondiente, el vector de movimiento L(1 -X) del mismo candidato en la lista de candidatos de predicción de fusión se utiliza como vector de movimiento de uni-predicción para el modo de particionamiento de triángulo.
(2) Combinación a lo largo del borde de la división triangular
Después de predecir cada partición de triángulo utilizando su propio movimiento, se aplica la mezcla a las dos señales de predicción para obtener muestras alrededor del borde diagonal o antidiagonal. En el proceso de combinación se utilizan los siguientes pesos: {7/8, 6/8, 5/8, 4/8, 3/8, 2/8, 1/8} para luma y {6/8, 4/8, 2/8} para croma, tal como se muestra en la Fig. 12.
(3) Almacenamiento del campo de movimiento
Por ejemplo, los vectores de movimiento de una UC codificada en modo de particionamiento de triángulo se almacenan en unidades 4x4. Dependiendo de la posición de cada unidad 4x4, se almacenan vectores de movimiento de unipredicción o de bi-predicción. Denotemos Mv1 y Mv2 como vectores de movimiento de uni-predicción para la división 1 y la división 2, respectivamente. Si una unidad 4x4 se encuentra en el área no ponderada mostrada en el ejemplo de la Fig. 12, se almacena Mv1 o Mv2 para esa unidad 4x4. De lo contrario (si la unidad 4x4 se encuentra en el área ponderada), se almacena un vector de movimiento de bi-predicción. El vector de movimiento de bi-predicción se obtiene de Mv1 y Mv2 de acuerdo con el siguiente proceso:
1) Si Mv1 y Mv2 provienen de diferentes listas de imágenes de referencia (una de L0 y otra de L1), entonces Mv1 y Mv2 se combinan simplemente para formar el vector de movimiento de bi-predicción.
2) En caso contrario, si Mv1 y Mv2 son de la misma lista, y sin pérdida de generalidad, supongamos que ambos son de L0. En este caso:
Si la imagen de referencia de Mv2 (o Mv1) aparece en L1, entonces ese Mv2 (o Mv1) se convierte en un vector de movimiento L1 utilizando esa imagen de referencia en L1. Después, los dos vectores de movimiento se combinan para formar el vector de movimiento de bi-predicción; de lo contrario, en lugar del movimiento de bi-predicción, sólo se almacena el movimiento de uni-predicción Mv1.
Como otro ejemplo, el almacenamiento del vector de movimiento para un modo de particionamiento de triángulo se ejemplifica en la Fig. 13.
IV. Particionamiento geométrico de los interbloques
Para el modo de particionamiento de triángulo, dos subbloques se dividen por una línea de separación, y la dirección de la línea de separación es de 45 grados o 135 grados. También son posibles otros ángulos de particionamiento y proporciones de particionamiento, que se denominan modo GEO (particionamiento geométrico) en la presente solicitud, por ejemplo, tal como se muestra en la Fig. 14.
En un ejemplo, el número total de particiones GEO podría ser de 140. Este número resultó ser óptimo a partir de un equilibrio entre la flexibilidad y el costo de los bits. La señalización adicional para GEO requiere la señalización para el ángulo ex, y el desplazamiento de la línea de separación relativamente al centro del bloque p.arepresenta un ángulo cuantificado entre 0 y 360 grados, con 11,25 grados de separación y p representa una distancia con 5 valores diferentes. El significado deay p se ejemplifica en la Fig. 15.
Es comprensible que, en el campo técnico de la codificación de vídeo, generalmente, un proceso de predicción realizado en el lado del codificador y realizado en el lado del decodificador son similares, excepto que la información lateral se analiza a partir de un flujo de bits en el lado del decodificador, mientras que la información lateral se determina mediante una regla preestablecida, como el método de optimización de la tasa de distorsión (RDO). Como ejemplo, se aplican los siguientes pasos para obtener muestras de predicción en el modo GEO en un lado del decodificador:
S101: Determinación de una proporción de particionamiento para un bloque actual.
La sintaxis del elemento geo_partición_idx se analiza a partir de un flujo de bits, que se utiliza como índice de la tabla de búsqueda que almacena los paresay p. En un ejemplo,ay p están representados por un índice de ángulo y un índice de distancia respectivamente.
S102: Obtener un primer modo de predicción para un primer subbloque y un segundo modo de predicción para un segundo subbloque.
En general, el mismo proceso de derivación de la lista de fusión que se utiliza para el modo de particionamiento de triángulo se utiliza para derivar los vectores de movimiento de cada partición (subbloque) del bloque GEO. Cada partición se predice únicamente mediante la uni-predicción. Se analizan dos elementos de sintaxis geo_merge_idx0 y geo_merge_idx1 del flujo de bits para indicar los modos de predicción de los dos subbloques respectivamente.
En un ejemplo, el primer modo de predicción no es idéntico al segundo modo de predicción. En un ejemplo, un modo de predicción (primer modo de predicción o segundo modo de predicción) puede ser un modo de inter-predicción, la información para un modo de inter-predicción puede comprender un índice de imagen de referencia y un vector de movimiento. En otro ejemplo, el modo de predicción puede ser un modo de intra-predicción, la información para un modo de intra-predicción puede comprender un índice de modo de intra-predicción.
S103: Generar un primer valor de predicción para el primer subbloque y un segundo valor de predicción para el segundo subbloque, utilizando el primer modo de predicción y el segundo modo de predicción, respectivamente.
S104: Obtener los valores combinados de las muestras de predicción según la combinación del primer valor de predicción y el segundo valor de predicción, según la división que se describe en S101.
A modo de ejemplo, más concretamente, la etapa S104 comprende:
S104-1: Para una muestra de luma en el bloque actual, se calcula una distancia de muestra (dist_muestra), la distancia de muestra representa una distancia de la muestra de luma a la línea de separación del bloque actual determinada en S101.
En un ejemplo, una distancia de muestra dist_muestra se calcula de acuerdo con la fórmula:
dist_muestra = ((x<<1) 1)*Dis[ánguloIdx1] ((y<1) 1))*Dis[ánguloIdx2] - desplazamiento(distanciaIdx).
• ánguloIdx1 y ánguloIdx2 se obtienen a partir del flujo de bits o se obtienen en base a otra información obtenida del flujo de bits, por ejemplo, derivada en base a la sintaxis del elemento geo_partición_idx, como el índice de ángulo en el paso S101; ánguloIdx1 y ánguloIdx2 representan parámetros trigonométricos cuantificados de la línea de separación.
• x e y son las distancias horizontal y vertical de una muestra con respecto a la muestra superior izquierda del bloque actual.
• desplazamiento(distanciaIdx) es una función de un valor de índice (distanciaIdx), el valor de índice se obtiene del flujo de bits o se obtiene en base a otra información obtenida a partir del flujo de bits, por ejemplo, se obtiene en base a la sintaxis del elemento geo_partición_idx, como el índice de distancia en el paso S101.
• Dis[] es una tabla de búsqueda predefinida.
En otro ejemplo, dist_muestra y pesoMuestra1 se pueden obtener de acuerdo con las siguientes ecuaciones:
- nCbR = (W > H) ? (W / H) : (H / W)
- dist_muestra = (W > H) ? (Clip3(0, 8, (x / nCbR - y) 4)) : (Clip3(0, 8, (x - y / nCbR) 4)),
o
- dist_muestra = (W > H) ? (Clip3(0, 8, (H - 1 - x / nCbR - y) 4) : (Clip3(0, 8, (W - 1 - x - y / nCbR) 4).
donde W es la anchura del bloque actual, H es la altura del bloque actual.
Se observa que los 2 ejemplos anteriores muestran dos métodos de cálculo según la aritmética de enteros. Las realizaciones de la invención no se limitan a estos ejemplos de cálculo de la distancia de muestra.
En un ejemplo, dist_muestra puede ser una distancia de línea perpendicular entre una muestra situada en (x, y) y la línea de separación. En otro ejemplo, hacer una línea horizontal o una línea vertical a través de una muestra situada en (x, y). La línea horizontal o la línea vertical tendrá un punto de intersección con la línea de separación. dist_muestra puede ser una distancia entre la muestra situada en (x, y) y el punto de intersección.
S104-2: Una operación de combinación se implementa como una función con dist_muestra como entrada, y pesoMuestra1 o pesoMuestra2 como salida.
El dist_muestra se utiliza para calcular los factores de ponderación, los factores de ponderación se utilizan para un valor de predicción combinado que se obtiene al combinar el primer valor de predicción y el segundo valor de predicción correspondientes al primer subbloque y al segundo subbloque respectivamente. En un ejemplo, los factores de ponderación se denotan como pesoMuestra1 y pesoMuestra2, refiriéndose a los valores de peso correspondientes al primer valor de predicción y al segundo valor de predicción respectivamente. En un ejemplo, pesoMuestra1 se calcula de acuerdo con dist_muestra, pesoMuestra2 se calcula de acuerdo con la fórmula pesoMuestra2 = T -pesoMuestra1, donde T es una constante predefinida. En un ejemplo, la constante predefinida T es igual a 8, lo que significa que pesoMuestra1 y pesoMuestra2 pueden tener valores en un intervalo de valores entre 0 y 8 (inclusive 0 y 8). En otro ejemplo, la constante predefinida T es igual a 16.
De acuerdo con un ejemplo, se obtiene un primer factor de ponderación pesoMuestra1 de acuerdo con dist_muestra y una tabla de búsqueda. En un ejemplo, la tabla de búsqueda se utiliza para almacenar los coeficientes del filtro. En otras palabras, la operación de combinación se implementa de acuerdo con una tabla de búsqueda. En este ejemplo, se puede utilizar una función de dist_muestra como valor de índice para la tabla de búsqueda. Dicha función puede ser un particionamiento o multiplicación con una operación de número constante, un desplazamiento a la derecha de una operación de cantidad constante, una toma del valor absoluto o una operación de recorte o una combinación de ellas.
La operación de combinación se aplica a una muestra de acuerdo con el valor de una indicación en un flujo de bits, o a una muestra de acuerdo con el valor de una indicación en un flujo de bits.
En un ejemplo, pesoMuestra1 = Clip3(0, 8, f(dist_muestra)). La función f() puede ser una división/suma/multiplicación con una operación de número constante, un desplazamiento a la derecha de una operación de cantidad constante, toma de la operación de valor absoluto o una operación de recorte o una combinación de ellas.
En un ejemplo, pesoMuestra1 (o pesoMuestra2) = Clip3(0, 8, dist_muestra).
En un ejemplo, pesoMuestra1 (o pesoMuestra2) = Clip3(0, 8, dist_muestra+4);
En un ejemplo, pesoMuestra1 (o pesoMuestra2) = dist_muestra == 4 ? 4 : dist_muestra < 4 ? 0 : 8;
En un ejemplo, pesoMuestra1 (o pesoMuestra2) = Clip3(0, 8, (dist_muestra - 4)*K dist_muestra);
En un ejemplo, pesoMuestra1 (o pesoMuestra2) = dist_muestra == 0 ? 4 : dist_muestra < 0 ? 0 : 8;
En un ejemplo, pesoMuestra1 (o pesoMuestra2) = Clip3(0, 8, dist_muestra*K Clip3(0, 8, dist_muestra+4)), K es un número entero con un valor mayor que 0. Se observa que la operación de combinación se vuelve más corta (por lo tanto, más nítida) con el aumento de K. Por ejemplo, cuando K = 4, entonces la segunda operación de combinación se hace idéntica a - “pesoMuestra = dist_muestra == 0 ? 4 : dist_muestra < 0 ? 0 : 8”, que se ejemplificó en la Fig. 16. De acuerdo con un ejemplo, el valor de un indicador en un flujo de bits indica un valor de K.
En un ejemplo, la operación de combinación puede implementarse como una tabla de búsqueda, como las tablas que se ejemplifican en la Fig. 17. En un ejemplo, el peso de la muestra se puede obtener como geoFilter[idx] donde idx se obtiene como una función de sampleDist y geoFilter es una matriz lineal unidimensional de pesos de filtro. En un ejemplo, idx = min((abs(dist_muestra) 8) >> 4, maxIdx), donde maxIdx es el valor máximo que puede asumir idx.
S105: almacenar la información del modo de predicción (por ejemplo, la información de movimiento que comprende los vectores de movimiento o la información intra-predicción) del bloque actual de acuerdo con la división que se describe en el paso S101 y de acuerdo con el método de combinación que se describe en el paso 104.
En concreto, en una primera realización del proceso de decodificación para el modo de predicción GEO:
Este proceso se invoca cuando se decodifica una unidad de codificación con MergeTriangleFlag[xCb][yCb] igual a 1 o con geo_flag[xCb][yCb] igual a 1.
Las entradas a este proceso son:
- una ubicación de luma (xCb, yCb) que especifica la muestra superior izquierda del bloque de codificación actual en relación con la muestra de luma superior izquierda de la imagen actual,
- una variable anchuraCb que especifica la anchura del bloque de codificación actual en muestras de luma, - una variable alturaCb que especifica la altura del bloque de codificación actual en muestras de luma,
- los vectores de movimiento luma con una precisión de 1/16 de muestra fraccionada mvA y mvB,
- los vectores de movimiento de croma mvCA y mvCB,
- los índices de referencia idxRefA y idxRefB,
- los indicadores de la lista de predicción listaPredBanderaA y listaPredBanderaB.
Las salidas de este proceso son:
- una matriz (anchuraCb)x(alturaCb) muestrasPred<L>de muestras de predicción de luma,
- una matriz (anchuraCb / 2)x(alturaCb / 2) muestrasPred<Cb>de muestras de predicción de croma para el componente Cb,
- una matriz (anchuraCb / 2)x(alturaCb / 2) muestrasPred<Cr>de muestras de predicción de croma para el componente Cr.
Dejar que muestrasPredLA<L>y muestrasPredLB<L>sean matrices (anchuraCb)x(alturaCb) de valores de muestra de luma previstos y, muestrasPredLA<Cb>, muestrasPredLB<Cb>, muestrasPredLA<Cr>y muestrasPredLB<Cr>sean matrices (anchuraCb / 2)x(alturaCb / 2) de valores de muestra de croma previstos.
Las muestrasPred<L>, muestrasPred<Cb>y muestrasPred<Cr>se obtienen mediante los siguientes pasos ordenados:
1. Para que N sea cada uno de A y B, se aplica lo siguiente:
- La imagen de referencia, que consiste en una matriz bidimensional ordenada imgRefLN<L>de muestras de luma y dos matrices bidimensionales ordenadas imgRefLN<Cb>y imgRefLN<Cr>de muestras de croma, se obtiene b con X establecido igual a listaPredBanderaN e idxRefX establecido igual a idxRefN como entrada.
- La matriz muestrasPredLN<L>se obtiene con la ubicación de luma (xCb, yCb), la anchura del bloque de codificación de luma anchuraSb establecida igual a anchuraCb, la altura del bloque de codificación de luma alturaSb establecida igual a alturaCb, el desplazamiento del vector de movimiento mvDesplazamiento ajustado igual a (0, 0), el vector de movimiento mvLX ajustado igual a mvN y la matriz de referencia imgRefLX<L>establecida igual a imgRefLN<L>, la variable banderaBdof establecida igual a FALSO y la variable cIdx establecida igual a 0 como entradas.
- La matriz muestrasPredLN<Cb>se obtiene con la ubicación de luma (xCb, yCb), el ancho del bloque de codificación anchuraSb establecido igual a anchuraCb / 2, la altura del bloque de codificación alturaSb establecida igual a alturaCb / 2, el desplazamiento del vector de movimiento mvDesplazamiento establecido igual a (0, 0), el vector de movimiento mvLX establecido igual a mvCN, y la matriz de referencia imgRefLX<Cb>establecida igual a imgRefLN<Cb>, la variable banderaBdof establecida igual a FALSO y la variable cIdx establecida igual a 1 como entradas.
- La matriz muestrasPredLN<Cr>se obtiene con la ubicación de luma (xCb, yCb), el ancho del bloque de codificación anchuraSb establecido igual a anchuraCb / 2, la altura del bloque de codificación alturaSb establecida igual a alturaCb / 2, el desplazamiento del vector de movimiento mvDesplazamiento establecido igual a (0, 0), el vector de movimiento mvLX establecido igual a mvCN, y la matriz de referencia imgRefLX<Cr>establecida igual a imgRefLN<Cr>, la variable banderaBdof establecida igual a FALSO y la variable cIdx establecida igual a 2 como entradas.
2. Si geo_flag[xCb][yCb] es igual a 1, las variables relacionadas con el particionamiento geométrico ánguloIdx y distanciaIdx se establecen de acuerdo con el valor de geo_partitioning_idx[xCb][yCb] tal como se especifica en la Tabla 1.
a. Se activa el proceso de derivación del peso de la muestra para el modo de fusión de particionamiento geométrico. La entrada al proceso son tres matrices ordenadas pesoMuestraL, pesoMuestraC y pesoMovimiento de tamaño (anchuraCb)x(alturaCb), (anchuraCb/ 2)x(alturaCb/ 2) y (anchuraCb/4)x(alturaCb/4) respectivamente, así como las variables ánguloIdx, distanciaIdx, anchuraCb y alturaCb.
b. Las muestras de predicción dentro del bloque de codificación luma actual, muestrasPredL[xL][yL] con xL = 0..anchuraCb - 1 y yL = 0..alturaCb - 1, se obtienen al ejecutar el proceso de predicción de muestras ponderadas para el modo de fusión de particionamiento geométrico con la anchura del bloque de codificación nCbW establecida igual a anchuraCb, la altura del bloque de codificación nCbH establecida igual a alturaCb, las matrices de muestras muestrasPredLAL, muestrasPredLBL, pesoPredL y cIdx establecidas igual a 0 como entradas.
c. Las muestras de predicción dentro del bloque de codificación Cb del componente cromático actual, muestrasPredCb[xC][yC] con xC = 0..anchuraCb / 2 - 1 y yC = 0..alturaCb / 12 - 1, se obtienen al ejecutar el proceso de predicción de muestras ponderadas para el modo de fusión de particionamiento geométrico con la anchura del bloque de codificación nCbW establecida igual a anchuraCb / 2, la altura del bloque de codificación nCbH establecida igual a alturaCb / 2, las matrices de muestras muestrasPredLACb, muestrasPredLBCb, pesoPredC y cIdx establecidas igual a 1 como entradas.
d. Las muestras de predicción dentro del bloque de codificación Cr del componente de croma actual, muestrasPredCr[xC][yC] con xC = 0..anchuraCb / 2 - 1 e yC = 0..alturaCb / 12 - 1, se obtienen al ejecutar el proceso de predicción de muestras ponderadas para el modo de fusión de particionamiento geométrico con la anchura del bloque de codificación nCbW establecida igual a anchuraCb / 2, la altura del bloque de codificación nCbH establecida igual a alturaCb / 2, las matrices de muestras muestrasPredLACr, muestrasPredLBCr, pesoPredC y cIdx establecidas igual a 2 como entradas.
e. El proceso de almacenamiento de vectores de movimiento para el modo de fusión geométrica se activa con la ubicación del bloque de codificación de luma (xCb, yCb), la anchura del bloque de codificación de luma anchuraCb, la altura del bloque de codificación de luma alturaCb, la matriz de muestras pesoMovimiento, los vectores de movimiento de luma mvA y mvB, los índices de referencia idxRefA y idxRefB, y los indicadores de la lista de predicción listaPredBanderaA y listaPredBanderaB como entradas.
Proceso de mapeo de imágenes de referencia para el modo de fusión de triángulo
Las entradas a este proceso son:
- una variable X que representa una lista de referencia que es igual a 0 o 1,
- un índice de referencia idxRefN.
La salida de este proceso es:
- un índice de referencia idxRefTemp.
La variable imgRefPoc se obtiene de la siguiente manera:
imgRefPoc = (X = = 0) ? ImgRefList[0][idxRefN] : ImgRefList[1][idxRefN] (8-878)
La lista de imágenes de referencia imgRefListaTemp se obtiene de la siguiente manera:
imgRefListaTemp = (X = = 0) ? ImgRefList[1] : ImgRefList[0] (8-879)
La variable idxRefTemp se obtiene de la siguiente manera:
- La variable detenerMapeo se establece igual a FALSO.
- Para la variable idxRef<m>con m = 0.. NumIdxRefActivos[1] - 1, se aplica lo siguiente hasta que detenerMapeo sea igual a FALSO:
idxRefTemp = (imgRefListaTemp[idxRef<m>] = = imgRefPoc) ? idxRef<m>: -1 (8-880)
detenerMapeo = (idxRefTemp != -1) ? VERDADERO: FALSO (8-881)
Proceso de derivación del peso de la muestra para el modo de fusión de particionamiento geométricoLas entradas a este proceso son:
- dos variables nCbW y nCbH que especifican la anchura y la altura del bloque de codificación actual, - dos variables ánguloIdx y distanciaIdx que especifican los valores de búsqueda de ángulo y distancia del modo de particionamiento geométrico actual,
- una matriz (nCbW)x(nCbH) pesoMuestra<L>,
- una matriz (nCbW/ 2)x(nCbH/ 2) pesoMuestra<C>,
- una matriz (nCbW/4)x(nCbH/4) pesoMovimiento.
La salida de este proceso son las mismas tres matrices pesoMuestra<L>, pesoMuestra<C>y pesoMovimiento de valores de peso por muestra que tienen un intervalo de 0 ... 8.
1. Los pesos de combinación de luma almacenados en pesoMuestra<L>para el modo de particionamiento geométrico actual se obtienen de la siguiente manera:
Se establece el valor de las siguientes variables:
- wIdx se establece en log2(nCbW) - 3,
- hIdx se establece en log2(nCbH) - 3,
- pasoDesplazamiento se establece en 64,
- las siguientes variables se establecen de acuerdo con la comparación de (wIdx >= hIdx):
- whRratio = (wIdx >= hIdx) ? wIdx - hIdx : hIdx - wIdx (8882-)
- mayorWIsH = (wIdx >= hIdx) ? verdadero : falso (8883-)
- pasoEscala = (wIdx >= hIdx) ? (1 << hIdx) : (1 << wIdx) (8884-)
- desplazamientoX se establece en ánguloIdx
- desplazamientoY se establece en (desplazamientoX 8)%32
- ánguloN se establece en:
ánguloN = ánguloIdx si ánguloIdx >= 0 && ánguloIdx <=8, ánguloN = 16 - ánguloIdx si ánguloIdx > 8 && ánguloIdx<= 16, ánguloN = ánguloIdx - 16 si ánguloIdx > 16 && ánguloIdx <=24 ánguloN = 32 - ánguloIdx en caso contrario,
- Además, ánguloN se establece en el siguiente valor, dependiendo de mayorWIsH:
ánguloN = (mayorWIsH) ? 8 - ánguloN : ánguloN
- disPaso se establece de acuerdo con los valores de whRatio y ánguloN tal como se especifica en la Tabla 2 y más adelante,
tamañoPaso = disPaso pasoDesplazamiento
- rho se ajusta al siguiente valor utilizando la tabla de búsqueda denotada como Dis, especificada en la Tabla 3:
- rho = distanciaIdx*tamañoPaso*pasoEscala nCbW*Dis[desplazamientoX] nCbH*Dis[desplazamientoY]. (8-885)
Para cada posición de la muestra x=0... nCbW - 1 e y=0... nCbH - 1 el valor de pesoMuestra<L>[x][y] se obtiene de la siguiente manera:
- la distancia distDesdeLínea se calcula utilizando la tabla de búsqueda denotada como Dis, especificada en la Tabla 3 de la siguiente manera:
- distDesdeLínea = ((x<<1) 1)*Dis[desplazamientoX] ((y<1) 1))*Dis[desplazamientoY] - rho.
(8-886)
- Una distancia escalada distEscalada se obtiene como:
- distEscalada = min((abs(distDesdeLínea) 8) >> 4, 14). (8-887)
El valor de pesoMuestra<L>[x][y] se establece de acuerdo con la tabla de búsqueda de pesos del filtro, denotada como GeoFilter especificada en
- Tabla 4 como:
pesoMuestra<L>[x][y] = GeoFilter[distEscalada] si distDesdeLínea <= 0
pesoMuestra<L>[x][y] = 8 - GeoFilter[distEscalada] si distDesdeLínea > 0
2. Los pesos de croma almacenados en pesoMuestra<C>para el modo de particionamiento geométrico actual se obtienen de la siguiente manera:
Para cada posición de la muestra x=0... (nCbW/ 2) - 1 e y=0... (nCbH/ 2) - 1 el valor de pesoMuestra<c>[x][y] se obtiene de la siguiente manera:
pesoMuestra<C>[x][y] = pesoMuestra<L>[(x<<1)][(y<<1)]
3. Los pesos de movimiento almacenados en la matriz pesoMovimiento para el modo de particionamiento geométrico actual se obtienen de la siguiente manera:
- Se establecen las siguientes variables:
umbralEscala = ((log2(nCbW) log2(nCbH)) >> 1) - 1
umbralInferior = 32 >> umbralEscala
umbralSuperior = 32 - umbralInferior
Para cada posición de la muestra x=0... (nCbW/4) - 1 e y=0... (nCbH/4) - 1 el valor de pesoMovimiento[x][y] se obtiene de la siguiente manera:
Cnt = pesoMuestra<L>[(x<<2)][(y<2)]
pesoMuestra<L>[(x<<2) 3][(y<2)]
pesoMuestra<L>[(x<<2)][(y<2) 3]
pesoMuestra<L>[(x<<2) 3][(y<2) 3]
El valor de pesoMovimiento[x][y] se establece en:
pesoMovimiento[x][y] = 0, si Cnt <= umbralInferior
pesoMovimiento[x][y] = 1 , si Cnt >= umbralSuperior
pesoMovimiento[x][y] = 2 , en caso contrario
Proceso de predicción de muestras ponderadas para el modo de fusión de particionamiento geométricoLas entradas a este proceso son:
- dos variables nCbW y nCbH que especifican la anchura y la altura del bloque de codificación actual, - dos matrices (nCbW)x(nCbH) muestrasPredLA y muestrasPredLB,
- una matriz (nCbW)x(nCbH) pesoMuestra,
- una variable cIdx que especifica el índice del componente de color.
La salida de este proceso es la matriz (nCbW)x(nCbH) muestrasPb de valores de muestra de predicción.
La variable profundidadBit se obtiene de la siguiente manera:
- Si cIdx es igual a 0, profundidadBit se establece igual a ProfundidadBit<Y>.
- En caso contrario, profundidadBit se establece igual a ProfundidadBit<C>.
Las variables cambio1 y desplazamiento1 se obtienen de la siguiente manera:
- La variable cambio1 se establece igual a Max(5, 17 - profundidadBit).
- La variable desplazamiento1 se establece igual a 1 << (cambio1 - 1).
Los valores de la muestra de predicción se obtienen de la siguiente manera:
muestrasPb[x][y] =
Clip3(0, (1 << profundidadBit) - 1,
(muestrasPredLA[x][y] * pesoMuestra[x][y]
+ muestrasPredLB[x][y] * (8 - pesoMuestra[x][y]) desplazamiento1) >> cambio1)
Almacenamiento de vectores de movimiento para el modo de fusión de particiones geométricasEste proceso se activa cuando se decodifica una unidad de codificación con geo_flag[xCb][yCb] igual a 1.
Las entradas a este proceso son:
- una ubicación de luma (xCb, yCb) que especifica la muestra superior izquierda del bloque de codificación actual en relación con la muestra de luma superior izquierda de la imagen actual,
- una variable anchuraCb que especifica la anchura del bloque de codificación actual en muestras de luma, - una variable alturaCb que especifica la altura del bloque de codificación actual en muestras de luma, - un matriz pesoMovimiento de tamaño (anchuraCb/4)x(alturaCb/4) que contiene los índices de asignación de movimiento,
- los vectores de movimiento luma con una precisión de 1/16 de muestra fraccionada mvA y mvB,
- los índices de referencia idxRefA y idxRefB,
- los indicadores de la lista de predicción listaPredBanderaA y listaPredBanderaB.
Las variables numSbX y numSbY que especifican el número de bloques 4x4 en el bloque de codificación actual en dirección horizontal y vertical se establecen igual a numSbX = anchuraCb >> 2 y numSbY = alturaCb >> 2.
La variable minSb se establece igual a min(numSbX, numSbY).
La variable idxRefTempA se obtiene al ejecutar el proceso de mapeo de imágenes de referencia para el modo de fusión de triángulo con X establecido igual a listaPredBanderaA y idxRefN establecido igual a idxRefA como entradas. La variable idxRefTempB se obtiene al ejecutar el proceso de mapeo de imágenes de referencia para el modo de fusión de triángulo con la X establecida igual a listaPredBanderaB y idxRefN establecida igual a idxRefB como entradas.
Para cada subbloque 4x4 en el índice del subbloque (xSbIdx, ySbIdx) con xSbIdx = 0..numSbX - 1, e ySbIdx = 0..numSbY - 1, se aplica lo siguiente:
- Si pesoMovimiento[xSbIdx][ySbIdx] es igual a 0, se aplica lo siguiente:
banderaPredL0 = (listaPredBanderaA = = 0) ? 1 : 0 (8-888)
banderaPredL1 = (listaPredBanderaA = = 0) ? 0 : 1 (8-889)
idxRefL0 = (listaPredBanderaA = = 0) ? idxRefA : -1 (8-890)
idxRefL1 = (listaPredBanderaA = = 0) ? -1 : idxRefA (8-891)
mvL0[0] = (listaPredBanderaA = = 0) ? mvA[0] : 0 (8-892)
mvL0[1] = (listaPredBanderaA = = 0) ? mvA[1] : 0 (8-893)
mvL1[0] = (listaPredBanderaA = = 0) ? 0 : mvA[0] (8-894)
mvL1[1] = (listaPredBanderaA = = 0) ? 0 : mvA[1] (8-895)
- En caso contrario, si pesoMovimiento[xSbIdx][ySbIdx] es igual a 1, se aplica lo siguiente: banderaPredL0 = (listaPredBanderaB = = 0) ? 1 : 0 (8-896)
banderaPredL1 = (listaPredBanderaB = = 0) ? 0 : 1 (8-897)
idxRefL0 = (listaPredBanderaB = = 0) ? idxRefB : -1 (8-898)
idxRefL1 = (listaPredBanderaB = = 0) ? -1 : idxRefB (8-899)
mvL0[0] = (listaPredBanderaB = = 0) ? mvB[0] : 0 (8-900)
mvL0[1] = (listaPredBanderaB = = 0) ? mvB[1] : 0 (8-901)
mvL1 [0] = (listaPredBanderaB = = 0) ? 0 : mvB[0] (8-902)
mvL1[1] = (listaPredBanderaB = = 0) ? 0 : mvB[1] (8-903)
- En caso contrario (pesoMovimiento[xSbIdx][ySbIdx] es igual a 2), se aplica lo siguiente:
Si listaPredBanderaA listaPredBanderaB es igual a 1,
banderaPredL0 = 1 (8-904) banderaPredL1 = 1 (8-905) idxRefL0 = (listaPredBanderaA = = 0) ? idxRefA : idxRefB (8-906) idxRefL1 = (listaPredBanderaA = = 0) ? idxRefB : idxRefA (8-907) mvL0[0] = (listaPredBanderaA = = 0) ? mvA[0] : mvB[0] (8-908) mvL0[1] = (listaPredBanderaA = = 0) ? mvA[1] : mvB[1] (8-909)
mvL1[0] = (listaPredBanderaA = = 0) ? mvB[0] : mvA[0] (8-910)
mvL1 [1 ] = (listaPredBanderaA = = 0) ? mvB[1] : mvA[1 ] (8-911)
- Si listaPredBanderaA listaPredBanderaB es igual a 0, se aplica lo siguiente: banderaPredL0 = 1 (8-912) banderaPredL1 = (idxRefTempA = = -1 && idxRefTempB = = -1) ? 0 : 1 (8-913)
idxRefL0 = (idxRefTempB != -1) ? idxRefA : (8-914) ((idxRefTempA != -1) ? idxRefB : idxRefA)
idxRefL1 = (idxRefTempB != -1) ? idxRefTempB : (8-915) ((idxRefTempA != -1) ? idxRefTempA : -1)
mvL0[0] = (idxRefTempB != -1) ? mvA[0] : (8-916) ((idxRefTempA != -1) ? mvB[0] : mvA[0])
mvL0[1] = (idxRefTempB != -1) ? mvA[1] : (8-917) ((idxRefTempA != -1) ? mvB[1] : mvA[1])
mvL1 [0] = (idxRefTempB != -1) ? mvB[0] : (8-918) ((idxRefTempA != -1) ? mvA[0] : 0)
mvL1[1] = (idxRefTempB != -1) ? mvB[1] : (8-919) ((idxRefTempA != -1) ? mvA[1] : 0)
- Si listaPredBanderaA listaPredBanderaB es igual a 2, se aplica lo siguiente: banderaPredL0 = (idxRefTempA = = -1 && idxRefTempB = = -1) ? 0 : 1 (8-920) banderaPredL1 = 1 (8-921)
idxRefL0 = (idxRefTempB != -1) ? idxRefTempB : (8-922) ((idxRefTempA != -1) ? idxRefTempA : -1)
idxRefL1 = (idxRefTempB != -1) ? idxRefA : (8-923) ((idxRefTempA != -1) ? idxRefB : idxRefA)
mvL0[0] = (idxRefTempB != -1) ? mvB[0] : (8-924) ((idxRefTempA != -1) ? mvA[0] : 0)
mvL0[1] = (idxRefTempB != -1) ? mvB[1] : (8-925) ((idxRefTempA != -1) ? mvA[1] : 0)
mvL1 [0] = (idxRefTempB != -1) ? mvA[0] : (8-926) ((idxRefTempA != -1) ? mvB[0] : mvA[0])
mvL1 [1 ] = (idxRefTempB != -1) ? mvA[1 ] : (8-927) ((idxRefTempA != -1) ? mvB[1] : mvA[1])
- Las siguientes asignaciones se realizan para x = 0..3 e y = 0..3:
MvL0[(xSbIdx << 2) x][(ySbIdx << 2) y] = mvL0 (8-928) MvL1 [(xSbIdx << 2) x][(ySbIdx << 2) y] = mvL1 (8-929) IdxRefL0[(xSbIdx << 2) x][(ySbIdx << 2) y] = idxRefLO (8-930)
RedIdxLI [(xSbIdx << 2) x][(ySbIdx << 2) y] = idxRefL1 (8-931)
BanderaPredL0[(xSbIdx << 2) x][(ySbIdx << 2) y] = banderaPredL0 (8-932) BanderaPredL1 [(xSbIdx << 2) x][(ySbIdx << 2) y] = banderaPredL1 (8-933)Tabla 1 - Especificación de los valores ánguloIdx y distancialdx basados en el valor geo_partición_idx.
Tabla 2 - Especificación de la distancia de paso disPaso de acuerdo con los valores de whRatio y ánguloN.
Tabla 3 - Tabla de búsqueda Dis para la derivación de la distancia de particionamiento geométrico.
Tabla 4 - Tabla de búsqueda de pesos del filtro GeoFilter para la derivación de los pesos del filtro de particionamiento geométrico.
En una segunda realización del proceso de decodificación para el modo de predicción GEO, el proceso de almacenamiento de información de movimiento es el siguiente:
Subdividir el bloque de codificación en unidades de almacenamiento de movimiento K, un tamaño del bloque de codificación es MxN muestras de luma, en un ejemplo, cada unidad de almacenamiento de movimiento tiene un mismo tamaño de (M/K) x (N/K) muestras de luma. En un ejemplo, un valor de K es 4, un valor de M es 16 y un valor de N es 16, en este ejemplo, cada unidad de almacenamiento de movimiento está asociada con un subbloque de luma de tamaño 4x4. La posición de luma superior izquierda (x,y) del bloque de codificación se asocia con la posición superior izquierda (x/K, y/K) del bloque de almacenamiento de movimiento.
Para una unidad de almacenamiento de movimiento, decidir si se almacena una primera información de movimiento de uni-predicción, una segunda información de movimiento de uni-predicción, o una información de movimiento de bipredicción, de acuerdo con un primer peso de muestra o un segundo peso de muestra. En un ejemplo, la decisión es de acuerdo con una distancia para una muestra en la unidad de almacenamiento de movimiento a un límite de partición. La muestra puede ser una muestra entera o una muestra fraccionada. La línea de separación se define como la línea de separación del modo de particionamiento geométrico. De acuerdo con un ejemplo, K es igual a 4 (una anchura y una altura de la unidad de almacenamiento de movimiento en términos de muestras de luma). En la Fig. 13 se muestra un ejemplo de división de un bloque de codificación en unidades de almacenamiento de movimiento.
De acuerdo con un ejemplo, la distancia entre una muestra y un límite de separación se puede calcular de la siguiente manera: Para una muestra de luma en un bloque, se calcula una distancia de muestra (dist_muestra), la distancia de muestra representa una distancia de la muestra de luma a la línea de separación del bloque.
En un ejemplo, una distancia de muestra dist_muestra se calcula de acuerdo con la fórmula:
dist_muestra = ((x<<1) 1)*Dis[ánguloIdx1] ((y<1) 1))*Dis[ánguloIdx2] - desplazamiento(distanciaIdx).
• El valor de ánguloIdx1 y el valor de ánguloIdx2 se obtienen a partir del flujo de bits o se obtienen / calculan en base a otra información obtenida del flujo de bits, ánguloIdx1 y ánguloIdx2 representan parámetros trigonométricos cuantificados de una línea de separación, el primero de tipo coseno y el segundo de tipo seno.
• x e y son las coordenadas -x e -y de una muestra con respecto a la muestra superior izquierda de un bloque de codificación.
• desplazamiento(distanciaIdx) es un valor de desplazamiento que es una función de un valor de índice (distanciaIdx), el valor de índice se obtiene del flujo de bits o se obtiene / calcula en base a otra información obtenida a partir del flujo de bits.
• Dis[] es una tabla de búsqueda. La Dis[ánguloIdx1 ] describe el cambio en la distancia de la muestra (dist_muestra) con respecto a un aumento de la unidad (un aumento del valor 1) en la coordenada -x de dicha muestra. La Dis[ánguloIdx2] describe el cambio en la distancia de la muestra (dist_muestra) con respecto a un incremento unitario (un incremento de valor 1) en la coordenada -y de dicha muestra.
Hay que tener en cuenta que el coordinador del ejemplo anterior es de acuerdo con la posición superior izquierda del bloque de codificación actual, no de acuerdo con la posición superior izquierda de
Se observa que el ejemplo anterior muestra un método de cálculo de acuerdo con la aritmética de enteros. Las realizaciones de la invención no se limitan a esos ejemplos de cálculo de dist_muestra.
Se observa que, de acuerdo con el ejemplo anterior, el coordinador de la muestra está desplazado a la izquierda un bit ((x<<1), (y<<1)). En este ejemplo, el cálculo de la distancia se puede realizar con una precisión de / muestra para la aritmética de enteros, por ejemplo, puede calcularse la posición de la muestra en (0,5, 0,5).
La Fig. 18 muestra el ejemplo de almacenamiento de movimiento 4x4 con la posición entera y la posición de medio píxel (posición fraccional, límite de partición y la distancia entre una muestra y el límite de partición (dist_muestra)
En un ejemplo, la decisión se refiere a si se almacena una primera información de movimiento de uni-predicción, etiquetada Mv0, una segunda información de movimiento de uni-predicción, etiquetada Mv1, o una información de movimiento combinada, como una información de movimiento de bi-predicción, etiquetada Mv2, se toma, de acuerdo con los siguientes pasos. En un ejemplo, la decisión se ejecuta para una unidad de almacenamiento de movimiento; en otro ejemplo, la decisión se ejecuta para al menos dos (o todas) unidades de almacenamiento de movimiento contenidas en el bloque de codificación. La coordenada superior izquierda de una unidad de almacenamiento de movimiento está dada por (x/K, y/K), y la anchura y la altura de la unidad de almacenamiento de movimiento está dada por K en términos de muestras de luma.
Si la distancia calculada dist_muestra es menor y/o igual que un umbral, se almacena una información de movimiento combinada (Mv2) para la unidad de almacenamiento de movimiento. El umbral puede ser un número fijo o puede derivarse de forma adaptativa en función del ángulo de la línea de separación, el aspecto racial del bloque de codificación actual u otros parámetros; de lo contrario (si la distancia dist_muestra es mayor o igual que el umbral), se comprueba el signo de dist_muestra:
Si la distancia de muestreo es negativa (o positiva), la MV0 (o MV1) se almacena para la unidad de almacenamiento de movimiento actual,
En caso contrario (la dist_muestra es positiva (o negativa)), MV1 (o MV0) se almacenan para la unidad de almacenamiento de movimiento actual.
La Fig. 19 muestra un ejemplo de almacenamiento de movimiento en base al método mencionado.
En comparación con otros métodos de almacenamiento de movimiento, este método sólo necesita calcular una muestra de distancia de cada unidad de almacenamiento de movimiento, lo que reduce la complejidad del cálculo.
En una tercera realización del proceso de decodificación para el modo de predicción GEO, tal como se muestra en la Fig. 20, es el siguiente:
Para la técnica de codificación de vídeo que permite la bi-predicción, se utilizan dos listas de fotogramas de referencia, por ejemplo, Lista0 y Lista1, o la lista de fotogramas de referencia delanteros y la lista de fotogramas de referencia traseros. Como ejemplo, la información de movimiento comprende:
(1) Indicador de Predicción L0 (PFL0) e Indicador de Predicción L1 (PFL1), donde cuando la Indicador de Predicción L0 es verdadera, la Lista0 se utilizará en una inter-predicción, de lo contrario (el Indicador de Predicción L0 es falso), la Lista0 no se utilizará. El Indicador de Predicción L1 es similar.
(2) Índice de Referencia L0 (RIL0) e Índice de Referencia L1 (RIL1), el Índice de Referencia L0 se utiliza para indicar qué fotogramas de referencia (candidato) de la Lista0 se utiliza como fotogramas de referencia actual. El Índice de Referencia L 1 es similar. Y en una aplicación factible, el Índice de Referencia L0 es igual a -1, lo que significa que no se utiliza un fotograma de referencia de la Lista0.
(3) El Vector de Movimiento L0 (MVL0) y el Vector de Movimiento L1 (MVL1), corresponden a la Lista0 y a la Lista1 respectivamente y ambos tienen un componente horizontal y un componente vertical.
Después de determinar la información de movimiento para un bloque actual, en una aplicación factible, la información de movimiento podría almacenarse y utilizarse como información de referencia para el proceso de predicción de los futuros bloques de codificación, por ejemplo, como información de movimiento de predicción del bloque vecino en una predicción espacial o una predicción temporal.
La información de movimiento se almacena en una memoria, más específicamente, se almacena en unidades de almacenamiento de información de movimiento en esta realización.
Un bloque actual podría particionarse en múltiples conjuntos de muestras, en los que cada uno de los múltiples conjuntos de muestras tiene el mismo tamaño que el conjunto de muestras; o establecer el bloque actual como el conjunto de muestras. Por ejemplo, el conjunto de muestras podría ser una matriz de muestras de 4x4. El tamaño del conjunto de muestras también podría ser de 8x8, 16x16, 8x16 y así sucesivamente, lo cual no está limitado. Cada uno de los conjuntos de muestras múltiples corresponde a cada unidad de almacenamiento de información de movimiento, por lo que la información de movimiento de un conjunto de muestras se almacenará en su correspondiente unidad de almacenamiento de información de movimiento. Hay que tener en cuenta que hay dos casos sobre “la información de movimiento de un conjunto de muestras”. Caso 1: la información de movimiento se utiliza para determinar el valor de predicción del conjunto de muestras; Caso 2: la información de movimiento se asigna al conjunto de muestras para su almacenamiento.
Además, en la realización actual, el conjunto de muestras es un conjunto de muestras de luma, y en otra realización, el conjunto de muestras podría ser un conjunto de muestras de croma.
El modo de predicción GEO se introduce en la sección anterior. Generalmente, en la predicción GEO, el bloque actual consiste en un primer subbloque y un segundo subbloque, el primer subbloque y el segundo subbloque están separados por un límite común, el primer subbloque corresponde a la primera información de movimiento y el segundo subbloque corresponde a la segunda información de movimiento. El primer subbloque y el segundo subbloque pueden ser un particionamiento de triángulo, una partición trapezoidal, o una partición rectangular asimétrica y así sucesivamente, lo cual no está limitado. Y es comprensible que, por ejemplo, en un particionamiento de triángulo, cada subbloque sea un bloque triangular.
Como ejemplo, en la realización actual, tanto la primera información de movimiento como la segunda información de movimiento provienen de la uni-predicción. La primera información de movimiento podría incluir sólo RIL0, MVL0, lo que significa PFL0=1, PFL1 =0; o podría incluir sólo RIL1, MVL1, lo que significa PFL0=0, PFL1 =1; de forma similar, la segunda información de movimiento podría incluir sólo RII,0, MVL0, lo que significa PFL0=1, PFL1 =0; o podría incluir sólo RIL1, MVL1, lo que significa Pf L0=0, PFL1 =1.
S201: determinar un parámetro angular y un parámetro de distancia.
El límite común está determinado por un parámetro angular y un parámetro de distancia.
(1) En un decodificador:
En una aplicación factible, analizar el parámetro angular y el parámetro de distancia de un flujo de bits directamente. En otra aplicación factible, analizar un indicador del flujo de bits y obtener el parámetro angular y el parámetro de distancia en base al indicador. El indicador puede ser un índice, y el parámetro angular y el parámetro de distancia se pueden determinar al verificar una tabla de búsqueda con dicho índice. O bien, el parámetro angular y el parámetro de distancia se pueden calcular por una función y el indicador es la entrada de la función.
En otra aplicación factible, se analizan dos indicadores del flujo de bits, y se obtiene el parámetro angular de uno de los dos indicadores y el parámetro de distancia del otro de los dos indicadores.
En la presente realización, el elemento sintáctico “geo_particiónjdx” se analiza a partir de un flujo de bits. Un parámetro angular “ánguloIdx” y un parámetro de distancia “distanciaIdx” se obtienen buscando en una tabla de búsqueda, que define la relación entre “geo_partición_idx” y un par de “ánguloIdx” y “distanciaIdx”. La tabla de búsqueda, por ejemplo, podría ser la Tabla 1.
S202: determinar un primer parámetro de cálculo en base al parámetro angular; calcular un parámetro angular temporal en base al parámetro angular; determinar un segundo parámetro de cálculo en base al parámetro angular temporal; y calcular un tercer parámetro de cálculo en base al parámetro angular y el parámetro de distancia.
El primer parámetro de cálculo se determina al comprobar una tabla de búsqueda preestablecida de acuerdo con el parámetro angular y el segundo parámetro de cálculo se determina al comprobar la tabla de búsqueda de acuerdo con el parámetro angular temporal, y en el que el primer parámetro de cálculo y el segundo parámetro de cálculo son un valor de coseno y un valor de seno de un mismo ángulo respectivamente. Es comprensible que los cálculos del coseno y del seno puedan simularse y sustituirse por un método de tabla de búsqueda, y que la complejidad de la computación disminuya.
En la presente realización,
En una aplicación factible: El primer parámetro de cálculo se establece como Dis[ánguloIdx], Dis[] es una tabla de búsqueda, por ejemplo, podría ser la Tabla 3.
El parámetro angular temp se establece en (ánguloIdx 8)%32, asumiendo como TempIdx.
El segundo parámetro de cálculo se establece como Dis[TempIdx].
Se observa que, teóricamente, Dis[ánguloIdx] y Dis[TempIdx] son el valor aproximado del coseno y el valor del seno de un mismo ángulo, y el ángulo representa una relación geométrica entre el límite común y el bloque actual.
En otra aplicación factible: El primer parámetro de cálculo se establece como Dis1[ánguloIdx], Dis1[] es una tabla de búsqueda, por ejemplo, podría ser la Tabla 3.
El segundo parámetro de cálculo se establece como Dis2[ánguloIdx], Dis2[] es otra tabla de búsqueda.
Se observa que Dis1 [ánguloIdx] y Dis2[ánguloIdx] son el valor aproximado del coseno y el valor del seno de un mismo ángulo, y el ángulo representa una relación geométrica entre el límite común y el bloque actual.
El tercer parámetro de cálculo se obtiene de la siguiente manera:
wIdx se establece como log2(nCbW) - 3, nCbW es la anchura del bloque actual;
hIdx se establece como log2(nCbH) - 3, nCbH es la altura del bloque actual ;
pasoDesplazamiento se establece en un número entero positivo, por ejemplo, se establece en 64.
Comparando wIdx y hIdx:
whRratio = (wIdx >= hIdx) ? wIdx - hIdx : hIdx - wIdx
mayorWIsH = (wIdx >= hIdx) ? verdadero : falso
pasoEscala = (wIdx >= hIdx) ? (1 << hIdx) : (1 << wIdx)
Es comprensible que en otra aplicación factible:
whRratio = (wIdx > hIdx) ? wIdx - hIdx : hIdx - wIdx
mayorWIsH = (wIdx > hIdx) ? verdadero : falso
pasoEscala = (wIdx > hIdx) ? (1 << hIdx) : (1 << wIdx)
El ánguloN se establece en:
ánguloN = ánguloIdx si ánguloIdx >= 0 && ánguloIdx <=8,
ánguloN = 16 - ánguloIdx si ánguloIdx > 8 && ánguloIdx<= 16,
ánguloN = ánguloIdx - 16 si ánguloIdx > 16 && ánguloIdx <=24,
ánguloN = 32 - ánguloIdx en caso contrario,
Se observa que en las diferentes implementaciones, los puntos finales ánguloIdx 0, 8, 16, 24 podrían pertenecer a la diferente subsección, por ejemplo:
En otra aplicación factible, el ánguloN se establece en:
ánguloN = ánguloIdx si ánguloIdx > 0 && ánguloIdx <8,
ánguloN = 16 - ánguloIdx si ánguloIdx >= 8 && ánguloIdx< 16,
ánguloN = ánguloIdx - 16 si ánguloIdx > =16 && ánguloIdx <24,
ánguloN = 32 - ánguloIdx en caso contrario,
Además, ánguloN se establece al siguiente valor:
ánguloN = (mayorWIsH) ? 8 - ánguloN : ánguloN
disPaso se establece de acuerdo con los valores de whRatio y ánguloN especificados en una tabla de búsqueda, por ejemplo, la Tabla 2.
tamañoPaso = disPaso pasoDesplazamiento
El tercer parámetro de cálculo, rho, se ajusta al siguiente valor mediante una tabla de búsqueda denominada Dis, por ejemplo, Tabla 3.
rho = distanciaIdx*tamañoPaso*pasoEscala nCbW*Dis[ánguloIdx] nCbH*Dis[TempIdx].
Y en consecuencia, en otra aplicación factible, el tercer parámetro de cálculo rho podría establecerse como: rho = distanciaIdx*tamañoPaso*pasoEscala nCbW*Dis1 [ánguloIdx] nCbH*Dis2 [ánguloIdx].
Se observa que dado que después del parámetro angular y el parámetro de distancia se puede determinar el primer, segundo y tercer parámetro de cálculo. En una aplicación factible, el primer, segundo y tercer parámetro de cálculo sólo se calcularán una vez como los parámetros para todas las muestras en el bloque actual. Y el paso S201 y S202 puede omitirse para el proceso de almacenamiento de información de movimiento si el primer, segundo y tercer parámetro de cálculo del bloque actual ya están determinados.
S203: determinar una distancia entre un conjunto de muestras en el bloque actual y el límite común.
La distancia se calcula de la siguiente manera:
distDesdeLínea = (x K) * P1 (y K) * P2 - P3
donde P1, P2 y P3 son el primer parámetro de cálculo, el segundo parámetro de cálculo y el tercer parámetro de cálculo respectivamente, distDesdeLínea representa la distancia, K es un número entero no negativo, x representa una coordenada horizontal de una posición objetivo en el conjunto de muestras, y representa una coordenada vertical de la posición objetivo en un sistema de coordenadas rectangular, donde una posición de la muestra superior izquierda del bloque actual se establece como origen de coordenadas, la dirección derecha se establece como la dirección horizontal positiva y la dirección inferior se establece como la dirección vertical positiva.
En una aplicación factible, K es igual a 1.
distDesdeLínea = (x 1) * P1 (y 1) * P2 - P3.
Se observa que la distancia entre un conjunto de muestras en el bloque actual y el límite común, generalmente, es la distancia entre la posición objetivo en el conjunto de muestras y el límite común.
La posición de destino en el conjunto de muestras está predeterminada. Por ejemplo, la posición predeterminada puede ser una posición superior izquierda del conjunto de muestras, o una posición central del conjunto de muestras, u otra posición del conjunto de muestras.
Se observa que la posición objetivo puede ser una posición de una muestra entera en el conjunto de muestras, y la posición objetivo también puede ser una posición de una muestra fraccionada. Por ejemplo, la posición objetivo puede ser una posición del centro de gravedad del bloque actual. Más específicamente, en el caso de que el bloque actual sea un conjunto de muestras de 4x4, la posición objetivo podría ser la posición con unas coordenadas (1,5, 1,5) en el sistema de coordenadas rectangulares de la realización actual.
En una aplicación factible, la precisión de muestra de la distancia es mayor que la muestra entera. En consecuencia, la distancia se calcula de la siguiente manera:
distDesdeLínea = ((x<<N) K) * P1 ((y<<N) K) * P2 - P3
donde 2N representa un recíproco de la precisión de muestra de la distancia, por ejemplo, cuando la precisión de muestra de la distancia es de medio píxel, N es igual a 1, cuando la precisión de muestra de la distancia es de 1/4 de píxel, N es igual a 2.
Como ejemplo, la distancia se calcula de la siguiente manera:
distDesdeLínea = ((x<<1) 1) * Dis[ánguloIdx] ((y<<1) 1) * Dis[TempIdx] - rho
S204: comparar la distancia con un umbral para determinar si se almacena la tercera información de movimiento en el conjunto de muestras.
La tercera información de movimiento se obtiene de la primera información de movimiento y de la segunda información. En una aplicación factible, la tercera información de movimiento es una combinación de la primera información de movimiento y la segunda información de movimiento, similar a información de movimiento para una bi-predicción. Más específicamente, en el caso de que la primera información de movimiento incluya RILX_primero, MVLX_primero, la segunda información de movimiento incluya RILY_segundo, MVLY_segundo, donde X puede ser 0 o 1, e Y puede ser 0 o 1, la tercera información de movimiento puede incluir todos RILX_primero, MVLX_primero, RILY_segundo, MVLY_segundo, lo que significa PFL0=1, PFL1 = 1.
En otra aplicación factible, la tercera información de movimiento podría ser igual a una de las informaciones de primer movimiento o de segundo movimiento en el caso de que tanto la primera información de movimiento como la segunda correspondan a una misma lista (Lista0 o Lista1). Por ejemplo, si PFL0 es igual a 1 y PFL1 es igual a 0 tanto para la primera como para la segunda información de movimiento, la tercera información de movimiento podría ser igual a la primera información de movimiento (o a la segunda información de movimiento, de acuerdo con la diferente aplicación). Del mismo modo, si PFL0 es igual a 0 y PFL1 es igual a 1 tanto para la primera como para la segunda información de movimiento, la tercera información de movimiento podría establecerse igual a la primera información de movimiento (o a la segunda información de movimiento, de acuerdo con la diferente aplicación).
En una aplicación factible, el umbral podría ser un valor predeterminado.
En otra aplicación factible, el umbral se basa en una relación geométrica entre el límite común y una dirección horizontal, o en una relación geométrica entre el límite común y una dirección vertical. Más concretamente, el umbral se basa en un ángulo entre una dirección perpendicular del límite común y la dirección horizontal o la dirección vertical. Y en otras aplicaciones, la relación geométrica podría incluir la relación de longitud entre el límite común y el límite del bloque o subbloque actual. En la presente realización, el umbral se podría obtener mediante una tabla de búsqueda, por ejemplo la Tabla 5, de acuerdo con un ángulo calculado anteriormente.
Umbral = RhoMax[ánguloN].
Se observa que como ánguloN se puede determinar antes del paso S204, el umbral se puede determinar antes del paso S204 y para el bloque actual.
El umbral puede ser también
umbralInferior = - RhoMax[ánguloN]
umbralSuperior = RhoMax[ánguloN].
Tabla 5 -Tabla RhoMax para la derivación de los pesos del movimiento de particionamiento geométrico.
En otra aplicación factible, el umbral podría ser también
umbralInferior = - K
umbralSuperior = K, donde K es un número positivo predeterminado. Por ejemplo, el valor de K puede ser 1. En un ejemplo, el valor de K se puede obtener en función de un indicador del flujo de bits.
En otra aplicación factible, el umbral se basa en una anchura y/o una altura del bloque actual.
Cabe señalar que el umbral también podría estar determinado por dos o más condiciones anteriores. Por ejemplo, la anchura y/o la altura del bloque actual podrían determinar una relación, relación = 1<< abs(log2(anchura) -log2(altura)), y luego la relación se utiliza para escalar un umbral determinado por un ángulo. Y el umbral escalado se establece como umbral final.
Se realizan comparaciones entre el umbral y la distancia:
S204-1: la determinación de la tercera información de movimiento se almacena en el conjunto de muestras en el caso de que un valor absoluto de la distancia sea menor o igual que el umbral;
S204-2: en caso de que el valor absoluto de la distancia sea mayor que el umbral:
determinar si la primera información de movimiento se almacena en el conjunto de muestras en el caso de que la distancia sea positiva (o negativa); o,
determinar si la segunda información de movimiento se almacena en el conjunto de muestras en el caso de que la distancia sea negativa (o positiva, de acuerdo con la rama anterior).
Es comprensible que, de acuerdo con las diferentes aplicaciones, la condición en el paso S204-1 también podría ser un valor absoluto de la distancia si es menor que el umbral, en consecuencia, la condición en el paso S204-2 podría ser el valor absoluto de la distancia si es mayor o igual al umbral.
En otra aplicación factible, el cálculo del valor absoluto se sustituye por más subsecciones.
En la realización actual, la primera información de movimiento se almacena en el conjunto de muestras en el caso de que la distancia sea menor que umbralInferior; la segunda información de movimiento se almacena en el conjunto de muestras en el caso de que la distancia sea mayor que umbralSuperior; de lo contrario, se almacena la tercera información de movimiento en el conjunto de muestras.
Y es comprensible que una de la primera información de movimiento, la segunda información de movimiento y la tercera información de movimiento almacenada en la unidad de almacenamiento de información de movimiento corresponden al conjunto de muestras.
Se observa que cuando el bloque actual puede particionarse en múltiples conjuntos de muestras, en una aplicación factible, los pasos anteriores en la realización actual se utilizan en todos los conjuntos de muestras. En otra aplicación factible, los pasos anteriores en la realización actual se utilizan en un solo conjunto de muestras. En otra aplicación factible, los pasos anteriores en la realización actual se utilizan en al menos dos conjuntos de muestras. En el caso de los conjuntos de muestras que no se implementan con los pasos anteriores, en una aplicación factible, se almacenará la información de movimiento por defecto o la información de movimiento deducida de acuerdo con una condición predeterminada.
Se observa que sólo es necesario calcular un valor de distancia en base a un módulo de particionamiento GEO predeterminado (función), cuyo parámetro de módulo se puede determinar a nivel de CU, para determinar el almacenamiento de información de movimiento para un particionamiento GEO. La complejidad informática es limitada. En una cuarta realización del proceso de decodificación para el modo de predicción GEO:
Este proceso se activa cuando se decodifica una unidad de codificación con MergeTriangleFlag[xCb][yCb] igual a 1 o con geo_flag[xCb][yCb] igual a 1.
Las entradas a este proceso son:
- una ubicación de luma (xCb, yCb) que especifica la muestra superior izquierda del bloque de codificación actual en relación con la muestra de luma superior izquierda de la imagen actual,
- una variable anchuraCb que especifica la anchura del bloque de codificación actual en muestras de luma, - una variable alturaCb que especifica la altura del bloque de codificación actual en muestras de luma, - los vectores de movimiento luma con una precisión de 1/16 de muestra fraccionada mvA y mvB,
- los vectores de movimiento de croma mvCA y mvCB,
- los índices de referencia idxRefA y idxRefB,
- los indicadores de la lista de predicción listaPredBanderaA y listaPredBanderaB.
Los resultados de este proceso son:
- una matriz (anchuraCb)x(alturaCb) muestrasPred<L>de muestras de predicción de luma,
- una matriz (anchuraCb / 2)x(alturaCb / 2) muestrasPred<eb>de muestras de predicción de croma para el componente Cb,
- una matriz (anchuraCb / 2)x(alturaCb / 2) muestrasPred<Cr>de muestras de predicción de croma para el componente Cr.
Dejar que muestrasPredLA<L>y muestrasPredLB<L>sean matrices (anchuraCb)x(alturaCb) de valores de muestra de luma previstos y, muestrasPredLA<Cb>, muestrasPredLB<Cb>, muestrasPredLA<Cr>y muestrasPredLB<Cr>sean matrices (anchuraCb / 2)x(alturaCb / 2) de valores de muestra de croma previstos.
Las muestrasPred<L>, muestrasPred<Cb>y muestrasPred<Cr>se obtienen mediante los siguientes pasos ordenados:
3. Para que N sea cada uno de A y B, se aplica lo siguiente:
- La imagen de referencia, que consiste en una matriz bidimensional ordenada imgRefLN<L>de muestras de luma y dos matrices bidimensionales ordenadas imgRefLN<Cb>y imgRefLN<Cr>de muestras de croma, se obtiene con X establecido igual a listaPredBanderaN y idxRefX establecido igual a idxRefN como entrada.
- La matriz muestrasPredLN<L>se obtiene al ejecutar el proceso de interpolación de muestras fraccionadas con la ubicación de luma (xCb, yCb), la anchura del bloque de codificación de luma anchuraSb establecida igual a anchuraCb, la altura del bloque de codificación de luma alturaSb establecida igual a alturaCb, el desplazamiento del vector de movimiento mvDesplazamiento igual a (0, 0), el vector de movimiento mvLX igual a mvN y la matriz de referencia imgRefLX<L>igual a imgRefLN<L>, la variable banderaBdof igual a FALSO, y la variable cIdx igual a 0 como entradas.
- La matriz muestrasPredLN<Cb>se obtiene al ejecutar el proceso de interpolación de muestras fraccionadas con la ubicación de luma (xCb, yCb), la anchura del bloque de codificación anchuraSb establecida igual a anchuraCb / 2, la altura del bloque de codificación alturaSb establecida igual a alturaCb / 2, el desplazamiento del vector de movimiento mvDesplazamiento establecido igual a (0, 0), el vector de movimiento mvLX establecido igual a mvCN, y la matriz de referencia imgRefLX<Cb>establecida igual a imgRefLN<Cb>, la variable banderaBdof establecida igual a FALSO y la variable cIdx establecida igual a 1 como entradas.
- La matriz muestrasPredLN<Cr>se obtiene al ejecutar el proceso de interpolación de muestras fraccionadas con la ubicación de luma (xCb, yCb), la anchura del bloque de codificación anchuraSb establecida igual a anchuraCb / 2, la altura del bloque de codificación alturaSb establecida igual a alturaCb / 2, el desplazamiento del vector de movimiento mvDesplazamiento establecido igual a (0, 0), el vector de movimiento mvLX establecido igual a mvCN, y la matriz de referencia imgRefLX<Cr>establecida igual a imgRefLN<Cr>, la variable banderaBdof establecida igual a FALSO y la variable cIdx establecida igual a 2 como entradas.
4. Si MergeTriangleFlag[xCb][yCb] es igual a 1, la dirección de particionamiento de la variable dirTriángulo del modo de fusión se establece igual a merge_triangle_split_dir[xCb][yCb].
a. Las muestras de predicción dentro del bloque de codificación luma actual, muestrasPred<L>[x<L>][y<L>] con<x l>= 0..anchuraCb - 1 e y<L>=0.. alturaCb - 1, se obtienen al ejecutar el proceso de predicción de muestras ponderadas para el modo de fusión de triángulo con la anchura del bloque de codificación nCbW establecida igual a anchuraCb, la altura del bloque de codificación nCbH establecida igual a alturaCb, las matrices de muestras muestrasPredLA<L>y muestrasPredLB<L>, y las variables dirT riángulo, y cIdx establecidas igual a 0 como entradas.
b. Las muestras de predicción dentro del bloque de codificación Cb del componente cromático actual, muestrasPred<Cb>[x<C]>[y<C>] con<x c>= 0.. anchuraCb / 2- 1 e y<C>= 0..alturaCb / - 21, se obtienen al ejecutar el proceso de predicción de muestras ponderadas para el modo de fusión de triángulo con la anchura del bloque de codificación nCbW establecida igual a anchuraCb / 2, la altura del bloque de codificación nCbH establecida igual a alturaCb / 2, las matrices de muestras muestrasPredLA<cb>y muestrasPredLB<c b>, y las variables dirT riángulo, y cIdx establecidas igual a 1 como entradas.
c. Las muestras de predicción dentro del bloque de codificación Cr del componente cromático actual, muestrasPred<c r>[x<c ]>[y<c>] con x<c>= 0.. anchuraCb / 2- 1 e y<e>= 0..alturaCb / - 21, se obtienen al ejecutar el proceso de predicción de muestras ponderadas para el modo de fusión de triángulo con la anchura del bloque de codificación nCbW establecida igual a anchuraCb / 2, la altura del bloque de codificación nCbH establecida igual a alturaCb / 2, las matrices de muestras muestrasPredLA<er>y muestrasPredLB<e r>, y las variables dirTriángulo, y cIdx establecidas igual a 2 como entradas.
d. El proceso de almacenamiento de vectores de movimiento para el modo de fusión de triángulo se activa con la ubicación del bloque de codificación de luma (xCb, yCb), el ancho del bloque de codificación de luma anchuraCb, la altura del bloque de codificación de luma alturaCb, la dirección de particionamiento dirT riángulo, los vectores de movimiento de luma mvA y mvB, los índices de referencia idxRefA y idxRefB, y los indicadores de la lista de predicción listaPredBanderaA y listaPredBanderaB como entradas. 5. Si geo_flag[xCb][yCb] es igual a 1, las variables relacionadas con el particionamiento geométrico ánguloIdx y distanciaIdx se establecen de acuerdo con el valor de geo_partitioning_idx[xCb][yCb] tal como se especifica en la Tabla 1.
a. Se invoca el proceso de derivación del peso de la muestra para el modo de fusión de particionamiento geométrico. La entrada al proceso son tres matrices ordenadas pesoMuestraL, pesoMuestraC y pesoMovimiento de tamaño (anchuraCb)x(alturaCb), (anchuraCb/ 2)x(alturaCb/ 2) y (anchuraCb/4)x(alturaCb/4) respectivamente, así como las variables ánguloIdx, distanciaIdx, anchuraCb y alturaCb.
b. Las muestras de predicción dentro del bloque de codificación luma actual, muestrasPredL[xL][yL] con xL = 0..anchuraCb - 1 y yL = 0..alturaCb - 1, se obtienen al ejecutar el proceso de predicción de muestras ponderadas para el modo de fusión de particionamiento geométrico con la anchura del bloque de codificación nCbW establecida igual a anchuraCb, la altura del bloque de codificación nCbH establecida igual a alturaCb, las matrices de muestras muestrasPredLAL, muestrasPredLBL, pesoPredL y cIdx establecidas igual a 0 como entradas.
c. Las muestras de predicción dentro del bloque de codificación Cb del componente cromático actual, muestrasPredCb[xC][yC] con xC = 0..anchuraCb / 2 - 1 y yC = 0..alturaCb / 12 - 1, se obtienen al ejecutar el proceso de predicción de muestras ponderadas para el modo de fusión de particionamiento geométrico con la anchura del bloque de codificación nCbW establecida igual a anchuraCb / 2, la altura del bloque de codificación nCbH establecida igual a alturaCb / 2, las matrices de muestras muestrasPredLACb, muestrasPredLBCb, pesoPredC y cIdx establecidas igual a 1 como entradas. d. Las muestras de predicción dentro del bloque de codificación Cr del componente de croma actual, muestrasPredCr[xC][yC] con xC = 0..anchuraCb / 2 - 1 e yC = 0..alturaCb / 12 - 1, se obtienen al ejecutar el proceso de predicción de muestras ponderadas para el modo de fusión de particionamiento geométrico especificado en la cláusula 8.5.8.3 con la anchura del bloque de codificación nCbW establecida igual a anchuraCb / 2, la altura del bloque de codificación nCbH establecida igual a alturaCb / 2, las matrices de muestras muestrasPredLACr, muestrasPredLBCr, pesoPredC y cIdx establecidas igual a 2 como entradas.
e. El proceso de almacenamiento de vectores de movimiento para el modo de fusión geométrica se activa con la ubicación del bloque de codificación de luma (xCb, yCb), la anchura del bloque de codificación de luma anchuraCb, la altura del bloque de codificación de luma alturaCb, la matriz de muestras pesoMovimiento, los vectores de movimiento de luma mvA y mvB, los índices de referencia idxRefA y idxRefB, y los indicadores de la lista de predicción listaPredBanderaA y listaPredBanderaB como entradas.
Proceso de mapeo de imágenes de referencia para el modo de fusión de triángulo
Las aportaciones a este proceso son:
- una variable X que representa una lista de referencia que es igual a 0 o 1,
- un índice de referencia idxRefN.
El resultado de este proceso es:
- un índice de referencia idxRefTemp.
La variable imgRefPoc se obtiene de la siguiente manera:
imgRefPoc = (X = = 0) ? ImgRefList[0][idxRefN] : ImgRefList[1][idxRefN] (8-878)
La lista de imágenes de referencia imgRefListaTemp se obtiene de la siguiente manera:
imgRefListaTemp = (X = = 0) ? ImgRefList[1] : ImgRefList[0] (8-879)
La variable idxRefTemp se obtiene de la siguiente manera:
- La variable detenerMapeo se establece igual a FALSO.
- Para la variable idxRef<m>con m = 0.. NumIdxRefActivos[1] - 1, se aplica lo siguiente hasta que detenerMapeo sea igual a FALSO:
idxRefTemp = (imgRefListaTemp[idxRef<m>] = = imgRefPoc) ? idxRef<m>: -1 (8-880)
detenerMapeo = (idxRefTemp != -1) ? VERDADERO : FALSO (8-881) Proceso de derivación del peso de la muestra para el modo de fusión de particionamiento geométrico Las entradas a este proceso son:
- dos variables nCbW y nCbH que especifican la anchura y la altura del bloque de codificación actual, - dos variables ánguloIdx y distanciaIdx que especifican los valores de búsqueda de ángulo y distancia del modo de particionamiento geométrico actual,
- una matriz (nCbW)x(nCbH) pesoMuestra<L>,
- una matriz (nCbW/ 2)x(nCbH/ 2) pesoMuestra<C>,
- una matriz (nCbW/4)x(nCbH/4) pesoMovimiento.
La salida de este proceso son las mismas tres matrices pesoMuestra<L>, pesoMuestra<C>y pesoMovimiento de valores de peso por muestra que tienen un intervalo de 0 ... 8.
4. Los pesos de combinación de luma almacenados en pesoMuestra<L>para el modo de particionamiento geométrico actual se obtienen de la siguiente manera:
Se establece el valor de las siguientes variables:
- wIdx se establece en log2(nCbW) - 3,
- hIdx se establece en log2(nCbH) - 3,
- pasoDesplazamiento se establece en 64,
- las siguientes variables se establecen de acuerdo con la comparación de (wIdx >= hIdx):
- whRratio = (wIdx >= hIdx) ? wIdx - hIdx : hIdx - wIdx (8882-)
- mayorWIsH = (wIdx >= hIdx) ? verdadero : falso (8883-)
- pasoEscala = (wIdx >= hIdx) ? (1 << hIdx) : (1 << wIdx) (8884-)
- desplazamientoX se establece en ánguloIdx
- el desplazamientoY se establece en (desplazamientoX 8)%32
- El ánguloN está ajustado:
ánguloN = ánguloIdx si ánguloIdx >= 0 && ánguloIdx <=8,
ánguloN = 16 - ánguloIdx si ánguloIdx > 8 && ánguloIdx<= 16,
ánguloN = ánguloIdx - 16 si ánguloIdx > 16 && ánguloIdx <=24,
ánguloN = 32 - ánguloIdx en caso contrario,
- además, ánguloN se establece en el siguiente valor, dependiendo de mayorWIsH:
ánguloN = (mayorWIsH) ? 8 - ánguloN : ánguloN
- disPaso se establece de acuerdo con los valores de whRatio y ánguloN especificados en la Tabla 2 y siguientes,
tamañoPaso = disPaso pasoDesplazamiento
- rho se ajusta al siguiente valor utilizando la tabla de búsqueda denotada como Dis, especificada en la Tabla 3:
- rho = distanciaIdx*tamañoPaso*pasoEscala nCbW*Dis[desplazamientoX] nCbH*Dis[desplazamientoY]. (8-885)
Para cada posición de la muestra x=0... nCbW - 1 e y=0... nCbH - 1 el valor de pesoMuestra<L>[x][y] se obtiene de la siguiente manera:
- se calcula la distancia distDesdeLínea[x][y] utilizando la tabla de búsqueda denotada como Dis, especificada en la Tabla 3 de la siguiente manera:
- distDesdeLínea[x][y] = ((x<<1) 1)*Dis[desplazamientoX] ((y<1) 1))*Dis[desplazamientoY] - rho (8-886)
- Una distancia escalada distEscalada se obtiene como:
- distEscalada = min((abs(distDesdeLínea[x][y]) 8) >> 4, 14). (8-887)
El valor de pesoMuestra<L>[x][y] se establece de acuerdo con la tabla de búsqueda de pesos del filtro, denotada como GeoFilter especificada en la Tabla 4 como:
pesoMuestra<L>[x][y] = GeoFilter[distEscalada] si distDesdeLínea <= 0
pesoMuestra<L>[x][y] = 8 - GeoFilter[distEscalada] si distDesdeLínea > 0
5. Los pesos de croma almacenados en pesoMuestra<C>para el modo de particionamiento geométrico actual se obtienen de la siguiente manera:
Para cada posición de la muestra x=0... (nCbW/ 2) - 1 e y=0... (nCbH/ 2) - 1 el valor de pesoMuestra<C>[x][y] se obtiene de la siguiente manera:
pesoMuestra<C>[x][y] = pesoMuestra<L>[(x<<1)][(y<1)]
6. Los pesos de movimiento almacenados en la matriz pesoMovimiento para el modo de particionamiento geométrico actual se obtienen de la siguiente manera:
- Las siguientes variables se establecen de acuerdo con la Tabla 5:
umbralInferior = - RhoMax[ánguloN]
umbralSuperior = RhoMax[ánguloN]
Para cada posición de la muestra x=0... (nCbW/4) - 1 e y=0... (nCbH/4) - 1 el valor de pesoMovimiento[x][y] se obtiene de la siguiente manera:
Cnt = distDesdeLínea[x*4 1][y*4 1] El valor de pesoMovimiento[x][y] se establece en: pesoMovimiento[x][y] = 0if Cnt <= umbralInferior
pesoMovimiento[x][y] = 1 if Cnt >= umbralSuperior
pesoMovimiento[x][y] = 2 de otra manera
Proceso de predicción de muestras ponderadas para el modo de fusión de particionamiento geométrico Las entradas a este proceso son:
- dos variables nCbW y nCbH que especifican la anchura y la altura del bloque de codificación actual, - dos matrices (nCbW)x(nCbH) muestrasPredLA y muestrasPredLB,
- una matriz (nCbW)x(nCbH) pesoMuestra,
- una variable cIdx que especifica el índice del componente de color.
La salida de este proceso es la matriz (nCbW)x(nCbH) muestrasPb de valores de muestra de predicción.
La variable profundidadBit se obtiene de la siguiente manera:
- Si cIdx es igual a 0, profundidadBit se establece igual a ProfundidadBit<Y>.
- En caso contrario, profundidadBit se establece igual a ProfundidadBit<C>.
Las variables cambiol y desplazamientol se obtienen de la siguiente manera:
- La variable cambio1 se establece igual a Max(5, 17 - profundidadBit).
- La variable desplazamiento1 se establece igual a 1 << (cambio1 - 1).
Los valores de la muestra de predicción se obtienen de la siguiente manera:
muestrasPb[x][y] =
Clip3(0, (1 << profundidadBit) - 1,
(muestrasPredLA[x][y] * pesoMuestra[x][y]
muestrasPredLB[x][y] * (8 - pesoMuestra[x][y]) desplazamiento^ >> cambio1)
Almacenamiento de vectores de movimiento para el modo de fusión de particiones geométricas
Este proceso se activa cuando se decodifica una unidad de codificación con geo_flag[xCb][yCb] igual a 1.
Las entradas a este proceso son:
- una ubicación de luma (xCb, yCb) que especifica la muestra superior izquierda del bloque de codificación actual en relación con la muestra de luma superior izquierda de la imagen actual,
- una variable anchuraCb que especifica la anchura del bloque de codificación actual en muestras de luma, - una variable alturaCb que especifica la altura del bloque de codificación actual en muestras de luma, - una matriz pesoMovimiento de tamaño (anchuraCb/4)x(alturaCb/4) que contiene índices de asignación de movimiento,
- los vectores de movimiento luma con una precisión de 1/16 de muestra fraccionada mvA y mvB,
- los índices de referencia idxRefA y idxRefB,
- los indicadores de la lista de predicción listaPredBanderaA y listaPredBanderaB.
Las variables numSbX y numSbY que especifican el número de bloques de 4x4 en el bloque de codificación actual en dirección horizontal y vertical se establecen igual a numSbX = anchuraCb >> 2 y numSbY = alturaCb >> 2.
La variable minSb se establece igual a min(numSbX, numSbY).
La variable idxRefTempA se obtiene al ejecutar el proceso de mapeo de imágenes de referencia para el modo de fusión de triángulo especificado en la cláusula 8.5.7.4 con X igual a listaPredBanderaA y idxRefN igual a idxRefA como entradas.
La variable idxRefTempB se obtiene al ejecutar el proceso de mapeo de imágenes de referencia para el modo de fusión de triángulo especificado en la cláusula 8.5.7.4 con la X establecida igual a listaPredBanderaB y idxRefN establecida igual a idxRefB como entradas.
Para cada subbloque de 4x4 en el índice del subbloque (xSbIdx, ySbIdx) con xSbIdx = 0..numSbX - 1, e ySbIdx = 0..numSbY - 1, se aplica lo siguiente:
- Si pesoMovimiento[xSbIdx][ySbIdx] es igual a 0, se aplica lo siguiente:
banderaPredL0 = (listaPredBanderaA = = 0) ? 1 : 0 (8-888)
banderaPredL1 = (listaPredBanderaA = = 0) ? 0 : 1 (8-889)
idxRefL0 = (listaPredBanderaA = = 0) ? idxRefA : -1 (8-890)
idxRefL1 = (listaPredBanderaA = = 0) ? -1 : idxRefA (8-891)
mvL0[0] = (listaPredBanderaA = = 0) ? mvA[0] : 0 (8-892)
mvL0[1] = (listaPredBanderaA = = 0) mvA[1] : 0 (8-893)
mvL1[0] = (listaPredBanderaA = = 0) ? 0 : mvA[0] (8-894)
mvL1[1] = (listaPredBanderaA = = 0) ? 0 : mvA[1] (8-895)
- En caso contrario, si pesoMovimiento[xSbIdx][ySbIdx] es igual a 1, se aplica lo siguiente: banderaPredL0 = (listaPredBanderaB = = 0) ? 1 : 0 (8-896)
banderaPredL1 = (listaPredBanderaB = = 0) ? 0 : 1 (8-897)
idxRefL0 = (listaPredBanderaB = = 0) ? idxRefB : -1 (8-898)
idxRefL1 = (listaPredBanderaB = = 0) ? -1 : idxRefB (8-899)
mvL0[0] = (listaPredBanderaB = = 0) ? mvB[0] : 0 (8-900)
mvL0[1] = (listaPredBanderaB = = 0) ? mvB[1] : 0 (8-901)
mvL1 [0] = (listaPredBanderaB = = 0) ? 0 : mvB[0] (8-902)
mvL1[1] = (listaPredBanderaB = = 0) ? 0 : mvB[1] (8-903)
- En caso contrario (pesoMovimiento[xSbIdx][ySbIdx] es igual a 2), se aplica lo siguiente:
- Si listaPredBanderaA listaPredBanderaB es igual a 1,
banderaPredL0 = 1 (8-904) banderaPredL1 = 1 (8-905) idxRefL0 = (listaPredBanderaA = = 0) ? idxRefA : idxRefB (8-906)
idxRefL1 = (listaPredBanderaA = = 0) ? idxRefB : idxRefA (8-907)
mvL0[0] = (listaPredBanderaA = = 0) ? mvA[0 mvB[0] (8-908)
mvL0[1] = (listaPredBanderaA = = 0) ? mvA[1 mvB[1] (8-909)
mvL1[0] = (listaPredBanderaA = = 0) ? mvB[0 mvA[0] (8-910)
mvL1 [1] = (listaPredBanderaA = = 0) ? mvB[1 mvA[1 ] (8-911)
- Si listaPredBanderaA listaPredBanderaB es igual a 0, se aplica lo siguiente: banderaPredL0 = 1 (8-912) banderaPredL1 = (idxRefTempA = = -1 && idxRefTempB = = -1) ? 0 : 1 (8-913) idxRefL0 = (idxRefTempB != -1) ? idxRefA : (8-914)
((idxRefTempA != -1) ? idxRefB : idxRefA)
idxRefL1 = (idxRefTempB != -1) ? idxRefTempB : (8-915)
((idxRefTempA != -1) ? idxRefTempA : -1)
mvL0[0] = (idxRefTempB != -1) ? mvA[0] : (8-916)
((idxRefTempA != -1) ? mvB[0] : mvA[0])
mvL0[1] = (idxRefTempB != -1) ? mvA[1] : (8-917)
((idxRefTempA != -1) ? mvB[1] : mvA[1])
mvL1 [0] = (idxRefTempB != -1) ? mvB[0] : (8-918)
((idxRefTempA != -1) ? mvA[0] : 0)
mvL1[1] = (idxRefTempB != -1) ? mvB[1] : (8-919)
((idxRefTempA != -1) ? mvA[1] : 0)
- Si listaPredBanderaA listaPredBanderaB es igual a 2, se aplica lo siguiente: banderaPredL0 = (idxRefTempA = = -1 && idxRefTempB = = -1) ? 0 : 1
(8-920) banderaPredL1 = 1 (8-921) idxRefL0 = (idxRefTempB != -1) ? idxRefTempB : (8-922) ((idxRefTempA != -1) ? idxRefTempA : -1)
idxRefLI = (idxRefTempB != -1) ? idxRefA : (8-923)
((idxRefTempA != -1) ? idxRefB : idxRefA)
mvL0[0] = (idxRefTempB != -1) ? mvB[0] : (8-924)
((idxRefTempA != -1) ? mvA[0] : 0)
mvL0[1 ] = (idxRefTempB != -1) ? mvB[1] : (8-925)
((idxRefTempA != -1) ? mvA[1] : 0)
mvL1 [0] = (idxRefTempB != -1) ? mvA[0] : (8-926)
((idxRefTempA != -1) ? mvB[0] : mvA[0])
mvL1 [1 ] = (idxRefTempB != -1) ? mvA[1] : (8-927)
((idxRefTempA != -1) ? mvB[1] : mvA[1])
- Las siguientes asignaciones se realizan para x = 0..3 e y = 0..3:
MvL0[(xSbIdx << 2) x][(ySbIdx << 2) y] = mvL0 (8-928)
MvL1 [(xSbIdx << 2) x][(ySbIdx << 2) y] = mvL1 (8-929)
IdxRefL0[(xSbIdx << 2) x][(ySbIdx << 2) y] = idxRefL0 (8-930)
RedIdxL1 [(xSbIdx << 2) x][(ySbIdx << 2) y] = idxRefL1 (8-931)
BanderaPredL0[(xSbIdx << 2) x][(ySbIdx << 2) y] = banderaPredL0
(8-932)
BanderaPredL1[(xSbIdx << 2) x][(ySbIdx << 2) y] = banderaPredL1
(8-933)
En una aplicación alternativa, el paso 6 del “Proceso de derivación de pesos de la muestra para el modo de fusión de particionamiento geométrico” se puede aplicar de la siguiente manera:
6. Los pesos de movimiento almacenados en la matriz pesoMovimiento para el modo de particionamiento geométrico actual se obtienen de la siguiente manera:
- Las siguientes variables se establecen de acuerdo con la Tabla 5:
umbralInferior = - RhoMax[ánguloN]
umbralSuperior = RhoMax[ánguloN]
Para cada posición de la muestra x=0... (nCbW/4) - 1 e y=0... (nCbH/4) - 1 el valor de pesoMovimiento[x][y] se obtiene de la siguiente manera:
Cnt = ((x<<4) 3)*Dis[desplazamientoX] ((y<<4) 3))*Dis[desplazamientoY] - rho<<1
El valor de pesoMovimiento[x][y] se establece en:
pesoMovimiento[x][y] = 0 si Cnt <= umbralInferior
pesoMovimiento[x][y] = 1 si Cnt >= umbralSuperior
pesoMovimiento[x][y] = 2 de otra manera
En la aplicación ejemplar anterior del paso 6 del “Proceso de derivación del peso de la muestra para el modo de fusión de particionamiento geométrico”, la ecuación “Cnt = ((x<<4) 3)*Dis[desplazamientoX] ((y<<4) 3))*Dis[desplazamientoY] - rho<<1 ” corresponde al cálculo de la distancia entre el centro de gravedad del conjunto de muestras y la línea. El conjunto de muestras en este ejemplo comprende 16 muestras que tienen las siguientes coordenadas:
(x*4,y*4), (x*4+1 ,y*4), (x*4+2,y*4), (x*4+3,y*4), (x*4,y*4+1), (x*4+1,y*4+1), (x*4+2,y*4+1), (x*4+3,y*4+1), (x*4,y*4+2), (x*4+1 ,y*4+2), (x*4+2,y*4+2), (x*4+3,y*4+2), (x*4,y*4+3), (x*4+1,y*4+3), (x*4+2,y*4+3), (x*4+3,y*4+3).
Las coordenadas del centro de gravedad son (x*4 1,5, y*4 1,5). En la ecuación anterior, todos los términos aditivos de la ecuación se multiplican por 2 para que los desplazamientos de las coordenadas sean 1,5 enteros (por lo tanto, 3 en este ejemplo), ya que la aritmética entera es una característica de implementación deseada.
En una quinta realización, se describirá un aparato para almacenar información de movimiento, tal como se muestra en la Fig. 21.
Un aparato de almacenamiento de información de movimiento (3000), en el que un bloque actual consiste en un primer subbloque y un segundo subbloque, el primer subbloque y el segundo subbloque están separados por un límite común, el primer subbloque corresponde a la primera información de movimiento y el segundo subbloque corresponde a la segunda información de movimiento, el aparato (3000) comprende: un módulo de cálculo (3001), configurado para determinar una distancia entre un conjunto de muestras en el bloque actual y el límite común; y un módulo de comparación (3002), configurado para comparar la distancia con un umbral para determinar si se almacena una tercera información de movimiento en el conjunto de muestras, en donde la tercera información de movimiento se obtiene por la primera información de movimiento y la segunda información de movimiento.
En una aplicación factible, en donde el módulo de comparación (3002) se configura configurado para: determinar que la tercera información de movimiento se almacena en el conjunto de muestras en el caso de que un valor absoluto de la distancia sea menor o igual al umbral.
En una aplicación factible, en donde en el caso de que el valor absoluto de la distancia sea mayor que el umbral, el módulo de comparación (3002) además se configura para: determinar que la primera información de movimiento se almacena en el conjunto de muestras en el caso de que la distancia sea positiva; o, determinar que la segunda información de movimiento se almacena en el conjunto de muestras en el caso de que la distancia sea negativa. En una aplicación factible, en donde el umbral está predeterminado.
En una aplicación factible, en donde el umbral se basa en una relación geométrica entre el límite común y una dirección horizontal o una dirección vertical.
En una aplicación factible, en donde el umbral se basa en un ángulo entre una dirección perpendicular del límite común y la dirección horizontal o la dirección vertical.
En una aplicación factible, en donde el umbral se basa en una anchura y/o una altura del bloque actual.
En una aplicación factible, en donde el límite común se determina mediante un parámetro angular y un parámetro de distancia, el módulo de cálculo (3001) además se configura para: determinar el parámetro angular y el parámetro de distancia.
En una aplicación factible, en donde en un decodificador, el módulo de cálculo (3001) además se configura para: analizar el parámetro angular y el parámetro de distancia de un flujo de bits; o, analizar un indicador del flujo de bits, y obtener el parámetro angular y el parámetro de distancia en base al indicador.
En una aplicación factible, en donde el módulo de cálculo (3001) además se configura para: determinar un primer parámetro de cálculo en base al parámetro angular; calcular un parámetro angular temporal en base al parámetro angular; determinar un segundo parámetro de cálculo en base al parámetro angular temporal; y calcular un tercer parámetro de cálculo en base al parámetro angular y el parámetro de distancia.
En una aplicación factible, en donde el primer parámetro de cálculo se determina al comprobar una tabla de búsqueda preestablecida de acuerdo con el parámetro angular y el segundo parámetro de cálculo se determina al comprobar la tabla de búsqueda de acuerdo con el parámetro angular temporal, y en la que el primer parámetro de cálculo y el segundo parámetro de cálculo son un valor de coseno y un valor de seno de un mismo ángulo respectivamente. En una aplicación factible, en donde la distancia se calcula de la siguiente manera:
distDesdeLínea = (x K) * P1 (y K) * P2 - P3
donde P1, P2 y P3 son el primer parámetro de cálculo, el segundo parámetro de cálculo y el tercer parámetro de cálculo respectivamente, distDesdeLínea representa la distancia, K es un número entero no negativo, x representa una coordenada horizontal de una posición objetivo en el conjunto de muestras, y representa una coordenada vertical de la posición objetivo en un sistema de coordenadas rectangular, donde una posición de la muestra superior izquierda del bloque actual se establece como origen de coordenadas, la dirección derecha se establece como la dirección horizontal positiva y la dirección inferior se establece como la dirección vertical positiva.
En una aplicación factible, en donde K es igual a 1.
En una aplicación factible, en donde la posición de destino está predeterminada en el conjunto de muestras.
En una aplicación factible, en donde la posición predeterminada es una posición superior izquierda del conjunto de muestras, o una posición central del conjunto de muestras.
En una aplicación factible, en donde la precisión de muestra de la distancia es mayor que la muestra entera; correspondientemente, la distancia se calcula de la siguiente manera:
distDesdeLínea = ((x<<N) K) * P1 ((y<<N) K) * P2 - P3
donde 2N representa el recíproco de la precisión muestral de la distancia.
En una aplicación factible, donde N es igual a 1.
En una aplicación factible, en donde el conjunto de muestras es un conjunto de muestras de luma del bloque actual.
En una aplicación factible, en donde el aparato (3000) además comprende un módulo de particionamiento (3003), configurado para: particionar el bloque actual en múltiples conjuntos de muestras, en los que cada uno de los múltiples conjuntos de muestras tiene un mismo tamaño que el conjunto de muestras; o establecer el bloque actual como el conjunto de muestras.
En una aplicación factible, en donde el conjunto de muestras es una matriz de muestras de 4x4.
En una aplicación factible, en donde cada uno de los conjuntos de muestras múltiples corresponde a cada unidad de almacenamiento de información de movimiento, la unidad de almacenamiento de información de movimiento se utiliza para almacenar una de la primera información de movimiento, la segunda información de movimiento y la tercera información de movimiento.
En una aplicación factible, en donde el primer subbloque y el segundo subbloque son de partición de triángulo, de partición trapezoidal o de partición rectangular asimétrica.
En una aplicación factible, en donde la primera información de movimiento comprende información de movimiento en base a una primera lista de imágenes de referencia, la segunda información de movimiento comprende información de movimiento en base a una segunda lista de imágenes de referencia, y en la que la tercera información de movimiento comprende la primera información de movimiento y la segunda información de movimiento.
En una sexta realización, un aparato para decodificar una transmisión de vídeo incluye un procesador y una memoria, en donde la memoria almacena instrucciones que hacen que el procesador realice el método de acuerdo con cualquier implementación de la tercera realización.
En una séptima realización, un aparato para codificar una transmisión de vídeo incluye un procesador y una memoria, en donde la memoria almacena instrucciones que hacen que el procesador realice el método de acuerdo con cualquier implementación de la tercera realización.
En una octava realización, un medio de almacenamiento legible por computadora que tiene almacenadas instrucciones que, cuando se ejecutan, hacen que uno o más procesadores estén configurados para codificar datos de vídeo, en donde las instrucciones hacen que el o los procesadores realicen un método de acuerdo con cualquier implementación de la tercera realización.
En una novena realización, un programa informático que comprende un código de programa para realizar el método de acuerdo con cualquier implementación de la tercera realización cuando se ejecuta en una computadora.
A continuación, se explican las aplicaciones del método de codificación y del método de decodificación, tal como se muestran en las realizaciones mencionadas anteriormente y un sistema que las utiliza.
La Fig. 22 es un diagrama de bloques que muestra un sistema de suministro de contenidos 3100 para realizar un servicio de distribución de contenidos. Este sistema de suministro de contenido 3100 incluye un dispositivo de captura 3102, un dispositivo terminal 3106 y, opcionalmente, incluye una pantalla 3126. El dispositivo de captura 3102 se comunica con el dispositivo terminal 3106 a través del enlace de comunicación 3104. El enlace de comunicación puede incluir el canal de comunicación 13 descrito anteriormente. El enlace de comunicación 3104 incluye, pero no se limita a, WIFI, Ethernet, Cable, inalámbrico (3G/4G/5G), USB, o cualquier tipo de combinación de los mismos, o similares.
El dispositivo de captura 3102 genera datos, y puede codificar los datos por el método de codificación como se muestra en las realizaciones anteriores. Alternativamente, el dispositivo de captura 3102 puede distribuir los datos a un servidor de streaming(transmisión continua)(no mostrado en las figuras), y el servidor codifica los datos y transmite los datos codificados al dispositivo terminal 3106. El dispositivo de captura 3102 incluye, pero no se limita a, una cámara, un teléfono inteligente o tableta, una computadora de escritorio o portátil, un sistema de videoconferencia, una PDA, un dispositivo montado en un vehículo, o una combinación de cualquiera de ellos, o similares. Por ejemplo, el dispositivo de captura 3102 puede incluir el dispositivo de origen 12 tal como se describió anteriormente. Cuando los datos incluyen vídeo, el codificador de vídeo 20 incluido en el dispositivo de captura 3102 puede realizar el procesamiento de codificación de vídeo. Cuando los datos incluyen audio (es decir, voz), un codificador de audio incluido en el dispositivo de captura 3102 puede realizar el procesamiento de codificación de audio. En algunos escenarios prácticos, el dispositivo de captura 3102 distribuye los datos de vídeo y audio codificados multiplexándolos juntos. En el caso de otros escenarios prácticos, por ejemplo, en el sistema de videoconferencia, los datos de audio codificados y los datos de vídeo codificados no se multiplexan. El dispositivo de captura 3102 distribuye los datos de audio codificados y los datos de vídeo codificados al dispositivo terminal 3106 de manera individual.
En el sistema de suministro de contenidos 3100, el dispositivo terminal 310 recibe y reproduce los datos codificados. El dispositivo terminal 3106 puede ser un dispositivo con capacidad de recepción y recuperación de datos, como un teléfono inteligente o tableta 3108, una computadora de escritorio o portátil 3110, un grabador de vídeo en red (NVR)/grabador de vídeo digital (DVR) 3112, un televisor 3114, un decodificador (STB) 3116, un sistema de videoconferencia 3118, un sistema de videovigilancia 3120, un asistente digital personal (PDA) 3122, un dispositivo montado en un vehículo 3124, o una combinación de cualquiera de ellos, o similares capaces de decodificar los datos codificados mencionados anteriormente. Por ejemplo, el dispositivo terminal 3106 puede incluir el dispositivo de destino 14 tal como se describió anteriormente. Cuando los datos codificados incluyen vídeo, el decodificador de vídeo 30 incluido en el dispositivo terminal tiene prioridad para realizar la decodificación de vídeo. Cuando los datos codificados incluyen audio, un decodificador de audio incluido en el dispositivo terminal tiene prioridad para realizar el procesamiento de decodificación de audio.
En el caso de un dispositivo terminal con su pantalla, por ejemplo, un teléfono inteligente o tableta 3108, una computadora de escritorio o portátil 3110, un grabador de vídeo en red (NVR)/grabador de vídeo digital (DVR) 3112, un televisor 3114, un asistente personal digital (PDA) 3122, o un dispositivo montado en un vehículo 3124, el dispositivo terminal puede alimentar los datos decodificados a su pantalla. En el caso de un dispositivo terminal sin pantalla, por ejemplo, el STB 3116, el sistema de videoconferencia 3118 o el sistema de videovigilancia 3120, se conecta una pantalla externa 3126 para recibir y mostrar los datos decodificados.
Cuando cada dispositivo de este sistema realiza la codificación o decodificación, se puede utilizar el dispositivo de codificación de imágenes o el dispositivo de decodificación de imágenes, como se muestra en las realizaciones mencionadas anteriormente.
La Fig. 23 es un diagrama que muestra una estructura de un ejemplo del dispositivo terminal 3106. Después de que el dispositivo terminal 3106 recibe el flujo desde el dispositivo de captura 3102, la unidad de procedimiento de protocolo 3202 analiza el protocolo de transmisión del flujo. El protocolo incluye, pero no se limita a, el protocolo de transmisión en tiempo real (RTSP), el protocolo de transferencia de hipertexto (HTTP), el protocolo de transmisión en vivo HTTP (HLS), MPEG-DASH, el protocolo de transporte en tiempo real (RTP), el protocolo de mensajería en tiempo real (RTMP) o cualquier tipo de combinación de los mismos, o similares.
Después de que la unidad de procesamiento de protocolos 3202 procese el flujo, se genera un archivo de flujo. El archivo se envía a una unidad de demultiplexación 3204. La unidad de demultiplexación 3204 puede separar los datos multiplexados en los datos de audio codificados y los datos de vídeo codificados. Tal como se describió anteriormente, en algunos escenarios prácticos, por ejemplo, en el sistema de videoconferencia, los datos de audio codificados y los datos de vídeo codificados no están multiplexados. En esta situación, los datos codificados se transmiten al decodificador de vídeo 3206 y al decodificador de audio 3208 sin pasar por la unidad de demultiplexación 3204.
A través del procesamiento de demultiplexación, se generan el flujo elemental (ES) de vídeo, el ES de audio y, opcionalmente, los subtítulos. El decodificador de vídeo 3206, que incluye el decodificador de vídeo 30 como se explica en las realizaciones mencionadas, decodifica el ES de vídeo por el método de decodificación como se muestra en las realizaciones mencionadas para generar una trama de vídeo, y alimenta estos datos a la unidad sincrónica 3212. El decodificador de audio 3208, decodifica el ES de audio para generar una trama de audio, y alimenta estos datos a la unidad sincrónica 3212. Alternativamente, la trama de vídeo puede almacenarse en una memoria intermedia (no mostrada en la Fig. 23) antes de alimentar la unidad sincrónica 3212. De manera similar, la trama de audio puede almacenarse en una memoria intermedia (no mostrada en la Fig. 23) antes de alimentar a la unidad sincrónica 3212.
La unidad sincrónica 3212 sincroniza la trama de vídeo y la trama de audio, y suministra el vídeo/audio a una pantalla de vídeo/audio 3214. Por ejemplo, la unidad sincrónica 3212 sincroniza la presentación de la información de vídeo y audio. La información se puede codificar en la sintaxis utilizando marcas de tiempo relativas a la presentación de los datos visuales y de audio codificados y marcas de tiempo relativas a la entrega del propio flujo de datos.
Si se incluyen subtítulos en el flujo, el decodificador de subtítulos 3210 decodifica los subtítulos y los sincroniza con la trama de vídeo y la trama de audio, y suministra el vídeo/audio/subtítulo a una pantalla de vídeo/audio/subtítulo 3216.
La presente solicitud no se limita al sistema mencionado, y tanto el dispositivo de codificación de imágenes como el dispositivo de decodificación de imágenes de las realizaciones mencionadas se pueden incorporar a otro sistema, por ejemplo, a un sistema de automóvil.
Operadores matemáticos
Los operadores matemáticos utilizados en esta solicitud son similares a los utilizados en el lenguaje de programación C. Sin embargo, los resultados de las operaciones de división de enteros y de desplazamiento aritmético se definen con mayor precisión, y se definen operaciones adicionales, como la exponenciación y la división de valores reales. Las convenciones de numeración y recuento suelen empezar por el 0, por ejemplo, “el primero” equivale al 0-ésimo, “el segundo” equivale al 1-ésimo, etc.
Operadores aritméticos
Los siguientes operadores aritméticos se definen de la siguiente manera:
Suma
- Resta (como operador de dos argumentos) o negación (como operador prefijo unario)
* Multiplicación, incluyendo la multiplicación de matrices
xy Exponenciación. Especifica x a la potencia de y. En otros contextos, esta notación se utiliza para superíndices que no se interpretan como exponenciación.
/ División de enteros con truncamiento del resultado hacia el cero. Por ejemplo, 7 / 4 y -7 / -4 se truncan en 1 y -7 / 4 y 7 / -4 se truncan en -1.
, Se utiliza para denotar la división en ecuaciones matemáticas en las que no se pretende truncar ni ~ redondear.
Se utiliza para denotar la división en ecuaciones matemáticas en las que no se pretende truncar ni redondear.
y
La suma de f(i) con i tomando todos los valores enteros desde x hasta y inclusive.
x % y Módulo. Resto de x dividido por y, definido sólo para números enteros x e y con x >= 0 e y > 0.
Operadores lógicos
Los siguientes operadores lógicos se definen de la siguiente manera:
x && y Lógica booleana “y” de x e y
x || y Lógica booleana “o” de x e y
! Lógica booleana “no”
x ? y : z Si x es VERDADERO o no es igual a 0, se evalúa al valor de y; en caso contrario, se evalúa al valor de z.
Operadores relacionales
Los siguientes operadores relacionales se definen de la siguiente manera:
> Mayor que
>= Mayor o igual que
< Menor que
<= Menor o igual que
== Igual que
!= Distinto de
Cuando se aplica un operador relacional a un elemento sintáctico o a una variable a la que se ha asignado el valor “na” (no aplica), el valor “na” se trata como un valor distinto para el elemento sintáctico o la variable. El valor “na” se considera que no es igual a otro valor.
Operadores de bit a bit
Los siguientes operadores bit a bit se definen de la siguiente manera:
& bit a bit “y”. Cuando se realiza una operación con argumentos enteros, se realiza la operación con una representación en complemento a dos del valor entero. Cuando se realiza la
operación sobre un argumento binario que contiene menos bits que otro argumento, el argumento más corto se amplía añadiendo más bits significativos iguales a 0.
| Bit a bit “o”. Cuando se realiza una operación con argumentos enteros, se realiza una operación con una representación en complemento a dos del valor entero. Cuando se realiza una operación sobre un argumento binario que contiene menos bits que otro argumento, el argumento más corto se amplía añadiendo más bits significativos iguales a 0.
A Bit a bit “exclusivo o”. Cuando se realiza una operación con argumentos enteros, se realiza una operación con una representación en complemento a dos del valor entero. Cuando se realiza una operación sobre un argumento binario que contiene menos bits que otro argumento, el argumento más corto se amplía añadiendo más bits significativos iguales a 0.
x >> y Desplazamiento aritmético a la derecha de una representación entera en complemento a dos dígitos binarios x por y. Esta función se define sólo para valores enteros no negativos de y. Los bits desplazados en los bits más significativos (MSB) como resultado del desplazamiento a la derecha tienen un valor igual al MSB de x antes de la operación de desplazamiento.
x << y Desplazamiento aritmético a la izquierda de una representación entera en complemento a dos dígitos binarios x por y. Esta función se define sólo para valores enteros no negativos de y. Los bits desplazados en los bits menos significativos (LSB) como resultado del desplazamiento a la izquierda tienen un valor igual a 0.
Operadores de asignación
Los siguientes operadores aritméticos se definen de la siguiente manera:
= Operador de asignación
++ Incremento, es decir,x++equivale ax=x+ 1; cuando se utiliza en un índice de matriz, se evalúa al valor de la variable antes de la operación de incremento.
-- Decremento, es decir, x - equivale ax=x- 1; cuando se utiliza en un índice de matriz, se evalúa al valor de la variable antes de la operación de decremento.
+= Aumento por la cantidad especificada, es decir, x = 3 equivale a x = x 3, y x = (-3)
equivale a x = x (-3).
-= Decremento en la cantidad especificada, es decir, x -= 3 es equivalente a x = x - 3, y x -=
(-3) es equivalente a x = x - (-3).
Notación de intervalo
La siguiente notación se utiliza para especificar un intervalo de valores:
x = y..z x toma valores enteros a partir de y hasta z, inclusive, siendo x, y y z números enteros y z mayor que y.
Funciones matemáticas
Se definen las siguientes funciones matemáticas:
x >= 0
Abs(x) = | - x x < 0
Asin(x) la función trigonométrica inversa del seno, que opera sobre un argumento x que está en el intervalo de -1,0 a 1,0, inclusive, con un valor de salida en el intervalo de - n+2 a n+2, inclusive, en unidades de radianes
Atan(x) la función trigonométrica tangente inversa, que opera sobre un argumento x, con un
valor de salida en el intervalo de -n+2 a n+2, inclusive, en unidades de radianes Atan ( x ) x > 0
Atan ( X ) n x < 0 && y >= 0
Atan ( y x < 0 && y < 0
x ) - n
nnx = = 0 && y >= 0
de otra manera
- 2
Ceil(x) el menor número entero mayor o igual que x.
Cíip1y(x) = Clip30, 1 << ProfundidadBity) - 1, x) Clip1c(x) = Clip3(0, (1 << ProfundidadBitc) - 1, x) z < x
z > y
de otra manera
Cos(x) la función trigonométrica coseno que opera sobre un argumento x en unidades de radianes.
Floor(x) el mayor entero menor o igual a x.
c d b - a >= d / 2
GetCurrMsb(a, b, c, d) = j c - d a - b > d / 2
de otra manera
Ln(x) el logaritmo natural de x (el logaritmo de base-e, donde e es la constante de base del logaritmo natural 2,718281 828...).
Log2(x) el logaritmo de base-2 de x.
Log10(x) el logaritmo de base-10 de x.
x <= y
Min(x, y) = [
y x > y
x x >= y
Max(x, y) = ^
y x < y
Round(x) = Sign(x) * Floor(Abs(x) 0,5)
í1 ; x > 0
Sign(x) = j 0 ; x = = 0
- 1 ; x < 0
Sin(x) la función trigonométrica seno que opera sobre un argumento x en unidades de radianes
Sqrt(x) = Vx
Swap(x, y) = (y, x)
Tan(x) la función trigonométrica tangente que opera sobre un argumento x en unidades de radianes
Orden de precedencia de las operaciones
Cuando el orden de precedencia en una expresión no se indica explícitamente mediante el uso de paréntesis, se aplican las siguientes reglas:
- Las operaciones de mayor precedencia se evalúan antes que cualquier operación de menor precedencia.
- Las operaciones de la misma precedencia se evalúan secuencialmente de izquierda a derecha.
La siguiente tabla especifica la precedencia de las operaciones de mayor a menor; una posición más alta en la tabla indica una precedencia mayor.
Para aquellos operadores que también se utilizan en el lenguaje de programación C, el orden de precedencia utilizado en esta especificación es el mismo que se utiliza en el lenguaje de programación C.
Tabla: Precedencia de las operaciones de mayor (en la parte superior de la tabla) a menor (en la parte inferior de la tabla)
Descripción textual de las operaciones lógicas
En el texto, un enunciado de operaciones lógicas como se describiría matemáticamente de la siguiente forma: si(condición 0)
declaración 0
si no,si(condición 1)
declaración 1
si no /* observación informativa sobre la condición restante */
declaración n
se puede describir de la siguiente manera:
... de la siguiente manera / ... se aplica lo siguiente:
- Si condición 0, declaración 0
- En caso contrario , si la condición 1, declaración 1
- En caso contrario (observación informativa sobre la condición restante), declaración n
Cada “Si ... De lo contrario, si ... De lo contrario, ...” en el texto se introduce con “... como se indica a continuación” o “... se aplica lo siguiente” inmediatamente seguido de “Si ... “. La última condición de la frase “Si ... De lo contrario, si ... De lo contrario, ...” es siempre un “De lo contrario, ...”. Los “Si ... De lo contrario, si ... De lo contrario, ...” se pueden identificar haciendo coincidir “... de la siguiente manera” o “... se aplica lo siguiente” con la terminación “De lo contrario, En el texto, un enunciado de operaciones lógicas como se describiría matemáticamente de la siguiente forma: si(condición 0a && condición 0b)
declaración 0
si no, si(condición 1a || condición 1b)
declaración 1
si no
declaración n
se puede describir de la siguiente manera:
... de la siguiente manera / ... se aplica lo siguiente:
- Si todas las condiciones siguientes son verdaderas, declaración 0:
- condición 0a
- condición 0b
- En caso contrario , si se cumplen una o varias de las siguientes condiciones, la declaración 1:
- condición 1a
- condición 1b
- En caso contrario , declaración n
En el texto, un enunciado de operaciones lógicas como se describiría matemáticamente de la siguiente forma: si(condición 0)
declaración 0
si(condición 1)
declaración 1
se puede describir de la siguiente manera:
Cuando la condición 0, la declaración 0
Cuando la condición 1, declaración 1.
Las realizaciones, por ejemplo, del codificador 20 y del decodificador 30, y las funciones descritas en el presente documento, por ejemplo, con referencia al codificador 20 y al decodificador 30, se pueden implementar en hardware, software, firmware o cualquier combinación de los mismos. Si se implementan en software, las funciones se pueden almacenar en un medio legible por computadora o transmitirse a través de medios de comunicación como una o más instrucciones o código y ejecutarse por una unidad de procesamiento basada en hardware. Los medios legibles por computadora pueden incluir medios de almacenamiento legibles por computadora, que corresponden a un medio tangible como los medios de almacenamiento de datos, o medios de comunicación que incluyen cualquier medio que facilite la transferencia de un programa informático de un lugar a otro, por ejemplo, de acuerdo con un protocolo de comunicación. De este modo, los medios legibles por computadora pueden corresponder generalmente a (1) medios tangibles de almacenamiento legibles por computadora que no son transitorios o (2) un medio de comunicación como una señal u onda portadora. Los medios de almacenamiento de datos pueden ser cualquier medio disponible al que puedan acceder uno o más computadoras o uno o más procesadores para recuperar instrucciones, código y/o estructuras de datos para la implementación de las técnicas descritas en la presente descripción. Un producto de programa informático puede incluir un medio legible por computadora.
A modo de ejemplo, y sin carácter limitativo, dichos medios de almacenamiento legibles por computadora pueden comprender RAM, ROM, EEPROM, CD-ROM u otro tipo de almacenamiento en disco óptico, almacenamiento en disco magnético u otros dispositivos de almacenamiento magnético, memoria flash o cualquier otro medio que pueda utilizarse para almacenar el código de programa deseado en forma de instrucciones o estructuras de datos y al que pueda acceder una computadora. Además, cualquier conexión se denomina adecuadamente medio legible por computadora. Por ejemplo, si las instrucciones se transmiten desde un sitio web, un servidor u otra fuente remota con un cable coaxial, un cable de fibra óptica, un par trenzado, una línea de abonado digital (DSL) o tecnologías inalámbricas como los infrarrojos, la radio y las microondas, entonces el cable coaxial, el cable de fibra óptica, el par trenzado, la DSL o las tecnologías inalámbricas como los infrarrojos, la radio y las microondas se incluyen en la definición de medio. Sin embargo, debe entenderse que los medios de almacenamiento legibles por computadora y los medios de almacenamiento de datos no incluyen conexiones, ondas portadoras, señales u otros medios transitorios, sino que se dirigen a medios de almacenamiento tangibles no transitorios. Los disquetes y discos, tal y como se utilizan aquí, incluyen los discos compactos (CD), los discos láser, los discos ópticos, los discos versátiles digitales (DVD), los disquetes y los discos Blu-ray, donde los disquetes suelen reproducir los datos magnéticamente, mientras que los discos reproducen los datos ópticamente con láser. Las combinaciones de los anteriores también deben incluirse en el ámbito de los medios legibles por computadora.
Las instrucciones se pueden ejecutar por uno o más procesadores, como uno o más procesadores de señales digitales (DSP), microprocesadores de propósito general, circuitos integrados de aplicación específica (ASIC), matrices de puertas programables en campo (FPGA), u otros circuitos lógicos integrados o discretos equivalentes. En consecuencia, el término “procesador”, tal como se utiliza en el presente documento, puede referirse a cualquiera de las estructuras anteriores o a cualquier otra estructura adecuada para la implementación de las técnicas descritas en el presente documento. Además, en algunos aspectos, la funcionalidad descrita en el presente documento se puede proporcionar dentro de módulos de hardware y/o software dedicados, configurados para la codificación y decodificación o incorporados en un códec combinado. Asimismo, las técnicas se podrían implementar completamente en uno o más circuitos o elementos lógicos.
Las técnicas de esta descripción se pueden implementar en una amplia variedad de dispositivos o aparatos, incluyendo un teléfono inalámbrico, un circuito integrado (CI) o un conjunto de CI (por ejemplo, un conjunto de chips). En la presente descripción se describen diversos componentes, módulos o unidades para enfatizar los aspectos funcionales de los dispositivos configurados para llevar a cabo las técnicas descritas, pero no requieren necesariamente la realización de diferentes unidades de hardware. Más bien, tal como se describió anteriormente, varias unidades se pueden combinar en una unidad de hardware de códec o proporcionarse por una colección de unidades de hardware interoperativas, incluyendo uno o más procesadores tal como se describió anteriormente, junto con un software y/o firmware adecuado.

Claims (13)

REIVINDICACIONES
1. Un método de almacenamiento de información de movimiento, caracterizado por que un bloque actual consiste en un primer subbloque y un segundo subbloque, el primer subbloque y el segundo subbloque están separados por un límite común, siendo el límite común una línea de división de un modo de partición geométrica, el primer subbloque corresponde a la primera información de movimiento y el segundo subbloque corresponde a la segunda información de movimiento, comprendiendo la primera información de movimiento un vector de movimiento de uni-predicción para el primer subbloque, comprendiendo la segunda información de movimiento un vector de movimiento de uni-predicción para el segundo subbloque, el método comprende:
determinar (S203) una distancia entre un conjunto de muestras en el bloque actual y el límite común; donde la distancia se calcula de la siguiente manera:
distDesdeLínea = ((x<<N) K) * P1 (y<<N) K) * P2 - P3;
donde distDesdeLínea representa la distancia, x representa una coordenada horizontal de una posición objetivo en el conjunto de muestras, y representa una coordenada vertical de la posición objetivo, K es un entero no negativo, N=1, y P1, P2 y P3 son un primer parámetro de cálculo, un segundo parámetro de cálculo y un tercer parámetro de cálculo respectivamente, donde el primer parámetro de cálculo se determina mediante la comprobación de una tabla de búsqueda preestablecida en base a un parámetro angular, el segundo parámetro de cálculo se determina mediante la comprobación de la tabla de búsqueda en base a un parámetro angular temporal, y el tercer parámetro de cálculo se determina en base al parámetro angular y un parámetro de distancia; donde el parámetro angular se representa como ánguloIdx, y el parámetro angular temporal se obtiene mediante (ánguloIdx+8)%32, donde el parámetro de distancia se representa como distanciaIdx; el ánguloIdx especifica un índice de ángulo del modo de partición geométrica, y el distanciaIdx especifica un índice de distancia del modo de partición geométrica; y
comparar (S204) la distancia con un umbral para determinar si se almacena la tercera información de movimiento para el conjunto de muestras, donde la tercera información de movimiento se deriva combinando la primera información de movimiento y la segunda información de movimiento cuando la primera información de movimiento y la segunda información de movimiento provienen de listas de imágenes de referencia diferentes; y la tercera información de movimiento es igual a la primera información de movimiento o a la segunda información de movimiento cuando la primera información de movimiento y la segunda información de movimiento provienen de la misma lista de imágenes de referencia.
almacenar la tercera información de movimiento para el conjunto de muestras en el caso de que un valor absoluto de la distancia sea menor que el umbral; donde la información de movimiento almacenada se utiliza para determinar el valor de predicción del conjunto de muestras, o la información de movimiento almacenada se utiliza como información de referencia para el proceso de predicción de futuros bloques de codificación.
2. El método de la reivindicación 1, en donde en el caso de que el valor absoluto de la distancia sea mayor o igual que el umbral, el método caracterizado además porque comprende:
determinar que la primera información de movimiento se almacene en el conjunto de muestras en el caso de que la distancia sea positiva; o,
determinar que la segunda información de movimiento se almacene en el conjunto de muestras en caso de que la distancia sea negativa.
3. El método de una cualquiera de las reivindicaciones 1 o 2, caracterizado por que el umbral está predeterminado.
4. El método de una cualquiera de las reivindicaciones 1 a 3, caracterizado por que el límite común se determina mediante el parámetro angular y el parámetro de distancia, antes de determinar la distancia entre el conjunto de muestras en el bloque actual y el límite común, el método además comprende:
determinar (S201) el parámetro angular y el parámetro de distancia.
5. El método de la reivindicación 4, caracterizado por que cuando el método se implementa en un decodificador, la determinación del parámetro angular y del parámetro de distancia, comprende:
analizar el parámetro angular y el parámetro de distancia de un flujo de bits; o,
analizar un indicador del flujo de bits, y
obtener el parámetro angular y el parámetro de distancia a partir del indicador.
6. El método de una cualquiera de las reivindicaciones 1 a 5, caracterizado por que el primer subbloque y el segundo subbloque son una partición de triángulo, una partición trapezoidal o una partición rectangular asimétrica.
7. Un aparato de almacenamiento de información de movimiento, en donde un bloque actual consta de un primer subbloque y un segundo subbloque, el primer subbloque y el segundo subbloque están separados por un límite común, siendo el límite común una línea de división de un modo de partición geométrica. El primer subbloque corresponde a la primera información de movimiento y el segundo subbloque corresponde a la segunda información de movimiento, donde la primera información de movimiento incluye un vector de movimiento de uni-predicción para el primer subbloque, y la segunda información de movimiento incluye un vector de movimiento de uni-predicción para el segundo subbloque, el aparato comprende:
un módulo de cálculo (3001), configurado para determinar una distancia entre un conjunto de muestras en el bloque actual y el límite común; donde la distancia se calcula de la siguiente manera:
distDesdeLínea = ((x<<N) K) * P1 (y<<N) K) * P2 - P3;
y donde distDesdeLínea representa la distancia, x representa una coordenada horizontal de una posición objetivo en el conjunto de muestras, y representa una coordenada vertical de la posición objetivo, K es un entero no negativo, N=1, P1, P2 y P3 son un primer parámetro de cálculo, un segundo parámetro de cálculo y un tercer parámetro de cálculo respectivamente, donde el primer parámetro de cálculo se determina mediante la comprobación de una tabla de búsqueda preestablecida en base a un parámetro angular y el segundo parámetro de cálculo se determina mediante la comprobación de la tabla de búsqueda en base a un parámetro angular temporal, el tercer parámetro de cálculo se determina en base al parámetro angular y un parámetro de distancia; donde el parámetro angular es ángulodx, el parámetro angular temporal es (ángulodx+8)%32, el parámetro de distancia es distanciaIdx; el ánguloIdx especifica un índice de ángulo del modo de partición geométrica, y el distanciaIdx especifica un índice de distancia del modo de partición geométrica; y
un módulo de comparación (3002), configurado para comparar la distancia con un umbral para determinar si se almacena la tercera información de movimiento para el conjunto de muestras, donde la tercera información de movimiento se deriva combinando la primera información de movimiento y la segunda información de movimiento cuando la primera información de movimiento y la segunda información de movimiento provienen de listas de imágenes de referencia diferentes; y la tercera información de movimiento es igual a la primera información de movimiento o a la segunda información de movimiento cuando la primera información de movimiento y la segunda información de movimiento provienen de la misma lista de imágenes de referencia;
un módulo de almacenamiento (44, 460, 504), configurado para almacenar la tercera información de movimiento para el conjunto de muestras en el caso de que un valor absoluto de la distancia sea menor que el umbral; donde la información de movimiento almacenada se utiliza para determinar el valor de predicción del conjunto de muestras, o la información de movimiento almacenada se utiliza como información de referencia para el proceso de predicción de futuros bloques de codificación.
8. El aparato de la reivindicación 7, caracterizado por que en el caso de que el valor absoluto de la distancia sea mayor o igual que el umbral, el módulo de comparación (3002) además se configura para:
determinar que la primera información de movimiento se almacene en el conjunto de muestras en el caso de que la distancia sea positiva; o,
determinar que la segunda información de movimiento se almacene en el conjunto de muestras en el caso de que la distancia sea negativa.
9. El aparato de una cualquiera de las reivindicaciones 7 a 8, caracterizado por que el umbral está predeterminado.
10. El aparato de una cualquiera de las reivindicaciones 7 a 9, caracterizado por que el límite común se determina mediante el parámetro angular y el parámetro de distancia, el módulo de cálculo (3001) además se configura para:
determinar el parámetro angular y el parámetro de distancia.
11. El aparato de la reivindicación 10, caracterizado por que cuando el aparato es un decodificador, el módulo de cálculo (3001) además se configura para:
analizar el parámetro angular y el parámetro de distancia de un flujo de bits; o,
analizar un indicador del flujo de bits, y
obtener el parámetro angular y el parámetro de distancia a partir del indicador.
12. El aparato de cualquiera de las reivindicaciones 7 a 11, caracterizado por que el primer subbloque y el segundo subbloque son una partición de triángulo, una partición trapezoidal o una partición rectangular asimétrica.
13. Un programa informático que comprende código de programa para realizar el método de acuerdo con una cualquiera de las reivindicaciones 1 a 6 cuando se ejecuta en una computadora.
ES19759556T 2019-08-26 2019-08-26 Método y aparato para el almacenamiento de información de movimiento Active ES2967663T3 (es)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/EP2019/072716 WO2021037337A1 (en) 2019-08-26 2019-08-26 Method and apparatus for motion information storage

Publications (1)

Publication Number Publication Date
ES2967663T3 true ES2967663T3 (es) 2024-05-03

Family

ID=67777310

Family Applications (1)

Application Number Title Priority Date Filing Date
ES19759556T Active ES2967663T3 (es) 2019-08-26 2019-08-26 Método y aparato para el almacenamiento de información de movimiento

Country Status (17)

Country Link
US (1) US20220191504A1 (es)
EP (2) EP4005204B1 (es)
JP (2) JP7385004B2 (es)
KR (1) KR20220044817A (es)
CN (3) CN116708797A (es)
AU (1) AU2019462982A1 (es)
BR (1) BR112022003113A2 (es)
CA (1) CA3152030A1 (es)
DK (1) DK4005204T3 (es)
ES (1) ES2967663T3 (es)
FI (1) FI4005204T3 (es)
HU (1) HUE064061T2 (es)
MX (1) MX2022002197A (es)
PL (1) PL4005204T3 (es)
PT (1) PT4005204T (es)
WO (1) WO2021037337A1 (es)
ZA (1) ZA202201896B (es)

Family Cites Families (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102484706B (zh) * 2009-06-26 2015-09-16 汤姆森特许公司 使用自适应几何划分进行视频编码和解码的方法及装置
US8879632B2 (en) * 2010-02-18 2014-11-04 Qualcomm Incorporated Fixed point implementation for geometric motion partitioning
JP2012023597A (ja) * 2010-07-15 2012-02-02 Sony Corp 画像処理装置及び画像処理方法
JP2012080369A (ja) * 2010-10-01 2012-04-19 Sony Corp 画像処理装置及び画像処理方法
CN112584163B (zh) * 2018-12-28 2022-05-27 杭州海康威视数字技术股份有限公司 一种编解码方法及其设备
JP2022544350A (ja) * 2019-08-15 2022-10-18 アリババ グループ ホウルディング リミテッド 映像コード化のためのブロック分割方法
US11570434B2 (en) * 2019-08-23 2023-01-31 Qualcomm Incorporated Geometric partition mode with harmonized motion field storage and motion compensation

Also Published As

Publication number Publication date
US20220191504A1 (en) 2022-06-16
JP2022545785A (ja) 2022-10-31
EP4221212A1 (en) 2023-08-02
PT4005204T (pt) 2023-12-06
CN116708797A (zh) 2023-09-05
KR20220044817A (ko) 2022-04-11
WO2021037337A1 (en) 2021-03-04
ZA202201896B (en) 2022-12-21
PL4005204T3 (pl) 2024-03-11
CN115118978A (zh) 2022-09-27
CN114270845A (zh) 2022-04-01
DK4005204T3 (da) 2024-01-02
CN115118978B (zh) 2023-04-11
EP4005204A1 (en) 2022-06-01
AU2019462982A1 (en) 2022-03-03
FI4005204T3 (fi) 2024-01-09
HUE064061T2 (hu) 2024-02-28
CA3152030A1 (en) 2021-03-04
JP7385004B2 (ja) 2023-11-21
BR112022003113A2 (pt) 2022-05-17
JP2024020331A (ja) 2024-02-14
EP4005204B1 (en) 2023-10-04
MX2022002197A (es) 2022-03-11

Similar Documents

Publication Publication Date Title
ES2946909T3 (es) Método, aparato y producto de programa informático para interpredicción
ES2841312T3 (es) Predicción de vectores de movimiento para modelos de movimiento afines en codificación de vídeo
ES2966479T3 (es) Un codificador, un decodificador y métodos correspondientes para la intrapredicción
CN112823518B (zh) 用于译码块的几何划分块的帧间预测的装置及方法
ES2960283T3 (es) Método y aparato para el filtrado de la interpolación para la intra e interpredicción en la codificación de vídeo
BR112021004984A2 (pt) aparelho e método para quantização inversa
CN113039798A (zh) 编码器、解码器以及使用ibc专用缓冲区和针对亮度分量和色度分量的默认值刷新的对应方法
CN113613013B (zh) 视频解码设备、由解码设备实现的译码方法和解码器
ES2965083T3 (es) Terminación temprana para el refinamiento de flujo óptico
CN112673633B (zh) 合并模式的编码器、解码器及对应方法
BR112021001813A2 (pt) método de processamento de vídeo, aparelho de processamento de vídeo, codificador, decodificador, mídia e programa de computador
CN114026864A (zh) 用于几何分割模式的色度样本权重推导
CA3120795A1 (en) An encoder, a decoder and corresponding methods using ibc merge list
ES2966509T3 (es) Método y dispositivo de partición de imagen
CN116980621A (zh) 编码器、解码器及相应的帧间预测方法
ES2967903T3 (es) Codificador, decodificador y métodos correspondientes utilizando filtrado por interpolación
ES2946058T3 (es) Un codificador, un decodificador y los métodos correspondientes que usan la codificación intramodo para la intrapredicción
ES2967663T3 (es) Método y aparato para el almacenamiento de información de movimiento
JP7286782B2 (ja) 幾何学的区分けモードのためのサンプルの距離の計算
ES2946487T3 (es) Un codificador, un decodificador y métodos correspondientes de reducción de complejidad en intra predicción para el modo planar
RU2811983C2 (ru) Кодер, декодер и соответствующие способы для режима субблочного разделения
RU2793825C1 (ru) Способ и устройство для хранения информации о движении
EP3981157A1 (en) Motion field storage optimization for the line buffer