ES2965083T3 - Terminación temprana para el refinamiento de flujo óptico - Google Patents

Terminación temprana para el refinamiento de flujo óptico Download PDF

Info

Publication number
ES2965083T3
ES2965083T3 ES20759812T ES20759812T ES2965083T3 ES 2965083 T3 ES2965083 T3 ES 2965083T3 ES 20759812 T ES20759812 T ES 20759812T ES 20759812 T ES20759812 T ES 20759812T ES 2965083 T3 ES2965083 T3 ES 2965083T3
Authority
ES
Spain
Prior art keywords
prediction
block
optical flow
motion vectors
video
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
ES20759812T
Other languages
English (en)
Inventor
Semih Esenlik
Sriram Sethuraman
Jeeva Raj A
Sagar Kotecha
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 ES2965083T3 publication Critical patent/ES2965083T3/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/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/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/557Motion estimation characterised by stopping computation or iteration based on certain criteria, e.g. error magnitude being too large or early exit
    • 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/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/117Filters, e.g. for pre-processing or post-processing
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/134Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the element, parameter or criterion affecting or controlling the adaptive coding
    • H04N19/157Assigned coding mode, i.e. the coding mode being predefined or preselected to be further used for selection of another element or parameter
    • H04N19/159Prediction type, e.g. intra-frame, inter-frame or bidirectional frame prediction
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/169Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding
    • H04N19/17Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding the unit being an image region, e.g. an object
    • H04N19/176Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding the unit being an image region, e.g. an object the region being a block, e.g. a macroblock
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/80Details of filtering operations specially adapted for video compression, e.g. for pixel interpolation
    • H04N19/82Details of filtering operations specially adapted for video compression, e.g. for pixel interpolation involving filtering within a prediction loop

Landscapes

  • Engineering & Computer Science (AREA)
  • Multimedia (AREA)
  • Signal Processing (AREA)
  • Computing Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Compression Or Coding Systems Of Tv Signals (AREA)
  • Compression, Expansion, Code Conversion, And Decoders (AREA)
  • Pharmaceuticals Containing Other Organic And Inorganic Compounds (AREA)
  • Acyclic And Carbocyclic Compounds In Medicinal Compositions (AREA)

Abstract

Se proporciona un método de codificación de vídeo implementado en un dispositivo de decodificación o un dispositivo de codificación, comprendiendo el método: obtener vectores de movimiento iniciales para un bloque actual; obtener primeras predicciones para un valor de muestra en el bloque actual basándose en los vectores de movimiento iniciales; calcular un primer coste de coincidencia según las primeras predicciones; determinar si se debe realizar o no un proceso de refinamiento del flujo óptico, de acuerdo con al menos una condición preestablecida, comprendiendo al menos una condición preestablecida una condición de si el primer costo de coincidencia calculado es igual o mayor que un umbral; y realizar un proceso de refinamiento del flujo óptico para obtener una interpredicción final para el valor de muestra en el bloque actual, cuando se determina que se debe realizar el proceso de refinamiento del flujo óptico. (Traducción automática con Google Translate, sin valor legal)

Description

DESCRIPCIÓN
Terminación temprana para el refinamiento de flujo óptico
La presente invención se refiere al campo del procesamiento de imágenes y, de manera más particular, al refinamiento de flujo óptico.
ANTECEDENTES DE LA INVENCIÓN
La codificación de vídeo (codificación y decodificación de vídeo) es utilizada en un amplio rango de aplicaciones de vídeo digital, por ejemplo, TV digital de transmisión, transmisión de vídeo sobre la internet y redes móviles, aplicaciones de conversación en tiempo real tales como salas de vídeo, conferencias de vídeo, discos DVD y Bluray, sistemas de adquisición y edición de contenido de vídeo, grabadoras de vídeo de aplicaciones de seguridad. La cantidad de datos de vídeo necesarios para mostrar incluso un vídeo relativamente corto puede ser sustancial, lo cual puede tener como resultado dificultades cuando los datos van a ser transmitidos por secuencias o de otra manera comunicados a través de una red de comunicaciones con capacidad limitada de ancho de banda. Por lo tanto, datos de vídeo generalmente son comprimidos antes de ser comunicados a través de las redes de telecomunicaciones modernas de hoy en día. El tamaño de un vídeo también podría ser un problema cuando el vídeo es almacenado en un dispositivo de almacenamiento debido a que los recursos de memoria pueden ser limitados. Dispositivos de compresión de vídeo con frecuencia utilizan software y/o hardware en la fuente para codificar los datos de vídeo antes de la transmisión o almacenamiento, de esta manera disminuyendo la cantidad de datos necesarios para representar imágenes de vídeo digital. Los datos comprimidos entonces son recibidos en el destino por un dispositivo de descompresión de vídeo que decodifica los datos de vídeo. Con recursos de red limitados y demandas cada vez mayores de calidad de vídeo superior, son deseables técnicas de compresión y descompresión mejoradas que ayuden en la relación de compresión con poco a ningún sacrificio en la calidad de imagen.
El documento WO 2019/010156 A1 divulga un dispositivo que puede determinar si se habilita o deshabilita un flujo óptico bidireccional (BIO) de una unidad de codificación (CU) actual (p. ej., un bloque y/o sub-bloque). Se puede identificar la información de predicción para la CU y puede incluir señales de predicción asociadas con un primer bloque de referencia y un segundo bloque de referencia (p. ej., o un primer sub-bloque de referencia y un segundo sub-bloque de referencia). Se puede calcular una diferencia de predicción y se puede utilizar para determinar la similitud entre las dos señales de predicción. La CU se puede reconstruir en función de la similitud. Por ejemplo, reconstruir la CU con el BIO habilitado o el BIO deshabilitado se puede basar en si las dos señales de predicción son similares, se puede determinar habilitar el BIO para la CU cuando se determina que las dos señales de predicción son diferentes. Por ejemplo, la CU se puede reconstruir con el BIO deshabilitado cuando se determina que las dos señales de predicción son similares. El documento US 2004/076333 A1 divulga un sistema de filtro con interpolación adaptativa que busca obtener un filtro con interpolación optimizada que minimice el error de predicción en un códec de vídeo que incluye un módulo de interpolación y un espacio de búsqueda discreto. Se sitúa una pluralidad de filtros de interpolación discreta en una retícula tridimensional dentro del espacio de búsqueda. El módulo de interpolación puede seleccionar un filtro mínimo actual. En función del filtro mínimo actual, se puede identificar una región de búsqueda dentro del espacio de búsqueda que incluye una pluralidad de filtros candidatos situados adyacentes al filtro mínimo actual. El módulo de interpolación puede interpolar una señal de una imagen de referencia con cada uno de los filtros candidatos. El filtro candidato que da como resultado el error de predicción más pequeño se puede identificar como el filtro mínimo actual y la búsqueda se repite hasta que se minimiza el error de predicción.
Recientemente, la codificación interpredicción fue mejorada por el refinamiento de flujo óptico bi-predictivo. Esta técnica puede mejorar la precisión de la interpredicción de un bloque actual de una imagen a ser codificada. Sin embargo, el refinamiento de flujo óptico bi-predictivo es relativamente costoso en términos de carga computacional. Por lo tanto, se debe encontrar un compromiso entre la interpredicción precisa y la carga computacional. La presente invención aborda este problema.
RESUMEN
Realizaciones de la presente solicitud proporcionan aparatos y métodos para codificar y decodificar de acuerdo con las reivindicaciones independientes.
Los objetivos anteriores así como otros se logran a través de la materia sujeto de las reivindicaciones independientes. Formas de implementación adicionales son aparentes a partir de las reivindicaciones dependientes, la descripción y las figuras.
Se proporciona un método de codificación de vídeo, el método comprende: obtener un par de vectores de movimiento iniciales para un bloque; obtener un primer conjunto de muestras predichas para las muestras en el bloque actual con base en el par de vectores de movimiento iniciales; calcular un primer costo de emparejamiento de acuerdo con el primer conjunto de muestras predichas, en donde el primer el primer costo de emparejamiento representa una suma de diferencias absolutas, SAD, entre dos bloques de predicción obtenidos utilizando el primer vector de movimiento inicial y el segundo vector de movimiento inicial respectivos del par de vectores de movimiento iniciales; determinar si el bloque actual es elegible para ejecutar el refinamiento de vector de movimiento, MVR; si se determina que el bloque actual es elegible para ejecutar el MVR: obtener un par de vectores de movimiento refinados y un segundo costo de emparejamiento correspondiente al par de vectores de movimiento refinados, mediante la ejecución del MVR utilizando el par de vectores de movimiento iniciales; obtener un segundo conjunto de muestras predichas para las muestras en el bloque actual utilizando un filtro de interpolación de K derivaciones utilizando el par de vectores de movimiento refinados; determinar si un proceso de refinamiento de flujo óptico debiera ser ejecutado o no, de acuerdo con al menos una condición preestablecida, al menos la condición preestablecida comprendiendo una condición respecto a si el segundo costo de emparejamiento es menor que un umbral;
ejecutar un proceso de refinamiento de flujo óptico para obtener una interpredicción final para el valor de muestra en el bloque actual, cuando se determina que el segundo costo de emparejamiento no es menor que el umbral; en donde la ejecución del proceso de refinamiento de flujo óptico comprende: ejecutar el refinamiento de flujo óptico con base en el segundo conjunto de muestras predichas; en donde únicamente cuando se determina que no se debería ejecutar el proceso de refinamiento de flujo óptico, se obtiene la interpredicción final mediante una suma ponderada del segundo conjunto de muestras predichas.
Por lo tanto, de acuerdo con el desempeño de la invención de refinamiento de flujo óptico, en particular, refinamiento de flujo óptico bidireccional es ejecutado sobre una base condicional. El refinamiento de flujo óptico relativamente costoso es solo ejecutado bajo ciertas circunstancias que permiten una mejora de precisión deseable conveniente de todo el proceso de interpredicción. En caso de que se determine que el refinamiento de flujo óptico probablemente no tenga como resultado una mejora de la precisión de la interpredicción que amerite la carga computacional relativamente alta necesaria para ejecutar el refinamiento de flujo óptico, se puede suprimir el refinamiento de flujo óptico. El tiempo de decodificación, por lo tanto, puede ser significativamente reducido. Los vectores de movimiento iniciales pueden ser señalizados en una corriente de bits. Alternativamente, predicciones de vector de movimiento y los componentes de diferencia de vector de movimiento pueden ser proporcionados para los vectores de movimiento iniciales.
Por ejemplo, al menos una condición preestablecida comprende la condición de que el bloque actual puede ser predicho por refinamiento de vector de movimiento del lado del decodificador. Esta condición particular comprendida en al menos una condición preestablecida puede ser verificada en primer lugar para evitar esfuerzos computacionales innecesarios.
De acuerdo con una realización particular, se determina que el proceso de refinamiento de flujo óptico debiera ser ejecutado, cuando se determina que se cumplen todas de al menos las condiciones preestablecidas. Al menos una condición preestablecida puede comprender una o más condiciones adicionales, en principio. Por ejemplo, al menos una condición preestablecida puede comprender una condición que consiste en que un indicador particular es establecido (a 1, por ejemplo) para que se ejecute el proceso de refinamiento óptico. Si las condiciones no son todas cumplidas, ningún refinamiento de flujo óptico pudiera ser ejecutado en lo absoluto de acuerdo con una realización particular para reducir demandas computacionales.
Las primeras predicciones para el valor de muestra en el bloque actual se pueden obtener con base en un primer filtro de interpolación para lograr cierta precisión de sub-pixel. En particular, el primer filtro de interpolación puede ser un filtro de interpolación bilineal relativamente simple que permite un rápido procesamiento de filtro.
El método inventivo de la codificación de vídeo implementado en un dispositivo de decodificación o un dispositivo de codificación puede comprender cierto refinamiento de vector de movimiento diferente del refinamiento de flujo óptico. Por lo tanto, el método puede comprender, obtener vectores de movimiento refinados con base en los vectores de movimiento iniciales y el primer costo de emparejamiento; obtener segundas predicciones para el valor de muestra en el bloque actual de acuerdo con los vectores de movimiento refinados, cuando se determina que el proceso de refinamiento de flujo óptico debiera ser ejecutado, ejecutar el refinamiento de flujo óptico con base en las segundas predicciones (representando predicciones ya refinadas). La precisión general del proceso de interpredicción puede ser mejorada mediante el empleo de los vectores de movimiento refinados.
Se observa que las primeras predicciones así como el primer costo de emparejamiento ya están calculadas para el refinamiento de vector de movimiento. Por lo tanto, no son necesarios cálculos extra para decidir sobre una terminación/supresión temprana del proceso de refinamiento de flujo óptico, pero se pueden reutilizar los resultados de los cálculos previos involucrados en el proceso de refinamiento de vector de movimiento.
En cada una de las realizaciones anteriores del método inventivo la obtención de primeras predicciones para un valor de muestra en el bloque actual con base en los vectores de movimiento iniciales puede comprender: obtener un número de pares de candidatos con base en los vectores de movimiento iniciales y obtener primeras predicciones para un valor de muestra en el bloque actual con base en al menos uno de los pares de candidatos y el cálculo de un primer costo de emparejamiento de acuerdo con las primeras predicciones puede comprender: determinar un costo de emparejamiento para cada uno de los pares de candidatos con base en las primeras predicciones y determinar el costo de emparejamiento más pequeño de los costos de emparejamiento determinados como el primer costo de emparejamiento.
En el transcurso del refinamiento de vector de movimiento se puede obtener un número de pares de candidatos para los vectores de movimiento refinados, los pares incluyendo un par de los vectores de movimiento iniciales. Por ejemplo, los pares de candidatos para los vectores de movimiento refinados comprenden un par de los vectores de movimiento iniciales (MV0, MV1) y los pares (MV0 (0,1), MV1 (0,-1)), (MV0 (1,0), MV1 (-1,0)), (MV0 (0,-1), MV1 (0,1)), (MV0 (-1,0), MV1 (1,0)), donde (1,-1) denota un vector que tiene un desplazamiento de 1 en la dirección horizontal (o x) y un desplazamiento de -1 en la dirección vertical (o y). Para cada uno de los pares se puede determinar un costo de emparejamiento correspondiente a ese par y el primer costo de emparejamiento antes mencionado puede ser determinado como el más pequeño de los costos de emparejamiento determinado para los pares de candidatos para los vectores de movimiento refinados. De acuerdo con ejemplos particulares, este puede ser el costo de emparejamiento correspondiente al par de vectores de movimiento iniciales (MV0, MV1) o (MV0’=MV0 (0,1), MV1’= MV1 (0,-1)) con los vectores de movimiento refinados MV0’ y MV1’.
El empleo de ese tipo de primer costo de emparejamiento puede ser conveniente en términos de la codificación general.
Las segundas predicciones antes mencionadas para el valor de muestra en el bloque actual se pueden obtener de acuerdo con un segundo filtro de interpolación. Este segundo filtro de interpolación puede ser un filtro de interpolación de 6-derivaciones u 8-derivaciones lo cual es relativamente costoso pero conveniente en términos de precisión de sub-pixel.
Los vectores de movimiento refinados antes mencionados se pueden obtener de acuerdo con un segundo costo de emparejamiento para controlar la idoneidad de los vectores de movimiento refinados para la interpredicción. Cuando un valor del segundo costo de emparejamiento es mayor que o igual a otro valor de umbral, se puede determinar que el proceso de refinamiento de flujo óptico debiera ser ejecutado. De otra manera, se puede determinar que no vale la pena ejecutar algún procesamiento de refinamiento de flujo óptico.
De acuerdo con otra realización, solo cuando se determina que el proceso de refinamiento de flujo óptico no debiera ser ejecutado, la interpredicción final se obtiene a través de una suma ponderada de las segundas predicciones. La suma ponderada de las segundas predicciones proporciona cierta precisión que pudiera ser considerada suficiente en casos en los que no se considera apropiado ejecutar el proceso de refinamiento de flujo óptico relativamente costoso.
En general, el valor de umbral o el otro valor de umbral puede ser un valor que es calculado con base en la profundidad de bit de las primeras predicciones. Además, el valor de umbral se puede obtener de acuerdo con el número de muestras predichas que son utilizadas para calcular el primer costo de emparejamiento de acuerdo con las primeras predicciones. Además, el valor de umbral se puede obtener de acuerdo con el tamaño (anchura y altura en términos del número de pixeles) del bloque actual. Por ejemplo, el umbral puede ser thr = nCbW x nCbH x K, donde K es un valor mayor que cero, nCbW y nCbH son la anchura y la altura del bloque actual. Por ejemplo, K = 2. Además, el segundo costo de emparejamiento antes mencionado puede ser un costo derivado que se obtiene utilizando costos de emparejamiento evaluados durante el refinamiento de vector de movimiento y un modelo predefinido para la forma del costo de emparejamiento cerca de la posición de costo de emparejamiento mínimo. El modelo predefinido en este contexto puede ser un modelo de combinación lineal. El uso de un modelo predefinido para la forma del costo de emparejamiento cerca de la posición de costo de emparejamiento mínimo puede mejorar la precisión del proceso de interpredicción.
El método de acuerdo con todas las realizaciones antes descritas además puede comprender el paso de generar un bloque de interpredicción comprendiendo la interpredicción final para el valor de muestra en el bloque actual.
Además, se proporciona un codificador o un decodificador que comprende algunos circuitos de procesamiento para llevar a cabo el método de acuerdo con cualquiera de las realizaciones antes descritas. Además, se proporciona un producto de programa informático que comprende un código de programa para ejecutar el método de acuerdo con cualquiera de las realizaciones antes descritas.
Todas las variantes antes descritas del método de codificación de vídeo pueden ser implementadas en un decodificador o un codificador. Por lo tanto, se proporciona un decodificador o un codificador, comprendiendo: uno o más procesadores y un medio de almacenamiento legible por computadora no transitorio acoplado a los procesadores y almacenando programación para ejecución por los procesadores, en donde la programación, cuando es ejecutada por los procesadores, configura el decodificador para llevar a cabo el método de acuerdo con cualquiera de las realizaciones antes descritas.
Detalles de una o más realizaciones, así como ejemplos que no forman parte de la invención, son establecidos en los dibujos acompañantes y en la siguiente descripción. Otras características, objetivos y ventajas serán aparentes a partir de la descripción, dibujos y reivindicaciones.
BREVE DESCRIPCIÓN DE LAS FIGURAS
En lo sucesivo, realizaciones de la invención son descritas con más detalle con referencia a las figuras y dibujos anexos, en los cuales:
La figura 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 invención;
La figura 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 invención;
La figura 2 es un diagrama de bloques que muestra un ejemplo de un codificador de vídeo configurado para implementar realizaciones de la invención;
La figura 3 es un diagrama de bloques que muestra una estructura ejemplar de un decodificador de vídeo configurado para implementar realizaciones de la invención;
La figura 4 es un diagrama de bloques que ilustra un ejemplo de un aparato de codificación o un aparato de decodificación;
La figura 5 es un diagrama de bloques que ilustra otro ejemplo de un aparato de codificación o un aparato de decodificación;
La figura 6 es un gráfico de flujo que ilustra un ejemplo del proceso de refinamiento óptico que no forma parte de la presente invención;
La figura 7 es un gráfico de flujo que ilustra otro ejemplo del proceso de refinamiento óptico que no forma parte de la presente invención;
La figura 8 es un gráfico de flujo que ilustra otro ejemplo del proceso de refinamiento óptico que no forma parte de la presente invención;
La figura 9 es un gráfico de flujo que ilustra otra realización del proceso de refinamiento óptico.
La figura 10 es un gráfico de flujo que ilustra un método de codificación de vídeo implementado en un dispositivo de decodificación o un dispositivo de codificación de acuerdo con un ejemplo de la presente invención.
La figura 11 ilustra un dispositivo para uso en un codificador de imagen y/o un decodificador de imagen de acuerdo con una realización de la presente invención.
En lo sucesivo, signos de referencia idénticos se refieren a características idénticas o al menos funcionalmente equivalentes en caso que no se especifiquen de manera explícita de otra manera.
DESCRIPCIÓN DETALLADA DE LA INVENCIÓN Y EJEMPLOS QUE NO FORMAN PARTE DE LA INVENCIÓN
En la siguiente descripción, se hace referencia a las figuras acompañantes, las cuales forman parte de la divulgación, y las cuales muestran, a manera de ilustración, aspectos específicos de realizaciones de la invención o aspectos específicos en los cuales se pueden utilizar las realizaciones de la invención y ejemplos que no forman parte de la presente invención. Se entiende que realizaciones de la invención pueden ser utilizadas en otros aspectos y comprenden cambios estructurales o lógicos no mostrados en las figuras. La siguiente descripción detallada, entonces, no se tomará en un sentido limitativo, y el alcance de la invención es definido por las reivindicaciones anexas.
Por ejemplo, se entiende que una divulgación en conexión con un método descrito también puede ser verdadera para un dispositivo o sistema correspondiente configurado para ejecutar el método y viceversa. Por ejemplo, si se describe uno o una pluralidad de pasos de método específicos, un dispositivo correspondiente puede incluir una o una pluralidad de unidades, por ejemplo unidades funcionales, para ejecutar el paso de método o la pluralidad de pasos de método (por ejemplo una unidad ejecutando uno o una pluralidad de pasos, o una pluralidad de unidades, cada una ejecutando uno o más de la pluralidad de pasos), incluso si dicha unida o unidades no son explícitamente descritas o ilustradas en las figuras. Por otra parte, por ejemplo, si un aparato específico es descrito con base en una o una pluralidad de unidades, por ejemplo unidades funcionales, un método correspondiente puede incluir un paso para ejecutar la funcionalidad de una o una pluralidad de unidades (por ejemplo un paso ejecutando la funcionalidad de una o una pluralidad de unidades, o una pluralidad de pasos, cada uno ejecutando la funcionalidad de una o más de la pluralidad de unidades), incluso si dicho paso o pluralidad de pasos no se describen o ilustran explícitamente en las figuras. Además, se entiende que las características de las realizaciones y/o aspectos ejemplares aquí descritos se pueden combinar entre sí, a menos que específicamente se observe de otra manera. La codificación de vídeo típicamente se refiere al procesamiento de una secuencia de imágenes, las cuales forman el vídeo o la secuencia de vídeo. En lugar del término “imagen” se puede utilizar el término “cuadro” o “fotografía” como sinónimos en el campo de la codificación de vídeo. La codificación de vídeo (o codificación en general) comprende dos partes codificación de vídeo y decodificación de vídeo. La codificación de vídeo es ejecutada en el lado fuente, típicamente comprendiendo el procesamiento (por ejemplo por compresión) de las imágenes de vídeo originales para reducir la cantidad de datos requeridos para representar las imágenes de vídeo (para almacenamiento y/o transmisión más eficientes). La decodificación de vídeo es ejecutada en el lado destino y típicamente comprende el procesamiento inverso en comparación con el codificador para reconstruir las imágenes de vídeo. Realizaciones que hacen referencia a “codificación” de imágenes de vídeo (o imágenes en general) deberán entenderse como relacionadas con la “codificación” o “decodificación” de imágenes de vídeo o secuencias de vídeo respectivas. La combinación de la parte de codificación y la parte de decodificación es también referida como CODEC (Codificación y Decodificación).
En el caso de codificación de vídeo sin pérdida, las imágenes de vídeo originales pueden ser reconstruidas, es decir las imágenes de vídeo reconstruidas tienen la misma calidad que las imágenes de vídeo originales (asumiendo que no hay pérdida de transmisión u otra pérdida de datos durante el almacenamiento o transmisión). En caso decodificación de vídeo con pérdida, se ejecuta compresión adicional, por ejemplo mediante cuantificación, para reducir la cantidad de datos que representan las imágenes de vídeo, las cuales no pueden ser completamente reconstruidas 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.
Varias normas de codificación de vídeo pertenecen al grupo de “códecs de vídeo híbrido con pérdida” (es decir combinan predicción espacial y temporal en el dominio de muestra y codificación de transformada 2D para aplicar cuantificación en el dominio de transformada). Cada imagen de una secuencia de vídeo típicamente es particionada en un conjunto de bloques que no se traslapan y la codificación típicamente es ejecutada en un nivel de bloque. En otras palabras, en el codificador el vídeo típicamente es procesado, es decir codificado, en un nivel de bloque (bloque de vídeo), por ejemplo utilizando predicción espacial (intra imagen) y/o predicción temporal (inter imagen) para generar un bloque de predicción, sustrayendo el bloque de predicción del bloque actual (bloque actualmente procesado/a ser procesado) para obtener un bloque residual, transformando el bloque residual y cuantificando el bloque residual en el dominio de transformada para reducir la cantidad de datos que se van a transmitir (compresión), mientras que en el decodificador el procesamiento inverso, en comparación con el codificador, es aplicado al bloque codificado o comprimido para reconstruir el bloque actual para representación. Además, el codificador duplica el bucle de procesamiento del decodificador de manera que ambos generarán predicciones idénticas (por ejemplo intra-predicciones e inter-predicciones) y/o re-construcciones para procesamiento, es decir codificación, de los bloques subsiguientes.
En las siguientes realizaciones de un sistema de codificación de vídeo 10, un codificador de vídeo 20 y un decodificador de vídeo 30 se describen con base en las figuras 1 a 3.
La figura 1A es un diagrama de bloques esquemático que ilustra un ejemplo de sistema de codificación 10, por ejemplo un sistema de codificación de vídeo 10 (o para abreviar sistema de codificación 10) que puede utilizar técnicas de esta presente solicitud. El codificador d vídeo 20 (o para abreviar codificador 20) y el decodificador de vídeo 30 (o para abreviar decodificador 30) del sistema de codificación de vídeo 10 representan ejemplos de dispositivos que pueden ser configurados para ejecutar técnicas de acuerdo con diversos ejemplos descritos en la presente solicitud.
Tal como se muestra en la figura 1A, el sistema de codificación 10 comprende un dispositivo fuente 12 configurado para proporcionar datos de imagen codificados 21 por ejemplo, a un dispositivo destino 14 para decodificar los datos de imagen codificados 13.
El dispositivo fuente 12 comprende un codificador 20, y adicionalmente, es decir opcionalmente, puede comprender una fuente de imagen 16, un pre-procesador (o unidad de pre-procesamiento) 18, por ejemplo un pre-procesador de imagen 18, y una interfaz de comunicación o unidad de comunicación 22.
La fuente de imagen 16 puede comprender o puede ser cualquier tipo de dispositivo de captura de imagen, por ejemplo una cámara para capturar una imagen del mundo real y/o cualquier tipo de dispositivo de generación de imagen, por ejemplo un procesador de gráficos por computadora para generar una imagen animada por computadora, o cualquier tipo de otro dispositivo para obtener y/o proporcionar una imagen del mundo real, una imagen generada por computadora (por ejemplo un contenido de pantalla, una imagen de realidad virtual (VR)) y/o cualquier combinación de los mismos (por ejemplo una imagen de realidad aumentada (AR)). La fuente de imagen puede ser cualquier tipo de memoria o almacenamiento que almacene cualquiera de las imágenes antes mencionadas.
A diferencia del pre-procesador 18 y el procesamiento ejecutado por la unidad de pre-procesamiento 18, la imagen o datos de imagen 17 también pueden ser referidos como imagen sin procesar o datos de imagen sin procesar 17. El pre-procesador 18 está configurada para recibir los datos de imagen (sin procesar) 17 y para ejecutar pre procesamiento en los datos de imagen 17 para obtener una imagen pre-procesada 19 o datos de imagen pre procesada 19. El pre-procesamiento ejecutado por el pre-procesador 18, por ejemplo, puede comprender recorte, conversión de formato de color (por ejemplo de RGB a YCbCr), corrección de color, o eliminación de ruido. Se puede entender que la unidad de pre-procesamiento 18 puede ser un componente opcional.
El codificador de vídeo 20 está configurado para recibir los datos de imagen pre-procesada 19 y puede proporcionar datos de imagen codificada 21 (detalles adicionales se describirán a continuación, por ejemplo, con base en la figura 2).
La interfaz de comunicación 22 del dispositivo fuente 12 se puede configurar para recibir los datos de imagen codificada 21 y transmitir los datos de imagen codificada 21 (o cualquier versión procesada adicional de los mismos) sobre el canal de comunicación 13 a otro dispositivo, por ejemplo el dispositivo destino 14 o cualquier otro dispositivo, para almacenamiento o reconstrucción directa.
El dispositivo destino 14 comprende un decodificador 30 (por ejemplo un decodificador de vídeo 30), y adicionalmente, es decir opcionalmente, puede comprender una interfaz de comunicación o unidad de comunicación 28, un post-procesador 32 (o unidad de post-procesamiento 32) y un dispositivo de exhibición 34.
La interfaz de comunicación 28 del dispositivo destino 14 está configurada para recibir los datos de imagen codificada 21 (o cualquier versión procesada adicional de los mismos), por ejemplo directamente desde el dispositivo fuente 12 o desde cualquier otra fuente, por ejemplo un dispositivo de almacenamiento, por ejemplo un dispositivo de almacenamiento de datos de imagen codificada, y proporcionar los datos de imagen codificada 21 al decodificador 30.
La interfaz de comunicación 22 y la interfaz de comunicación 28 pueden ser configuradas para transmitir o recibir los datos de imagen codificada 21 o los datos codificados 13 a través de un enlace de comunicación directa entre el dispositivo fuente 12 y el dispositivo destino 14, por ejemplo una conexión cableada o inalámbrica directa, o a través de cualquier tipo de red, por ejemplo una red cableada o inalámbrica o cualquier combinación de las mismas, o cualquier tipo de red privada y pública o cualquier tipo de combinación de las mismas.
La interfaz de comunicación 22 por ejemplo, puede ser configurada para empacar los datos de imagen codificada 21 en un formato apropiado, por ejemplo paquetes, y/o procesar los datos de imagen codificada utilizando cualquier tipo de codificación de transmisión o procesamiento para transmisión sobre un enlace de comunicación o red de comunicación.
La interfaz de comunicación 28, formando la contraparte de la interfaz de comunicación 22, por ejemplo, puede ser configurada 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 desempacado para obtener datos de imagen codificada 21.
Ambas, la interfaz de comunicación 22 y la interfaz de comunicación 28 pueden ser configuradas como interfaces de comunicación unidireccionales conforme a lo indicado por la flecha para el canal de comunicación 13 en la figura 1A apuntando desde el dispositivo fuente 12 al dispositivo destino 14, o interfaces de comunicación bidireccionales, y se pueden configurar, por ejemplo para enviar y recibir mensajes, por ejemplo para establecer una conexión, para reconocer e intercambiar cualquier otra información relacionada con el enlace de comunicación y/o transmisión de datos, por ejemplo transmisión de datos de imagen codificada.
El decodificador 30 está configurado para recibir los datos de imagen codificada 21 y proporcionar los datos de imagen decodificada 31 o una imagen decodificada 31 (detalles adicionales se describirán a continuación, por ejemplo, con base en la figura 3 o la figura 5).
El post-procesador 32 del dispositivo destino 14 está configurado para post-procesar los datos de imagen decodificada 31 (también denominados datos de imagen reconstruida), por ejemplo la imagen decodificada 31, para obtener datos de imagen post-procesada 33, por ejemplo una imagen post-procesada 33. El post-procesamiento ejecutado por la unidad de post-procesamiento 32 puede comprender, por ejemplo conversión de formato de color (por ejemplo de YCbCr a RGB), corrección de color, recorte, o re-muestreo, o cualquier otro procesamiento, por ejemplo para preparar los datos de imagen decodificada 31 para exhibición, por ejemplo a través del dispositivo de exhibición 34.
El dispositivo de exhibición 34 del dispositivo destino 14 está configurado para recibir los datos de imagen post procesada 33 para exhibir la imagen, por ejemplo a un usuario o un telespectador. El dispositivo de exhibició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, por ejemplo pueden comprender pantallas de cristal líquido (LCD), pantallas de diodos de emisión de luz orgánica (OLED), pantallas de plasma, proyectores, pantallas micro LED, cristal líquido en silicio (LCoS), procesador de luz digital (DLP) o cualquier tipo de otra pantalla.
Aunque la figura 1A muestra el dispositivo fuente 12 y el dispositivo destino 14 como dispositivos separados, realizaciones de los dispositivos también pueden comprender ambos o ambas funcionalidades, el dispositivo fuente 12 o la funcionalidad correspondiente y el dispositivo destino 14 o la funcionalidad correspondiente. En dichas realizaciones el dispositivo fuente 12 o la funcionalidad correspondiente y el dispositivo destino 14 o la funcionalidad correspondiente pueden ser implementados utilizando el mismo hardware y/o software o mediante hardware y/o software separados o cualquier combinación de los mismos.
Tal como resultará aparente para un experto en la técnica con base en la descripción, la existencia y (exacta) división de las funcionalidades de las diferentes unidades o funcionalidades dentro del dispositivo fuente 12 y/o dispositivo destino 14 como se muestra en la figura 1A pueden variar dependiendo del dispositivo y aplicación reales en el dispositivo y 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 pueden ser implementados a través de circuitos de procesamiento como se utilizan en la figura 1B, tal como uno o más microprocesadores, procesadores de señal digital (DSPs), circuitos integrados de aplicación específica (ASICs), arreglos de compuerta programables en campo (FPGAs), lógica discreta, hardware, codificación de vídeo dedicada o cualquier combinación de los mismos. El codificador 20 puede ser implementado a través de un circuito de procesamiento 46 para incorporar los diversos módulos como se analiza con respecto al codificador 20 de la figura 2 y/o cualquier otro sistema o subsistema de codificador aquí descrito. El decodificador 30 puede ser implementado a través del circuito de procesamiento 46 para incorporar los diversos módulos como se analizó con respecto al decodificador 30 de la figura 3 y/o cualquier otro sistema o subsistema de decodificador aquí descrito. El circuito de procesamiento puede ser configurado para ejecutar las diversas operaciones como se analiza más adelante. Como se muestra en la figura 5, si las técnicas son implementadas parcialmente en software, un dispositivo puede almacenar instrucciones para el software en un medio de almacenamiento legible por computadora no-transitorio conveniente y puede ejecutar las instrucciones en hardware utilizando uno o más procesadores para llevar a cabo las técnicas de esta divulgación. Cualquiera del codificador de vídeo 20 y el decodificador de vídeo 30 puede ser integrado como parte de un codificador/decodificador combinado (CODEC) en un solo dispositivo, por ejemplo, como se muestra en la figura 1B. El dispositivo fuente 12 y el dispositivo destino 14 pueden comprender cualquiera de un amplio rango de dispositivos, incluyendo cualquier tipo de dispositivos manuales o estacionarios, por ejemplo computadoras notebook o laptop, teléfonos móviles, teléfonos inteligentes, tabletas o computadoras de tableta, cámaras, computadoras de escritorio, descodificadores, televisiones, dispositivos de exhibición, reproductores de medios digitales, consolas de juegos de vídeo, dispositivos de transmisión por secuencias de vídeo (tal como servidores de servicios de contenido o servidores de entrega de contenido), dispositivo receptor de difusión, dispositivo transmisor de difusión, o similar y puede no utilizar algún tipo de sistema operativo. En algunos casos, el dispositivo fuente 12 y el dispositivo destino 14 pueden estar equipados para comunicación inalámbrica. Por lo tanto, el dispositivo fuente 12 y el dispositivo 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 figura 1A es simplemente un ejemplo y las técnicas de la presente solicitud pueden aplicar a ajustes de codificación de vídeo (por ejemplo, codificación de vídeo o decodificación de vídeo) que no necesariamente incluyen alguna comunicación de datos entre los dispositivos de codificación y decodificación. En otros ejemplos, datos son recuperados de una memoria local, transmitidos sobre una red, o similar. 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, la codificación y decodificación es ejecutada por dispositivos que no se comunican entre sí, sino que simplemente codifican datos en la memoria y/o recuperan y decodifican datos de la memoria.
Por conveniencia de la descripción, aquí se describen realizaciones de la invención, por ejemplo, por referencia a Codificación de Vídeo de Alta Eficiencia (HEVC) o al software de referencia de la Codificación de Vídeo Versátil (VVC), la norma de codificación de vídeo de siguiente generación desarrollada por el Equipo de Colaboración Conjunto en Codificación de Vídeo (JCT-VC) del Grupo de Expertos de Codificación de Vídeo ITU-T (VCEG) y el Grupo de Expertos de Imágenes en Movimiento ISO/IEC (MPEG). Un experto en la técnica entenderá que realizaciones de la invención no se limitan a HEVC o VVC.
Codificador y método de codificación
La figura 2 muestra un diagrama de bloques esquemático de un codificador de vídeo ejemplar 20 que está configurado para implementar las técnicas de la presente solicitud. En el ejemplo de la figura 2, el codificador de vídeo 20 comprende una entrada (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 tampón de imágenes decodificadas (DPB) 230, una unidad de selección de modo 260, una unidad de codificación entrópica 270, y una salida 272 (o interfaz de salida 272). La unidad de selección de modo 260 puede incluir una unidad de interpredicción 244, una unidad de intra predicción 254 y una unidad de partición 262. La unidad de interpredicción 244 puede incluir una unidad de estimación de movimiento y una unidad de compensación de movimiento (que no se muestra). Un codificador de vídeo 20 tal como se muestra en la figura 2 también se puede referir como codificador de vídeo híbrido o un 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 pueden ser referidas como formando una trayectoria de señal de avance 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 tampón 216, el filtro de bucle 220, la memoria tampón de imágenes decodificadas (DPB) 230, la unidad de inter-predicción 244 y la unidad de intra-predicción 254 pueden ser referidas como formando una trayectoria de señal de retorno del codificador de vídeo 20, en donde la trayectoria de señal de retorno del codificador de vídeo 20 corresponde a la trayectoria de señal del decodificador (ver decodificador de vídeo 30 en la figura 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 tampón de imágenes decodificadas (DPB) 230, la unidad de interpredicción 244 y la unidad de intra-predicción 254 también se refieren a la formación del “decodificador integrado” del codificador de vídeo 20.
Imágenes y división de imagen (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 imagen de una secuencia de imágenes que forman un vídeo o secuencia de vídeo. La imagen o datos de imagen recibidos también pueden ser una imagen pre-procesada 19 (o datos de imagen pre-procesados 19). Para propósitos de simplicidad la siguiente descripción se refiere a la imagen 17. La imagen 17 también se puede referir como imagen actual o imagen a ser codificada (en particular en la codificación de vídeo para distinguir la imagen actual de otras imágenes, por ejemplo 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 ser vista como un arreglo bidimensional o matriz de muestras con valores de intensidad. Una muestra en el arreglo también se puede referir como pixel (forma corta de elemento de imagen) o un pel. El número de muestras en la dirección (o eje) horizontal y vertical del arreglo o imagen definen el tamaño y/o resolución de la imagen. Para representación de color, típicamente se emplean tres componentes de color, es decir la imagen puede ser representada o puede incluir tres arreglos de muestra. En formato o espacio de color RBG una imagen comprende un arreglo de muestra rojo, verde y azul correspondiente. No obstante, en la codificación de vídeo, cada pixel típicamente es representado en un formato o espacio de color de luminancia y crominancia, por ejemplo YCbCr, el cual comprende un componente de luminancia indicado por Y (en ocasiones también se utiliza L) y dos componentes de crominancia indicados por Cb y Cr. El componente de luminancia Y (o luma para abreviar) representa la brillantez o la intensidad del nivel de grises (por ejemplo tal como en una imagen en escala de grises), mientras que los dos componentes de crominancia (o croma para abreviar) Cb y Cr representan la cromaticidad o componentes de información de color. Por consiguiente, una imagen en formato YCbCr comprende un arreglo de muestras de luminancia de valores de muestras de luminancia (Y), y dos arreglos de muestras de crominancia de valores de crominancia (Cb y Cr). Imágenes en formato RGB pueden ser convertidas o transformadas en formato YCbCr y viceversa, el proceso también se conoce como transformación o conversión de color. Si una imagen es monocromática, la imagen puede comprender solamente un arreglo de muestras de luminancia. Por consiguiente, una imagen puede ser, por ejemplo, un arreglo de muestras de luminancia en formato monocromático o un arreglo de muestras de luminancia y dos arreglos correspondientes de muestras de crominancia en formato de color 4:2:0, 4:2:2, y 4:4:4.
Realizaciones del codificador de vídeo 20 pueden comprender una unidad de división de imagen (que no se muestra en la figura 2) configurada para dividir la imagen 17 en una pluralidad de bloques de imagen 203 (típicamente no se traslapan). Estos bloques también se pueden referir como bloques raíz, macro bloques (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 división de imagen puede ser configurada para utilizar el mismo tamaño de bloque para todas las imágenes de una secuencia de vídeo y la rejilla correspondiente definiendo el tamaño de bloque, o para cambiar el tamaño de bloque entre imágenes o subconjuntos o grupos de imágenes, y dividir cada imagen en los bloques correspondientes.
En realizaciones adicionales, el codificador de vídeo puede ser configurado 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 puede ser referido como un bloque de imagen actual o bloque de imagen a ser codificado.
Al igual que la imagen 17, el bloque de imagen 203 una vez más es o puede ser visto como un arreglo bidimensional o matriz de muestras con valores de intensidad (valores muestra), aunque de dimensión más pequeña que la imagen 17. En otras palabras, el bloque 203 puede comprender, por ejemplo, un arreglo de muestras (por ejemplo un arreglo de luminancia en caso de una imagen monocromática 17, o un arreglo de luminancia o crominancia en el caso de una imagen de color) o tres arreglos de muestras (por ejemplo un arreglo de luminancia y dos arreglos de crominancia en el caso de una imagen de color 17) o cualquier otro número y/o tipo de arreglos dependiendo del formato de color aplicado. El número de muestras en dirección (o eje) horizontal y vertical del bloque 203 define el tamaño de bloque 203. Por consiguiente, un bloque, por ejemplo, puede ser un arreglo de muestras MxN (M-columna por N-fila), o un arreglo de coeficientes de transformada MxN.
Realizaciones del codificador de vídeo 20, como se muestra en la figura 2, pueden ser configuradas para codificar la imagen 17 bloque por bloque, por ejemplo, la codificación y la predicción es ejecutada por el bloque 203.
Realizaciones del codificador de vídeo 20 como se muestran en la figura 2 pueden ser adicionalmente configuradas para dividir y/o codificar la imagen utilizando segmentos (también referidos como segmentos de vídeo), en donde una imagen puede ser dividida en o codificada utilizando uno o más segmentos (típicamente que no se traslapan), y cada segmento puede comprender uno o más bloques (por ejemplo, CTUs).
Realizaciones del codificador de vídeo 20 como se muestra en la figura 2 pueden ser configuradas adicionalmente para dividir y/o codificar la imagen utilizando grupos de mosaicos (también referidos como grupos de mosaicos de vídeo) y/o mosaicos (también referidos como mosaicos de vídeo), en donde una imagen puede ser dividida en o codificada utilizando uno o más grupos de mosaicos (típicamente no traslapándose), y cada grupo de mosaicos puede comprender, por ejemplo, uno o más bloques (por ejemplo, CTUs) o uno o más mosaicos, en donde cada mosaico, por ejemplo, puede ser de forma rectangular y puede comprender uno o más bloques (por ejemplo, CTUs), por ejemplo, bloques completes o fraccionados.
Cálculo residual
La unidad de cálculo residual 204 puede ser configurada para calcular un bloque residual 205 (también referido como residual 205) con base en el bloque de imagen 203 y un bloque de predicción 265 (detalles adicionales referentes al bloque de predicción 265 se proporcionan más adelante), por ejemplo sustrayendo valores muestra del bloque de predicción 265 de los valores muestra del bloque de imagen 203, muestra por muestra (pixel por pixel) para obtener el bloque residual 205 en el dominio de muestra.
Transformada
La unidad de procesamiento de transformada 206 puede ser configurada para aplicar una transformada, por ejemplo una transformada de coseno discreta (DCT) o una transformada de seno discreta (DST), en los valores muestra del bloque residual 205 para obtener coeficientes de transformada 207 en un dominio de transformada. Los coeficientes de transformada 207 también pueden ser referidos como coeficientes residuales de transformada y representan el bloque residual 205 en el dominio de transformada.
La unidad de procesamiento de transformada 206 puede ser configurada para aplicar aproximaciones de entero de DCT/DST, tal como las transformadas especificadas para H.265/HEVC. En comparación con una transformada DCT ortogonal, dichas aproximaciones de entero típicamente son escaladas por un cierto factor. A fin de preservar la norma del bloque residual el cual es procesado por transformadas de avance e inversa, factores de escalación adicionales son aplicados como parte del proceso de transformada. Los factores de escalación típicamente son elegidos con base en ciertas restricciones tales como factores de escalación que son una potencia de dos para operaciones de cambio, profundidad de bit de los coeficientes de transformada, compensación entre precisión y costos de implementación, etc. Factores de escalación específicos, por ejemplo, son especificados para la transformada inversa, por ejemplo por la unidad de procesamiento de transformada inversa 212 (y la transformada inversa correspondiente, por ejemplo por la unidad de procesamiento de transformada inversa 312 en el decodificador de vídeo 30 y factores de escalación correspondientes para la transformada de avance, por ejemplo por la unidad de procesamiento de transformada 206, en un codificador 20 pueden ser especificados por consiguiente.
Realizaciones del codificador de vídeo 20 (respectivamente la unidad de procesamiento de transformada 206) pueden ser configuradas 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 por entropía 270, de manera que, por ejemplo, el decodificador de vídeo 30 puede recibir y utilizar los parámetros de transformada para decodificación.
Cuantificación
La unidad de cuantificación 208 puede ser configurada para cuantificar los coeficientes de transformada 207 con el fin de obtener coeficientes cuantificados 209, por ejemplo aplicando una cuantificación escalar o cuantificación de vector. Los coeficientes cuantificados 209 también pueden ser referidos como coeficientes de transformada cuantificados 209 o coeficientes residuales cuantificados 209.
El proceso de cuantificación puede reducir la profundidad de bit asociada con algunos o todos los coeficientes de transformada 207. Por ejemplo, un coeficiente de transformada de n-bits puede ser redondeado hacia abajo a un coeficiente de transformada de m-bits durante la cuantificación, donde n es mayor que m. El grado de cuantificación puede ser modificado ajustando un parámetro de cuantificación (QP). Por ejemplo para cuantificación escalar, se puede aplicar una escalación diferente para lograr una cuantificación más fina o áspera. Tamaños de paso de cuantificación más pequeños corresponden a cuantificación más fina, mientras que tamaños de paso de cuantificación más grandes corresponden a cuantificación más áspera. El tamaño de paso de cuantificación aplicable puede ser indicado por un parámetro de cuantificación (QP). El parámetro de cuantificación puede ser, por ejemplo, un índice a un conjunto predefinido de tamaños de pasos de cuantificación aplicables. Por ejemplo, parámetros de cuantificación pequeños pueden corresponder a cuantificación fina (tamaños pequeños de pasos de cuantificación) y parámetros de cuantificación grandes pueden corresponder a cuantificación áspera (tamaños grandes de pasos de cuantificación) o viceversa. La cuantificación puede incluir división por un tamaño de paso de cuantificación y una descuantificación inversa y/o correspondiente, por ejemplo por la unidad de cuantificación inversa 210, puede incluir multiplicación por el tamaño de paso de cuantificación.
Realizaciones de acuerdo con algunas normas, por ejemplo HEVC, pueden ser configuradas para utilizar un parámetro de cuantificación con el fin de determinar el tamaño de paso de cuantificación. Generalmente, el tamaño de paso de cuantificación puede ser calculado con base en un parámetro de cuantificación utilizando una aproximación de punto fijo de una ecuación incluyendo división. Factores de escalación adicionales pueden ser introducidos para cuantificación y descuantificación con el fin de restaurar la norma del bloque residual que pudiera modificarse debido a la escalación utilizada en la aproximación de punto fijo de la ecuación para tamaño de paso de cuantificación y parámetro de cuantificación. En una implementación ejemplar, la escalación de la transformada inversa y la descuantificación pudieran combinarse. Alternativamente, tablas de cuantificación personalizadas pueden ser utilizadas y señalizadas desde un codificador a un decodificador, por ejemplo en una corriente de bits. La cuantificación es una operación con pérdida, en donde la pérdida aumenta con el incremento de los tamaños de paso de cuantificación.
Realizaciones del codificador de vídeo 20 (respectivamente, unidad de cuantificación 208) pueden ser configuradas para emitir parámetros de cuantificación (QP), por ejemplo directamente o codificados a través de la unidad de codificación por entropía 270, de manera que, por ejemplo, el decodificador de vídeo 30 puede recibir y aplicar los parámetros de cuantificación para 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 en los coeficientes cuantificados para obtener coeficientes descuantificados 211, por ejemplo aplicando lo inverso del esquema de cuantificación aplicado por la unidad de cuantificación 208 con base en o utilizando el mismo tamaño de paso de cuantificación que la unidad de cuantificación 208. Los coeficientes descuantificados 211 también pueden ser referidos como coeficientes residuales descuantificados 211 y corresponden - aunque típicamente no idénticos a los coeficientes de transformada debido a la pérdida por cuantificación - a los coeficientes de transformada 207.
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 inversa de coseno discreta (DCT) o transformada inversa de seno discreta (DST), u otras transformadas inversas para obtener un bloque residual reconstruido 213 (o coeficientes descuantificados correspondientes 213) en el dominio de muestra. El bloque residual reconstruido 213 también se puede referir como bloque de transformada 213. Reconstrucción
La unidad de reconstrucción 214 (por ejemplo sumadora 214) está configurada para agregar el bloque de transformada 213 (es decir bloque residual reconstruido 213) al bloque de predicción 265 para obtener un bloque reconstruido 215 en el dominio de muestra, por ejemplo agregando, muestra por muestra, los valores muestra del bloque residual reconstruido 213 y los valores muestra del bloque de predicción 265.
Filtración
La unidad de filtro de bucle 220 (o para abreviar “filtro de bucle” 220), está configurada para filtrar el bloque reconstruido 215 para obtener un bloque filtrado 221, o en general, para filtrar muestras reconstruidas para obtener muestras filtradas. La unidad de filtro de bucle, por ejemplo, está configurada para suavizar las transiciones de pixel, o de otra manera mejorar la calidad del vídeo. La unidad de filtro de bucle 220 puede comprender uno o más filtros de bucle tal como un filtro de desbloqueo, un filtro de desfase adaptable a la muestra (SAO) o uno o más filtros diferentes, por ejemplo un filtro bilateral, un filtro de bucle adaptable (ALF), un filtro de afilado, un filtro de suavizado o un filtro colaborativo, o cualquier combinación de los mismos. Aunque la unidad de filtro de bucle 220 se muestra en la figura 2 como siendo un filtro en-bucle, en otras configuraciones, la unidad de filtro de bucle 220 puede ser implementada como un filtro post-bucle. El bloque filtrado 221 también se puede referir como bloque reconstruido filtrado 221.
Realizaciones del codificador de vídeo 20 (respectivamente unidad de filtro de bucle 220) pueden ser configuradas para emitir parámetros de filtro de bucle (tal como información de compensación de muestra adaptable), por ejemplo directamente o codificados a través de la unidad de codificación por entropía 270, de manera que, por ejemplo, un decodificador 30 puede recibir y aplicar los mismos parámetros de filtro de bucle o filtros de bucle respectivos para decodificación.
Memoria Tampón de Imágenes Decodificadas
La memoria tampón de imágenes decodificadas (DPB) 230 puede ser una memoria que almacena imágenes de referencia o en general datos de imágenes de referencia para codificar datos de vídeo a través del codificador de vídeo 20. La DPB 230 puede ser formada por cualquiera de una variedad de dispositivos de memoria, tal como memoria de acceso aleatorio dinámica (DRAM), incluyendo DRAM sincronizada (SDRAM), RAM magneto-resistiva (MRAM), RAM resistiva (RRAM), u otros tipos de dispositivos de memoria. La memoria tampón de imágenes decodificadas (DPB) 230 puede ser configurada para almacenar uno o más bloques filtrados 221. La memoria tampón de imágenes decodificadas 230 además puede ser configurada para almacenar otros bloques previamente filtrados, 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 bloques de referencia y muestras correspondientes) y/o una imagen actual parcialmente reconstruida (y bloques de referencia y muestras correspondientes), por ejemplo para interpredicción. La memoria tampón de imágenes decodificadas (DPB) 230 también puede ser configurada para almacenar uno o más bloques reconstruidos no filtrados 215, o en general muestras reconstruidas no filtradas, por ejemplo si el bloque reconstruido 215 no es filtrado por la unidad de filtro de bucle 220, o cualquier otra versión adicional procesada de los bloques reconstruidos o muestras.
Selección de Modo (Partición y Predicción)
La unidad de selección de modo 260 comprende una unidad de división 262, una unidad de inter-predicción 244 y una unidad de intra-predicción 254, y está configurada para recibir u obtener datos de imagen originales, por ejemplo un bloque original 203 (bloque actual 203 de la imagen actual 17), y datos de imagen reconstruidos por ejemplo muestras reconstruidas filtradas y/o no filtradas o bloques de la misma imagen (actual) y/o de una o una pluralidad de imágenes previamente decodificadas, por ejemplo de la memoria tampón de imágenes decodificadas 230 u otras memorias tampón (por ejemplo memoria tampón de línea, que no se muestra). Los datos de imagen reconstruidos son utilizados como datos de imagen de referencia para 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 puede ser configurada para determinar o seleccionar una división para un modo de predicción de bloque actual (incluyendo la no división) y un modo de predicción (por ejemplo un modo de intra o interpredicción) y generar un bloque de predicción correspondiente 265, el cual es utilizado para el cálculo del bloque residual 205 y para la reconstrucción del bloque reconstruido 215.
Realizaciones de la unidad de selección de modo 260 pueden ser configuradas para seleccionar el modo de división y predicción (por ejemplo de entre aquellos soportados por o disponibles para la unidad de selección de modo 260), que proporcione el mejor emparejamiento o, en otras palabras, el residual mínimo (residual mínimo significa mejor compresión para transmisión o almacenamiento), o una sobrecarga de señalización mínima (sobrecarga de señalización mínima significa mejor compresión para transmisión o almacenamiento), o lo que considere o equilibre ambos. La unidad de selección de modo 260 puede ser configurada para determinar el modo de división y predicción con base en la optimización de la distorsión de tasa (RDO), es decir seleccionar el modo de predicción que proporcione una distorsión de tasa mínima. Términos tales como “mejor”, “mínimo”, “óptimo” etc. en este contexto no necesariamente se refieren a un “mejor”, “mínimo”, “óptimo”, etc. global sino que también se pueden referir al cumplimiento de un criterio de terminación o selección tal como un valor que excede o que queda por debajo de un umbral u otras restricciones que potencialmente conducen a una “selección sub-óptima” pero reduciendo la complejidad y el tiempo de procesamiento.
En otras palabras, la unidad de división 262 puede ser configurada para dividir el bloque 203 en unidades de bloque más pequeñas o sub-bloques (que forman bloques nuevamente), por ejemplo por ejemplo iterativamente utilizando división de árbol cuaternario (QT), división binaria (BT) o división de árbol triple (TT) o cualquier combinación de las mismas, y ejecutar, por ejemplo, la predicción para cada una de las divisiones de bloque o sub-bloques, en donde la selección de modo comprende la selección de la estructura de árbol del bloque dividido 203 y los modos de predicción son aplicados a cada una de las divisiones de bloque o sub-bloques.
En lo sucesivo, el procesamiento de división (por ejemplo por la unidad de división 260) y predicción (por la unidad de inter-predicción 244 y la unidad de intra-predicción 254) ejecutado por un codificador de vídeo ejemplar 20 se explicará con más detalle.
División
La unidad de división 262 puede partir (o dividir) un bloque actual 203 en particiones más pequeñas, por ejemplo, bloques más pequeños de tamaño cuadrado o rectangular. Estos bloques más pequeños (los cuales también se pueden referir como sub-bloques) se pueden dividir adicionalmente en particiones incluso más pequeñas. Esta también se refiere a división de árbol o división de árbol jerárquica, en donde un bloque raíz, por ejemplo, al nivel de árbol raíz 0 (nivel de jerarquía 0, profundidad 0), puede ser dividido de manera recursiva, por ejemplo puede ser dividido en dos o más bloques de un siguiente nivel de árbol inferior, por ejemplo, nodos en el nivel de árbol 1 (nivel de jerarquía 1, profundidad 1), en donde estos bloques nuevamente pueden ser divididos en dos o más bloques de un siguiente nivel inferior, por ejemplo nivel de árbol 2 (nivel de jerarquía 2, profundidad 2), etc. hasta que la división finaliza, por ejemplo, debido a que se cumple con un criterio de terminación, por ejemplo se alcanza una profundidad de árbol máxima o tamaño de bloque mínimo. Bloques que no son divididos adicionalmente también son referidos como bloques-hoja o nodos hoja del árbol. Un árbol que utiliza la división en dos divisiones se refiere como árbol binario (BT), un árbol que utiliza la división en tres divisiones se refiere como árbol ternario (TT), y un árbol que utiliza la división en cuatro divisiones se refiere como árbol cuaternario (QT).
Tal como se mencionó antes, el término “bloque” tal como aquí se utiliza puede ser una porción, en particular una porción cuadrada o rectangular, de una imagen. Con referencia, por ejemplo, a HEVC y VVC, el bloque puede ser o corresponder a una unidad de árbol de codificación (CTU), una unidad de codificación (CU), unidad de predicción (PU), y unidad de transformada (TU) y/o a los bloques correspondientes, por ejemplo, un bloque de árbol de codificación (CTB), un bloque de codificación (CB), un bloque de transformada (TB) o bloque de predicción (PB). Por ejemplo una unidad de árbol de codificación (CTU) puede ser o comprender un CTB de muestras de luminancia, dos CTBs correspondientes de muestras de crominancia de una imagen que tiene tres arreglos de muestra, o un CTB de muestras de una imagen monocromática o una imagen que es codificada utilizando tres planos de color separados y estructuras de sintaxis utilizadas para codificar las muestras. De manera correspondiente, un bloque de árbol de codificación (CTB) puede ser un bloque de muestras NxN para cierto valor de N de manera que la división de un componente en CTBs es una división. Una unidad de codificación (CU) puede ser o comprender un bloque de codificación de muestras de luminancia, dos bloques de codificación correspondientes de muestras de crominancia de una imagen que tiene tres arreglos de muestra, o un bloque de codificación de muestras de una imagen monocromática o una imagen que es codificada utilizando tres planos de color separados y estructuras de sintaxis utilizadas para codificar las muestras. De manera correspondiente, un bloque de codificación (CB) puede ser un bloque de muestras MxN para algunos valores de M y N de manera que la división de un CTB en bloques de codificación es una división.
En realizaciones, por ejemplo, de acuerdo con HEVC, una unidad de árbol de codificación (CTU) puede ser dividida en CUs utilizando una estructura de árbol cuaternario denotada como árbol de codificación. La decisión respecto a si se codifica un área de imagen utilizando predicción de inter-imagen (temporal) o intra-imagen (espacial) se realiza al nivel de CU. Cada CU puede ser dividida adicionalmente en una, dos o cuatro PUs de acuerdo con el tipo de división de PU. Dentro de una PU, se aplica el mismo proceso de predicción y la información relevante es transmitida al decodificador sobre una base de PU. Después de obtener el bloque residual aplicando el proceso de predicción con base en el tipo de división de PU, una CU puede ser dividida en unidades de transformada (TUs) de acuerdo con otra estructura de árbol cuaternario similar al árbol de codificación para la CU.
En realizaciones, por ejemplo, de acuerdo con la última norma de codificación de vídeo actualmente en desarrollo, la cual se refiere como Codificación de Vídeo Versátil (VVC), la división de árbol cuaternario y árbol binario combinada (QTBT) es utilizada, por ejemplo, para dividir un bloque de codificación. En la estructura de bloque QTBT, una CU puede tener una forma cuadrada o rectangular. Por ejemplo, una unidad de árbol de codificación (CTU) primero es dividida por una estructura de árbol cuaternario. Los nodos hoja de árbol cuaternario son divididos adicionalmente por una estructura de árbol binario o árbol ternario (o triple). Los nodos hoja de árbol de división son denominados unidades de codificación (CUs), y esa segmentación es utilizada para procesamiento de predicción y transformada sin partición adicional. Esto significa que la CU, PU y TU tienen el mismo tamaño de bloque en la estructura de bloque de codificación QTBT. En paralelo, la partición múltiple, por ejemplo, la partición de árbol triple puede utilizarse junto con la estructura de bloque QTBT.
En un ejemplo, la unidad de selección de modo 260 del codificador de vídeo 20 se puede configurar para ejecutar cualquier combinación de las técnicas de división aquí descritas.
Tal como se describió antes, el codificador de vídeo 20 está configurado para determinar o seleccionar el mejor modo de predicción o un modo de predicción óptimo de entre un conjunto de modos de predicción (por ejemplo, pre determinado). El conjunto de modos de predicción puede comprender, por ejemplo, modos de intra-predicción y/o modos de inter-predicción
Intra-predicción
El conjunto de modos de intra-predicción puede comprender 35 modos de intra-predicción diferentes, por ejemplo modos no direccionales tales como el modo DC (o medio) y el modo plano o modos direccionales, por ejemplo conforme a lo definido en HEVC, o puede comprender 67 modos de intra-predicción diferentes, por ejemplo modos no direccionales tales como el modo DC (o medio) y modo plano, o modos direccionales, por ejemplo conforme a lo definido para VVC.
La unidad de intra-predicción 254 está configurada para utilizar muestras reconstruidas de bloques vecinos de la misma imagen actual para generar un intra-bloque de 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 adicionalmente 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 por entropía 270 en forma de elementos de sintaxis 266 para inclusión en los datos de imagen codificados 21, de manera que, por ejemplo, el decodificador de vídeo 30 puede recibir y utilizar los parámetros de predicción para 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 imágenes previas al menos parcialmente decodificadas, por ejemplo almacenadas en DBP 230) y otros parámetros de inter-predicción, por ejemplo ya sea toda la imagen de referencia o únicamente una parte, por ejemplo un área de ventana de búsqueda alrededor del área del bloque actual, de la imagen de referencia, es utilizada para buscar un mejor bloque de referencia de emparejamiento, y/o por ejemplo si la interpolación de pixel es aplicada, por ejemplo interpolación de medio/semi-pel, y/o interpolación de cuarto-pel, o no.
Adicional a los modos de predicción anteriores, se puede aplicar el modo de salto, y/o modo directo.
La unidad de interpredicción 244 puede incluir una unidad de estimación de movimiento (ME) y una unidad de compensación de movimiento (MC) (ninguna se muestra en la figura 2). La unidad de estimación de movimiento puede ser configurada 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 uno o una pluralidad de otras/diferentes imágenes previamente decodificadas 231, para 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, puede ser configurado para seleccionar un bloque de referencia de entre una pluralidad de bloques de referencia de las mismas 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 desfase (desfase espacial) entre la posición (coordenadas x, y) del bloque de referencia y la posición del bloque actual como parámetros de interpredicción a la unidad de estimación de movimiento. Este desfase 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 interpredicción y ejecutar interpredicción con base en o utilizando el parámetro de interpredicción para obtener un bloque de interpredicción 265. La compensación de movimiento, ejecutada por la unidad de compensación de movimiento puede involucrar la extracción o generación del bloque de predicción con base en el vector de movimiento/bloque determinado por la estimación de movimiento, posiblemente ejecutando interpolaciones a precisión de sub-pixel. La filtración de interpolación puede generar muestras de pixel adicionales de muestras de pixel conocidas, incrementando así potencialmente el número de bloques de predicción candidatos que pueden ser utilizados para codificar un bloque de imagen. Al momento de recibir el vector de movimiento para la PU del bloque de imagen actual, la unidad de compensación de movimiento puede ubicar el bloque de predicción al cual 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 con los bloques y porciones de vídeo para uso por el decodificador de vídeo 30 en la decodificación de los bloques de imagen de la porción de vídeo. Además, o como una alternativa a porciones y elementos de sintaxis respectivos, los grupos y/o mosaicos y elementos de sintaxis respectivos pueden ser generados o utilizados.
Codificación entrópica
La unidad de codificación entrópica 270 está configurada para aplicar, por ejemplo, un algoritmo o esquema de codificación entrópica (por ejemplo un esquema de codificación de longitud variable (VLC), un esquema VLC adaptable al contexto (CALVC), 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 sintaxis (SBAC), una codificación entrópica de división de intervalo de probabilidad (PIPE) u otra metodología o técnica de codificación entrópica) o derivación (no compresión) en los coeficientes cuantificados 209, parámetros de interpredicción, parámetros de intra predicción, parámetros de filtro de bucle y/u otros elementos de sintaxis para obtener datos de imágenes codificadas 21 las cuales pueden ser emitidas por la salida 272, por ejemplo en la forma de una corriente de bits codificada 21 de manera que, por ejemplo, el decodificador de vídeo 30 puede recibir y utilizar los parámetros para decodificación. La corriente de bits codificada 21 puede ser transmitida al decodificador de vídeo 30, o almacenada en una memoria para posterior transmisión o recuperación por el decodificador de vídeo 30.
Otras variaciones estructurales del codificador de vídeo 20 pueden ser utilizadas para codificar la corriente de vídeo. Por ejemplo un codificador basado en no-transformada 20 puede cuantificar la señal residual directamente sin la unidad de procesamiento de transformada 206 para ciertos bloques o cuadros. 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 figura 3 muestra un ejemplo de un decodificador de vídeo 30 que está configurado para implementar las técnicas de esta solicitud. El decodificador de vídeo 30 está configurado para recibir los datos de imagen codificada 21 (por ejemplo corriente de bits codificada 21), por ejemplo codificados por el codificador 20, para obtener una imagen decodificada 331. La corriente de bits o datos de imagen codificados 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 codificado (y/o grupos o porciones de mosaico) y elementos de sintaxis asociados.
En el ejemplo de la figura 3, el decodificador 30 comprende una unidad de decodificación entrópica 304, una unidad de cuantificación inversa 310, una unidad de procesamiento de transformada inversa 312, una unidad de reconstrucción 314 (por ejemplo una sumadora 314), un filtro de bucle 320, una memoria tampón de imágenes decodificadas (DPB) 330, una unidad de aplicación de modo 360, una unidad de interpredicción 344 y una unidad de intra predicción 354. La unidad de interpredicción 344 puede ser o incluir una unidad de compensación de movimiento. El decodificador de vídeo 30, en algunos ejemplos, puede ejecutar un paso de decodificación generalmente recíproco al paso de codificación descrito con respecto al codificador de vídeo 100 de la figura 2. Tal como se explicó 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 tampón de imágenes decodificadas (DPB) 230, la unidad de interpredicción 344 y la unidad de intra predicción 354 también son referidas como formando el “decodificador integrado” del codificador de vídeo 20. Por consiguiente, 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 tampón de imágenes decodificadas 330 puede ser idéntica en función a la memoria tampón de imágenes decodificadas 230. Por lo tanto, las explicaciones proporcionadas para las unidades y funciones respectivas del codificador de vídeo 20 aplican de manera correspondiente a las unidades y funciones respectivas del decodificador de vídeo 30.
Decodificación entrópica
La unidad de decodificación entrópica 304 está configurada para analizar la corriente de bits 21 (o en general los datos de imagen codificados 21) y ejecutar, por ejemplo, decodificación entrópica a los datos de imagen codificados 21 para obtener, por ejemplo, coeficientes cuantificados 309 y/o parámetros de codificación decodificados (que no se muestran en la figura 3), por ejemplo cualquiera o todos los parámetros de interpredicció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 entrópica 304 puede ser configurada para aplicar los algoritmos o esquemas de decodificación correspondientes a los esquemas de codificación tal como se describió con referencia a la unidad de codificación entrópica 270 del codificador 20. La unidad de decodificación entrópica 304 además se puede configurar para proporcionar parámetros de interpredicció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 al nivel de porción de vídeo y/o al nivel de bloque de vídeo. Además o como una alternativa a porciones y elementos de sintaxis respectivos, los grupos y/o mosaicos y elementos de sintaxis respectivos pueden ser recibidos y/o utilizados.
Cuantificación inversa
La unidad de cuantificación inversa 310 puede ser configurada para recibir parámetros de cuantificación (QP) (o en general información relacionada con la cuantificación inversa) y coeficientes cuantificados de los datos de imagen codificados 21 (por ejemplo mediante análisis y/o decodificación, por ejemplo por la unidad de decodificación entrópica 304) y aplicar, con base en los parámetros de cuantificación, una cuantificación inversa en los coeficientes cuantificados decodificados 309 para obtener coeficientes descuantificados 311, los cuales también se pueden referir como 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 la porción de vídeo (o mosaico o grupo de mosaicos) para determinar un grado de cuantificación y, de igual manera, un grado de cuantificación inversa que debiera aplicarse.
Transformada inversa
La unidad de procesamiento de transformada inversa 312 puede ser configurada para recibir coeficientes descuantificados 311, también referidos como coeficientes de transformada 311, y aplicar una transformada a los coeficientes descuantificados 311 para obtener bloques residuales reconstruidos 213 en el dominio de muestra. Los bloques residuales reconstruidos 213 también se pueden referir como bloques de transformada 313. La transformada puede ser una transformada inversa, por ejemplo, una DCT inversa, una DST inversa, una transformada de entero inversa, o un proceso de transformada inversa conceptualmente similar. La unidad de procesamiento de transformada inversa 312 además se puede configurar para recibir parámetros de transformada o información correspondiente de los datos de imagen codificados 21 (por ejemplo mediante análisis y/o decodificación, por ejemplo por la unidad de decodificación de entropía 304) para determinar la transformada que se va a aplicar a los coeficientes descuantificados 311.
Reconstrucción
La unidad de reconstrucción 314 (por ejemplo sumadora 314) puede ser configurada para agregar el bloque residual reconstruido 313 al bloque de predicción 365 para obtener un bloque reconstruido 315 en el dominio de muestra, por ejemplo agregando los valores de muestra del bloque residual reconstruido 313 y los valores de muestra del bloque de predicción 365.
Filtración
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 pixel, o de otra manera mejorar la calidad del vídeo. La unidad de filtro de bucle 320 puede comprender uno o más filtros de bucle tal como un filtro de desbloqueo, un filtro de desfase adaptable a la muestra (SAO) o uno o más filtros diferentes, por ejemplo, un filtro bilateral, un filtro de bucle adaptable (ALF), un filtro de afilado, un filtro de suavizado o filtros colaborativos, o cualquier combinación de los mismos. Aunque la unidad de filtro de bucle 320 se muestra en la figura 3 como siendo un filtro en bucle, en otras configuraciones, la unidad de filtro de bucle 320 puede ser implementada como un filtro post-bucle.
Memoria Tampón de Imágenes Decodificadas
Los bloques de vídeo decodificados 321 de una imagen son entonces almacenados en memoria tampón de imágenes decodificadas 330, la cual almacena las imágenes decodificadas 331 como imágenes de referencia para posterior compensación de movimiento para otras imágenes y/o para emitir una exhibición respectivamente.
El decodificador 30 está configurado para emitir la imagen decodificada 311, por ejemplo a través de la salida 312, para presentación o visualización a un usuario.
Predicción
La unidad de interpredicción 344 puede ser idéntica a la unidad de interpredicció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 interpredicción 254 en función, y toma decisiones de división o partición y predicción basada en los parámetros de división y/o predicción o información respectiva recibida desde los datos de imagen codificados 21 (por ejemplo, mediante análisis y/o decodificación, por ejemplo, por la unidad de decodificación de entropía 304). La unidad de aplicación de modo 360 puede ser configurada para ejecutar la predicción (intra o interpredicción) por bloque con base en imágenes reconstruidas, bloques o muestras respectivas (filtradas o no filtradas) para obtener el bloque de predicción 365.
Cuando la porción de vídeo es codificada como una porción intra codificada (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 de la porción de vídeo actual con base en un modo de intra predicción señalizado y datos de bloques previamente decodificados de la imagen actual. Cuando la imagen de vídeo es codificada como porción inter codificada (es decir, B, o P), la unidad de interpredicción 344 (por ejemplo 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 de la porción de vídeo actual con base en los vectores de movimiento y otros elementos de sintaxis recibidos desde la unidad de decodificación de entropía 304. Para interpredicción, los bloques de predicción pueden ser producidos 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 cuadros de referencia, Lista 0 y Lista 1, utilizando técnicas de construcción predeterminadas con base en las imágenes de referencia almacenadas en DPB 330. Lo mismo o similar puede ser aplicado para o por realizaciones utilizando grupos de mosaicos (por ejemplo, grupos de mosaicos de vídeo) y/o mosaicos (por ejemplo, mosaicos de vídeo) además o alternativamente a porciones (por ejemplo, porciones de vídeo) por ejemplo un vídeo puede ser codificado utilizando I, P o B grupos de mosaicos y/o mosaicos 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 analizando los vectores de movimiento o información relacionada y otros elementos de sintaxis, y utiliza la información de predicción para producir los bloques de predicción para que el bloque de vídeo actual sea decodificado. 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 interpredicción) utilizado para codificar los bloques de vídeo de la porción de vídeo, un tipo de porción de interpredicción (por ejemplo, porción B, porción P, o porción GPB), información de construcción para una o más de las listas de imágenes de referencia para la porción, vectores de movimiento para cada bloque de vídeo inter codificado de la porción, estatus de interpredicción para cada bloque de vídeo inter codificado de la porción, y otra información para decodificar los bloques de vídeo en la porción de vídeo actual. Lo mismo o algo similar se puede aplicar para o por realizaciones utilizando grupos de mosaicos (por ejemplo, grupos de mosaicos de vídeo) y/o mosaicos (por ejemplo, mosaicos de vídeo) además de o como alternativa a los segmentos (por ejemplo, segmentos de vídeo), por ejemplo, un vídeo puede ser codificado utilizando I, P o B grupos de mosaicos y/o mosaicos.
Realizaciones del decodificador de vídeo 30 como se muestra en la figura 3 pueden ser configuradas para dividir y/o decodificar la imagen utilizando segmentos (también referidos como segmentos de vídeo), en donde una imagen puede ser dividida en o decodificada utilizando uno o más segmentos (típicamente no traslapándose), y cada segmento puede comprender uno o más bloques (por ejemplo, CTUs).
Realizaciones del decodificador de vídeo 30 como se muestra en la figura 3 pueden ser configuradas para dividir y/o decodificar la imagen utilizando grupos de mosaicos (también referidos como grupos de mosaicos de vídeo) y/o mosaicos (también referidos como mosaicos de vídeo), en donde una imagen puede ser dividida en o decodificada utilizando uno o más grupos de mosaicos (típicamente no traslapándose), y cada grupo de mosaicos puede comprender, por ejemplo, uno o más bloques (por ejemplo, CTUs) o uno o más mosaicos, en donde cada mosaico, por ejemplo, puede tener una forma rectangular y puede comprender uno o más bloques (por ejemplo CTUs), por ejemplo, bloques completos o fraccionados.
Otras variaciones del decodificador de vídeo 30 pueden ser utilizadas para decodificar los datos de imagen codificados 21. Por ejemplo el decodificador 30 puede producir la salida de la corriente de vídeo sin la unidad de filtración de bucle 320. Por ejemplo un decodificador basado en no-transformada 30 puede cuantificar a la inversa la señal residual directamente sin la unidad de procesamiento de transformada inversa 312 para algunos bloques o cuadros. 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.
Se debiera entender que, en el codificador 20 y el decodificador 30, un resultado de procesamiento de un paso actual puede ser procesado adicionalmente y después emitido al siguiente paso. Por ejemplo después de la filtración de interpolación, la derivación de vector de movimiento o filtración de bucle, se puede ejecutar una operación adicional, tal como Recorte o cambio, en el resultado de procesamiento de la filtración de interpolación, derivación de vector de movimiento o filtración de bucle.
Se debiera observar que operaciones adicionales pueden ser aplicadas a los vectores de movimiento derivados del bloque actual (incluyendo pero no limitado a vectores de movimiento de punto de control de modo afín, vectores de movimiento de sub-bloque en modos afín, plano ATMVP, vectores de movimiento temporales, y así sucesivamente). Por ejemplo, el valor del vector de movimiento queda restringido a un rango predefinido de acuerdo con su bit representativo. Si el bit representativo del vector de movimiento es bitProfundidad, entonces el rango es -2A(bitProfundidad-1) ~ 2A(bitProfundidad-1)-1, donde “A” significa exponenciación. Por ejemplo, si bitProfundidad se establece igual a 16, el rango es -32768 ~ 32767; si bitProfundidad se establece igual a 18, el rango es -131072~131071. Por ejemplo, el valor del vector de movimiento derivado (por ejemplo, los MVs de cuatro sub bloques 4x4 dentro de un bloque 8x8) queda restringido de manera que la diferencia máxima entre partes enteras de los MVs de cuatro sub-bloques 4x4 no es mayor que N pixeles, tal como no mayor que 1 pixel. Aquí se proporcionan dos métodos para restringir el vector de movimiento de acuerdo con el bitProfundidad.
Método 1: remover el MSB (bit más significativo) de sobreflujo a través de las operaciones de flujo
ux= ( mvx+2bitProfundidad ) % 2^ itProfundidad (1)
mvx = ( ux >= 2bitProfundidad-1 ) ? (ux — 2^ itProfundidad ) : ux (2)
uy= ( mvy+2bitProfundidad ) % 2^ itProfundidad (3)
mvy = ( uy >= 2bitProfundidad-1 ) ? (uy _ 2bitProfundidad ) : uy (4)
donde mvx es un componente horizontal de un vector de movimiento de un bloque de imagen o un sub-bloque, mvy es un componente vertical de un vector de movimiento de un bloque de imagen o un sub-bloque, y ux y uy indican un valor intermedio;
Por ejemplo, si el valor de mvx es -32769, después de aplicar las fórmulas (1) y (2), el valor resultante es 32767. En el sistema de computadora, números decimales son almacenados como complemento de dos. El complemento de dos de -32769 es 1,0111,1111,1111,1111 (17 bits), entonces el MSB es desechado, de manera que el complemento de dos resultante es 0111,1111,1111,1111 (el número decimal es 32767), el cual es el mismo que la salida aplicando las fórmulas (1) y (2).
ux= ( mvpx mvdx 2bitProfundidad ) % 2bitProfundidad (5)
mvx = ( ux >= 2bitProfundidad-1 ) ? (ux _ 2^ itProfundidad ) : ux (6)
uy= ( mvpy mvdy 2bitProfundidad ) % 2bitProfundidad (7)
mvy = ( uy >= 2bitProfundidad-1 ) ? (uy _ 2^ itProfundidad ) : uy (8)
Las operaciones pueden ser aplicadas durante la suma de mvp y mvd, como se muestra en las fórmulas (5) a (8). Método 2: remover el MSB de sobreflujo recortando el valor
vx = Recorte3(-2bitProfundidad'i 2b'tProfund'dad"i -1 vx)
Vy = Recorte3(-2bitProfundidad-1 2bitProfundidad-1 -1 vy)
donde vx es un componente horizontal de un vector de movimiento de un bloque de imagen o un sub-bloque, vy es un componente vertical de un vector de movimiento de un bloque de imagen o un sub-bloque; x, y, z respectivamente corresponden a tres valores de entrada del proceso de recorte de MV, y la definición de la función Recorte3 es de la siguiente manera:
x z < x
Recorte3( x, y, z ) = jy z > y
de otra manera
La figura 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 divulgadas como aquí se describen. En una realización, el dispositivo de codificación de vídeo 400 puede ser un decodificador tal como el decodificador de vídeo 30 de la figura 1A o un codificador tal como el codificador de vídeo 20 de la figura 1 A.
El dispositivo de codificación de vídeo 400 comprende puertos de ingreso 410 (o puertos de entrada 410) y unidades de receptor (Rx) 420 para recibir datos; un procesador, unidad lógica, o unidad de procesamiento central (CPU) 430 para procesar los datos; unidades de transmisor (Tx) 440 y puertos de egreso 450 (o 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 óptico-a-eléctrico (OE) y componentes eléctrico-a-óptico (EO) acoplados a los puertos de ingreso 410, las unidades de receptor 420, las unidades de transmisor 440, y los puertos de egreso 450 para el egreso o ingreso de señales ópticas o eléctricas.
El procesador 430 es implementado por hardware y software. El procesador 430 puede ser implementado como uno o más chips de CPU, núcleos (por ejemplo, como un procesador multi-núcleo), FPGAs, ASICs, y DSPs. El procesador 430 está en comunicación con los puertos de ingreso 410, unidades de receptor 420, unidades de transmisor 440, puertos de egreso 450, y memoria 460. El procesador 430 comprende un módulo de codificación 470. El módulo de codificación 470 implementa las realizaciones divulgadas antes descritas. Por ejemplo, el módulo de codificación 470 implementa, procesa, prepara o proporciona las diversas operaciones de codificación. La inclusión del módulo de codificación 470 entonces proporciona una mejora sustancial a 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 es implementado 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 puede ser utilizada como un dispositivo de almacenamiento de datos de sobreflujo, para almacenar programas cuando dichos programas son seleccionados para ejecución, y almacenar instrucciones y datos que son leídos durante la ejecución de programa. La memoria 460 puede ser, por ejemplo, volátil y/o no volátil y puede ser una memoria de solo lectura (ROM), memoria de acceso aleatorio (RAM), memoria de contenido direccionable ternaria (TCAM), y/o memoria de acceso aleatorio estática (SRAM).
La figura 5 es un diagrama de bloques simplificado de un aparato 500 que puede ser utilizado como cualquiera o ambos del dispositivo fuente 12 y el dispositivo destino 14 de la figura 1 de acuerdo con una realización ejemplar. Un procesador 502 en el aparato 500 puede ser una unidad de procesamiento central. Alternativamente, el procesador 502 puede ser cualquier otro tipo de dispositivo, o múltiples dispositivos, con la capacidad para manipular o procesar información ahora existente o desarrollada más adelante. Aunque las implementaciones divulgadas pueden ser practicadas con un solo procesador como se muestra, por ejemplo, el procesador 502, ventajas en velocidad y eficiencia se pueden lograr utilizando más de un procesador.
Una memoria 504 en el aparato 500 puede ser un dispositivo de memoria de solo lectura (ROM) o un dispositivo de memoria de acceso aleatorio (RAM) en una implementación. Cualquier otro tipo conveniente de dispositivo de almacenamiento puede ser utilizado como la memoria 504. La memoria 504 puede incluir un código y datos 506 a los que se tiene acceso a través del procesador 502 utilizando un bus 512. La memoria 504 puede además incluir un sistema operativo 508 y programas de aplicación 510, los programas de aplicación 510 incluyendo al menos un programa que permita al procesador 502 ejecutar los métodos aquí descritos. Por ejemplo los programas de aplicación 510 pueden incluir las aplicaciones 1 a N, las cuales además incluyen una aplicación de codificación de vídeo que ejecuta los métodos aquí descritos.
El aparato 500 también puede incluir uno o más dispositivos de salida, tal 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 opera para detectar entradas táctiles. La pantalla 518 puede ser acoplada al procesador 502 a través del bus 512.
Aunque aquí se muestra como un solo bus, el bus 512 del aparato 500 puede estar compuesto de múltiples buses. Además, el almacenamiento secundario 514 puede ser directamente acoplado a los otros componentes del aparato 500 o se puede tener acceso al mismo a través de una red y puede comprender una sola unidad integrada tal como una tarjeta de memoria o múltiples unidades tal como múltiples tarjetas de memoria. El aparato 500 entonces puede ser implementado en una amplia variedad de configuraciones.
Refinamiento de vector de movimiento (MVR)
Usualmente, los vectores de movimiento son determinados al menos parcialmente en el lado del codificador y señalizados al decodificador dentro de la corriente de bits codificada. Sin embargo, los vectores de movimiento también pueden ser refinados en el decodificador (y también en el codificador) iniciando desde los vectores de movimiento iniciales indicados en la corriente de bits. En dicho caso, por ejemplo, una similitud entre los parches de pixeles ya decodificados señalados por los vectores de movimiento iniciales puede ser utilizada para mejorar la precisión de los vectores de movimiento iniciales. Dicho refinamiento de movimiento proporciona la ventaja de reducir la sobrecarga de señalización: la precisión del movimiento inicial se mejora en la misma forma en el codificador y el decodificador y, por lo tanto, no se requiere señalización adicional para el refinamiento.
Se observa que los vectores de movimiento iniciales antes del refinamiento pudieran no ser los mejores vectores de movimiento que tengan como resultado la mejor predicción. Debido a que los vectores de movimiento iniciales son señalizados en la corriente de bits, pudiera no ser posible representar el vector de movimiento inicial con muy alta precisión (lo cual incrementaría la tasa de bits), por lo tanto el proceso de refinamiento de vector de movimiento es utilizado para mejorar el vector de movimiento inicial. Vectores de movimiento iniciales, por ejemplo, pudieran ser los vectores de movimiento que son utilizados en la predicción de un bloque vecino de un bloque actual. En este caso es suficiente señalizar una indicación en la corriente de bits, indicando vectores de movimiento de los cuales el bloque vecino es utilizado por el bloque actual. Dicho mecanismo de predicción es muy eficiente en reducir el número de bits para representar los vectores de movimiento iniciales. Sin embargo, la precisión de los vectores de movimiento iniciales pudiera ser baja, en general debido a que no se espera que los vectores de movimiento de dos bloques vecinos sean idénticos.
A fin de mejorar adicionalmente la precisión de vectores de movimiento sin un incremento adicional en la sobrecarga de señalización, pudiera ser benéfico refinar adicionalmente los vectores de movimiento derivados en el lado del codificador y proporcionados (señalizados) en la corriente de bits. El refinamiento de vector de movimiento puede ser ejecutado en el decodificador sin la ayuda del codificador. El codificador en su bucle de decodificador puede emplear el mismo refinamiento para obtener vectores de movimiento refinados correspondientes tal como estarían disponibles en el decodificador. El refinamiento para un bloque actual que está siendo reconstruido en una imagen actual es ejecutado determinando una plantilla de muestras reconstruidas, determinando un espacio de búsqueda alrededor de la información de movimiento inicial para el bloque actual y encontrando en el espacio de búsqueda una porción de imagen de referencia que mejor se empareje con la plantilla. La porción de mejor emparejamiento determina los vectores de movimiento refinados para el bloque actual el cual entonces es utilizado para obtener las muestras Inter-predichas para el bloque actual, es decir, el bloque actual que está siendo reconstruido.
El refinamiento de vector de movimiento es una parte de la Unidad de Interpredicción (244) en la figura 2 y 344 en la figura 3.
El refinamiento de vector de movimiento puede ser ejecutado de acuerdo con los siguientes pasos:
Típicamente, vectores de movimiento iniciales pueden ser determinados con base en una indicación en la corriente de bits. Por ejemplo, un índice pudiera ser señalizado en la corriente de bits lo cual indica una posición en una lista de vectores de movimiento candidatos. En otro ejemplo, un índice de predictor de vector de movimiento y un valor de diferencia de vector de movimiento pueden ser señalizados en la corriente de bits. Vectores de movimiento que son determinados con base en una indicación en la corriente de bits son definidos como vectores de movimiento iniciales. En el caso de bi-predicción, donde la inter-predicción para el bloque actual se obtiene como una combinación ponderada del bloque predicho de muestras que son determinadas de acuerdo con dos vectores de movimiento, asumir que el vector de movimiento inicial en una primera imagen de referencia en la lista L0 es denotado como MV0; y el vector de movimiento inicial en la segunda imagen de referencia en la lista L1 es denotado como MV1.
Utilizando los vectores de movimiento iniciales, se determinan pares de vectores de movimiento candidatos de refinamiento (MV). Se necesitan determinar al menos dos pares de candidatos de refinamiento. Típicamente, los pares de vectores de movimiento candidatos de refinamiento son determinados con base en el par de vectores de movimiento iniciales (MV0, MV1). Además, los pares MV candidatos son determinados agregando pequeñas diferencias de vector de movimiento a MV0 y MV1. Por ejemplo, los pares MV candidatos pudieran incluir los siguientes: •
• (MV0, MV1)
• (MV0 (0,1), MV1 (0,-1))
• (MV0 (1,0), MV1 (-1,0))
• (MV0 (0,-1), MV1 (0,1))
• (MV0 (-1,0), MV1 (1,0))
• ...
Donde (1 ,-1) denota un vector que tiene un desplazamiento de 1 en la dirección horizontal (o x) y un desplazamiento de -1 en la dirección vertical (o y).
Se observa que la lista anterior de pares de candidatos son solo ejemplos para explicación y la invención no se limita a una lista específica de candidatos.
Pares de vectores de movimiento candidatos de refinamiento (MV) forman el espacio de búsqueda del proceso de refinamiento de vector de movimiento.
En una bi-predicción de bloque actual, dos bloques de predicción obtenidos utilizando el primer vector de movimiento respectivo de la lista L0 y el segundo vector de movimiento de la lista L1, son combinados en una sola señal de predicción, lo cual puede proporcionar una mejor adaptación a la señal original que la uni-predicción, teniendo como resultado menos información residual y posiblemente una compresión más eficiente.
En refinamiento de vector de movimiento, los dos bloques de predicción obtenidos mediante el uso del primer vector de movimiento y el segundo vector de movimiento de un par de MVs candidatos son comparados con base en una métrica de similitud para cada uno de los pares de MV candidatos de refinamiento. Un par de MVs candidatos que tiene como resultado la similitud más elevada generalmente es seleccionado como los vectores de movimiento refinados. Denotados como MV0’ y MV1’, el vector de movimiento refinado en una primera imagen de referencia en la lista L0 y el vector de movimiento refinado en una segunda imagen de referencia en la lista L1 respectivamente. En otras palabras, las predicciones se obtienen correspondientes al vector de movimiento de lista L0 y el vector de movimiento de lista L1 del par de vectores de movimiento candidatos, los cuales entonces son comparados con base en una métrica de similitud. El par de vectores de movimiento candidatos que tiene la similitud más elevada asociada es seleccionado como el par de MVs refinados.
Típicamente, la salida del proceso de refinamiento son MVs refinados. Los MVs refinados pudieran ser los mismos que los MVs iniciales o pudieran ser diferentes de los MVs iniciales, dependiendo de cuál par de MVs candidatos logra la similitud más elevada, el par de MVs candidatos formado por MVs iniciales también se encuentra entre el par de MVs candidatos. En otras palabras, si el par de MVs candidatos más elevado que logra la similitud más elevada es formado por los MVs iniciales, los MVs refinados y los MVs iniciales son iguales entre sí.
En lugar de seleccionar la posición que eleva al máximo una métrica de similitud, otro método es seleccionar una posición que reduce al mínimo una métrica de disparidad. La medición de comparación de disparidad pudiera ser SAD (Suma de diferencias absolutas), MRSAD (suma removida media de diferencias absolutas, SSE (Suma de Error Cuadrado) etc. La SAD entre dos bloques de predicción se puede obtener utilizando un par de MVs candidatos (CMV0, CMV1), la SAD puede ser calculada de la siguiente manera:
nC bW -l n C bH -l
SAD(CMV0,CMV1) = abs(predMuestrasL0[x][y] - predMuestrasL1[x][y])
Z
x=0 y= 0
donde nCbH y nCbW son la altura y la anchura de los bloques de predicción, la función abs(a) especifica el valor absoluto del argumento a, predMuestrasL0 and predMuestrasL1 son muestras de bloque de predicción obtenidas de acuerdo con un par de MVs candidatos lo cual es denotado por (CMV0, CMV1).
Alternativamente, las mediciones de comparación de disparidad se pueden obtener evaluando solamente un subconjunto de muestras en un bloque de predicción, a fin de reducir el número de cálculos. A continuación se muestra un ejemplo, donde filas de muestras son incluidas alternativamente en el cálculo de SAD (se evalúa cada segunda fila).
abs(predMuestrasL0[x][2 *y ] — predMuestrasL1[x][2 *y ])
Un ejemplo de refinamiento de vector de movimiento se explica en el documento JVET-M1001-v3, “Codificación de Vídeo Versátil (Bosquejo 4)” de JVET (de ITU-T SG 16 WP 3 e ISO/IEC JTC 1/SC 29/WG 11) el cual está públicamente disponible bajo http://phenix.it-sudparis.eu/jvet/”. La sección “8.4.3 Proceso de refinamiento de vector de movimiento del lado del decodificador” en el documento ejemplifica el refinamiento de vector de movimiento.
A fin de reducir los requerimientos de memoria internos para refinamiento, en algunas realizaciones, el proceso de refinamiento de vector de movimiento puede ser ejecutado independientemente de los bloques de muestras de luminancia obtenidos al dividir el bloque codificado de muestras que excede una cierta anchura predeterminado o altura predeterminada en muestras de luminancia en sub-bloques de muestras que son menores que o iguales a la anchura predeterminada y la altura predeterminada en luminancia. El par de MVs refinados para cada sub-bloque dentro de un bloque codificado dividido puede ser diferente. La inter-predicción para luminancia y crominancia son ejecutadas para cada sub-bloque utilizando el par de MVs refinados de ese sub-bloque.
Cada MV del par de MVs iniciales puede tener una precisión de pixel fraccional. En otras palabras, el MV indica un desplazamiento entre un bloque actual de muestras y una región de referencia re-muestreada y este desplazamiento puede apuntar a una posición fraccional en las direcciones horizontal y vertical a partir de la rejilla de entero de muestras de referencia reconstruidas. Típicamente una interpolación bidimensional de los valores de rejilla de muestra de entero de referencia reconstruidos se ejecuta para obtener los valores de muestra en la ubicación de compensación de muestra fraccional. El proceso de obtener muestras predichas a partir de las imágenes de referencia reconstruidas utilizando un par de MVs candidatos puede ser a través de uno de los siguientes métodos:
• Redondear la parte fraccional del par de MVs iniciales a la ubicación de entero más cercana y obtener los valores de rejilla de entero de las imágenes de referencia reconstruidas.
• Ejecutar una interpolación bilineal separable de 2 derivaciones (por ejemplo, bilineales) para obtener los valores de muestra predichos a la precisión de pixel fraccional indicada por el par de MVs iniciales.
• Ejecutar una interpolación separable de derivación superior (por ejemplo, 8 derivaciones o 6 derivaciones) para obtener los valores de muestra predichos a la precisión de pixel fraccional indicada por el par de MVs iniciales. Aunque los pares de MVs candidatos pueden tener una compensación de sub-pixel arbitraria con respecto al par de MVs iniciales, en algunas realizaciones, para el propósito de una simplicidad de búsqueda, los pares de MVs candidatos son elegidos con distancia de pixel de entero con respecto al par de MVs iniciales. En dichos casos, las muestras predichas a través de todos los pares de MVs candidatos se pueden obtener ejecutando una predicción para un bloque de muestras alrededor del par de MVs iniciales para cubrir todas las posiciones de refinamiento alrededor del par de MVs iniciales.
En algunas realizaciones, una vez que se ha evaluado el valor de costo de disparidad en todos los pares de MVs candidatos a una distancia de entero desde el par de MVs iniciales, se agregan pares de MVs candidatos adicionales en compensaciones de distancia de sub-pixel desde la posición de mejor valor de costo. Muestras predichas son obtenidas para cada una de estas posiciones utilizando uno de los métodos descritos previamente y los costos de disparidad son evaluados y comparados para obtener la posición de disparidad más baja. En algunas otras realizaciones, para evitar este proceso de predicción computacionalmente costoso para cada posición de distancia de sub-pixel alrededor de la posición de entero de mejor costo-distancia, los valores de costo de enterodistancia evaluados son recordados y una superficie de error paramétrico es ajustada en las inmediaciones de la posición de mejor entero-distancia. El mínimo de esta superficie de error es entonces analíticamente calculado y utilizado como la posición con la disparidad mínima. En dichos casos, el valor de costo de disparidad se dice que es derivado de los valores de costo de entero-distancia calculados.
La aplicación de refinamiento de vector de movimiento para un bloque codificado determinado de muestras puede ser acondicionada en ciertas propiedades de codificación del bloque codificado de muestras. Algunos ejemplos de dichas propiedades de codificación pueden ser:
• La distancia en número de imágenes (cuando son muestreadas a una tasa de cuadro uniforme) desde la imagen actual a las dos imágenes de referencia utilizadas para bi-predicción del bloque codificado de muestras son iguales y caen en lados opuestos de la imagen actual.
• La disparidad inicial entre los dos bloques predichos obtenidos utilizando el par de MVs iniciales es menor que un umbral de pre-muestra pre-determinado.
Refinamiento de flujo óptico bi-predictivo (BPOF)
El refinamiento de flujo óptico bi-predictivo es un proceso para mejorar la precisión de la bi-predicción de un bloque, sin señalización explícitamente adicional en la corriente de bits excepto la señalización para bi-predicción. Esta es una parte de la Unidad de Interpredicción (244) en la figura 2 y 344 en la figura 3.
En bi-predicción, se obtienen 2 inter-predicciones de acuerdo con dos vectores de movimiento, después las predicciones son combinadas mediante la aplicación de promediación ponderada. La predicción combinada puede tener como resultado una energía residual reducida en la medida en que el ruido de cuantificación en los dos parches de referencia se cancela, proporcionando así más eficiencia de codificación que la uni-predicción. La combinación ponderada en bi-predicción puede ser ejecutada a través de una ecuación:
Bi-predicción = Predicción1 * W1 Predicción2 * W2 K,
donde W1 y W2 son factores de ponderación que pudieran ser señalizados en una corriente de bits o pudieran ser predefinidos en el lado del codificador o en el lado del decodificador. K es un factor aditivo que también pudiera ser señalizado en una corriente de bits o pudiera ser predefinido en el lado del codificador o en el lado del decodificador. Como un ejemplo, la bi-predicción pudiera obtenerse utilizando
Bi-predicción = (Predicción1 Predicción2)/2,
donde W1 y W2 se establecen a 1V y K se establece a 0.
El objetivo del refinamiento de flujo óptico es mejorar la precisión de la bi-predicción. El flujo óptico es el patrón de movimiento aparente de objetos de imagen entre dos cuadros consecutivos. El flujo óptico es provocado por el movimiento del objeto o cámara. El proceso de refinamiento de flujo óptico mejora la precisión de la bi-predicción a través de la aplicación de la ecuación de flujo óptico (resolviendo la ecuación del flujo óptico).
En un ejemplo, un pixel I(x,y,t) está ubicado en un primer cuadro (x e y correspondiendo a coordenadas espaciales, t correspondiendo a dimensión de tiempo). El objeto representado por el pixel se mueve por la distancia (dx,dy) en el siguiente cuadro tomado después del tiempo dt. Debido a que esos pixeles son los mismos y la intensidad no cambia, la ecuación de flujo óptico es proporcionada por:
I(x,y,t) = I(x+ dx ,y+ dy ,t+dt)
I(x,y,t) especifica la intensidad (valor de muestra) de un pixel en las coordenadas de (x,y,t).
En otro ejemplo, se ignoran pequeños desplazamientos y términos de orden superior en una expansión de serie Taylor, las ecuaciones de flujo óptico también pueden ser escritas como:
Donde son los gradientes de muestra especial horizontales y verticales en la posición (x,y) y — es el derivado temporal parcial en (x,y).
El refinamiento de flujo óptico utiliza el principio anterior para mejorar la calidad de la bi-predicción.
La implementación del refinamiento de flujo óptico típicamente incluye los pasos de:
1. Calcular los gradientes de muestra;
2. Calcular la diferencia entre la primera predicción y la segunda predicción;
3. Calcular el desplazamiento de pixeles o grupo de pixeles que reduce al mínimo el error A entre los dos parches de referencia obtenidos utilizando la ecuación de flujo óptico
donde I(0) corresponde al valor de muestra en la primera predicción, I(1) es el valor de muestra en la segunda predicción, y dI(0)/ dx y dI(0)/ dy son los gradientes en la dirección-x y la dirección-y. y ?0 denota las distancias a las imágenes de referencia, donde se obtienen la primera predicción y la segunda predicción. El vector de movimiento (vx, vy) es obtenido mediante el proceso de reducción al mínimo. Algunos enfoques reducen al mínimo la suma de errores cuadrados mientras que algunos enfoques reducen al mínimo la suma del error absoluto.
4. Emplear una implementación de la ecuación de flujo óptico tal como se muestra a continuación:
Donde predBIO especifica la predicción modificada que es la salida del proceso de refinamiento de flujo óptico.
Los gradientes de muestra se pueden obtener a través de la siguiente fórmula
En algunas realizaciones, a fin de simplificar la complejidad de estimar el desplazamiento para cada pixel, el desplazamiento es estimado para un grupo de pixeles. En algunos ejemplos, para calcular la bi-predicción mejorada para un bloque de muestras de luminancia 4x4, los desplazamientos son estimados utilizando valores de muestra de un bloque de muestras de luminancia 8x8 con el bloque de muestras 4x4 en su centro.
La entrada del proceso de refinamiento de flujo óptico son las muestras de predicción de dos imágenes de referencia y la salida del refinamiento de flujo óptico es predicción combinada (predBIO) la cual es calculada de acuerdo con la ecuación de flujo óptico.
Un ejemplo de refinamiento de flujo óptico se explica en la sección 8.4.7.4 “Bidirectional optical flow prediction process” del documento JVET-M1001, Codificación de Vídeo Versátil (Bosquejo 4).
Los términos refinamiento de flujo óptico, refinamiento de flujo óptico bi-predictivo y refinamiento de flujo óptico bidireccional son utilizados de manera intercambiable en la divulgación, debido a que los términos son equivalentes en naturaleza.
En un ejemplo, el refinamiento de vector de movimiento y el refinamiento de flujo óptico son aplicados consecutivamente de la siguiente manera:
Paso 0, obtener vectores de movimiento iniciales como en 1010 en la figura 8.
Paso 1, se aplica refinamiento de vector de movimiento 1020, y se obtienen los vectores de movimiento refinados 1030.
Paso 2, se obtienen predicciones de acuerdo con vectores de movimiento de refinamiento 1040. Las predicciones obtenidas son I(0) y I(1) , las cuales son la entrada del proceso de refinamiento de flujo óptico.
Paso 3, se aplica el proceso de refinamiento de flujo óptico a las predicciones, para obtener predicción modificada. La predicción modificada se obtiene de acuerdo con la ecuación de baja óptica y es denotada como predBIO.
No obstante, el proceso de refinamiento de flujo óptico es computacionalmente intensivo. El tiempo de decodificación es incrementado mediante la aplicación de refinamiento de flujo óptico.
En una realización de la presente invención, se divulga un método para decir si se aplica o no refinamiento de flujo óptico, esta decisión puede ser tomada de acuerdo con cálculos ejecutados durante un proceso de refinamiento de vector de movimiento.
De manera más específica, un resultado de los cálculos ejecutados durante el proceso de refinamiento de vector de movimiento es utilizado para determinar si se aplica o no refinamiento de flujo óptico.
El objetivo de la invención es omitir la aplicación del refinamiento de flujo óptico de acuerdo con una condición especificada, de manera que se reduce el tiempo de decodificación promedio (omitiendo los cálculos necesarios). De acuerdo con un primer ejemplo que no forma parte de la presente invención, se aplican los siguientes pasos para obtener la predicción para un bloque de codificación actual:
Paso 0: obtener vectores de movimiento iniciales con base en información de indicación en una corriente de bits. Paso 1: obtener primeras predicciones con base en los vectores de movimiento iniciales y un filtro de interpolación de M-derivaciones.
Paso 2: obtener un costo de emparejamiento de acuerdo con las primeras predicciones.
Paso 3: obtener un vector de movimiento refinado de acuerdo con los vectores de movimiento iniciales y el costo de emparejamiento.
Paso 4: obtener una segunda predicción de acuerdo con el vector de movimiento refinado y un filtro de interpolación de K derivaciones.
Paso 5: determinar si se ejecuta un proceso de refinamiento de flujo óptico de acuerdo con el costo de emparejamiento. En un ejemplo, el costo de emparejamiento es comparado con un umbral, y el proceso de refinamiento de flujo óptico es ejecutado cuando un valor del costo de emparejamiento es mayor que o igual al umbral. El paso 5 también puede ser ejecutado antes del paso 3 o el paso 4.
Paso 6: Cuando se determina que el proceso de refinamiento de flujo óptico necesita ser ejecutado, el refinamiento de flujo óptico es aplicado con la segunda predicción como entrada y segunda predicción modificada como salida. Si se determina negativamente, el refinamiento de flujo óptico no es aplicado en la segunda predicción. En otras palabras, cuando se determina que el proceso de refinamiento de flujo óptico necesita ser ejecutado, la predicción final del bloque de codificación actual se obtiene de acuerdo con la segunda predicción y de acuerdo con el proceso de refinamiento de flujo óptico. De otra manera la predicción final del bloque de codificación actual se obtiene de acuerdo con la segunda predicción y sin la aplicación del proceso de refinamiento de flujo óptico.
La explicación detallada de los pasos es de la siguiente manera:
En el paso 0, se obtienen como entrada dos vectores de movimiento iniciales. Los vectores de movimiento iniciales pueden ser determinados con base en una información de indicación en la corriente de bits. Por ejemplo, un índice pudiera ser señalizado en la corriente de bits, el índice indica una posición en una lista de vectores de movimiento candidatos. En otro ejemplo, un índice de predictor de vector de movimiento y un valor de diferencia de vector de movimiento pueden ser señalizados en la corriente de bits. El vector de movimiento que es determinado con base en una información de indicación en la corriente de bits es definido como los vectores de movimiento iniciales.
En otro ejemplo, indicaciones de imagen de referencia se pueden obtener de la corriente de bits, los vectores de movimiento iniciales se obtienen con base en las indicaciones de imagen de referencia. Las indicaciones de imagen de referencia son utilizadas para determinar las imágenes de referencia que son señalizadas por los vectores de movimiento iniciales.
El Paso 1, Paso 2 y Paso 3 corresponden a un proceso de refinamiento de vector de movimiento tal como se explica en los ejemplos anteriores. Los vectores de movimiento iniciales refinados de acuerdo con refinamiento de vector de movimiento. En un ejemplo, el costo de emparejamiento es la medición de similitud que se utiliza en el refinamiento de vector de movimiento.
De acuerdo con el paso 1, se obtienen las primeras predicciones correspondientes a vectores de movimiento iniciales. En un ejemplo, hay al menos 2 pares de vectores de movimiento candidatos en el proceso de refinamiento de vector de movimiento, uno de los cuales típicamente es el par formado por los vectores de movimiento iniciales (MV0, MV1). En otras palabras, el conjunto de vectores de movimiento candidatos típicamente incluye más de un par, en donde uno de los pares generalmente es (MV0, MV1). El otro par de vectores de movimiento candidatos es determinado con base en (MV0, MV1), agregando pequeñas perturbaciones a los vectores de movimiento (tal como se explicó en los ejemplos anteriores).
En el paso 1, las primeras predicciones correspondientes a cada par de vectores de movimiento candidatos se obtienen con base en un filtro de interpolación de M-derivaciones. Como ejemplo, una predicción correspondiente a MV0 se puede obtener ubicando un bloque rectangular en una imagen de referencia (una imagen que ya está codificada en el codificador o decodificada en el decodificador), en donde el bloque es señalizado por MV0. Posteriormente, un filtro de interpolación es aplicado convenientemente a las muestras dentro del bloque señalizado por MV0. A fin de proporcionar una estimación de movimiento más precisa, la resolución de la imagen de referencia puede ser mejorada interpolando muestras entre pixeles. La interpolación de pixel fraccional puede ser ejecutada mediante promediación ponderada de los pixeles más cercanos. Aquí, el filtro de M-derivaciones típicamente pudiera ser un filtro de 2, 4, 6, u 8 derivaciones (no limitado a estas opciones), lo que significa que el filtro tiene M coeficientes de multiplicación. La predicción correspondiente a MV1 se puede obtener de manera similar, ubicando un bloque rectangular en una misma o diferente imagen de referencia. El tamaño del rectángulo es proporcional al tamaño del bloque de codificación actual.
En el paso 2, el costo de emparejamiento asociado con cada par de vectores de movimiento candidatos es determinado de acuerdo con las primeras predicciones.
De acuerdo con el paso 2, se obtiene al menos un costo de emparejamiento (por ejemplo, medición de similitud) correspondiente a uno de los pares de vectores de movimiento candidatos de refinamiento (MV). Mientras mayor es la similitud entre dos bloques de predicción, menor es el costo de emparejamiento.
Dicho costo de emparejamiento es utilizado en el refinamiento de los vectores de movimiento iniciales en el paso 3. El vector de movimiento refinado es seleccionado de acuerdo con dicho costo de emparejamiento.
En el paso 4, se obtiene una segunda predicción de acuerdo con el vector de movimiento refinado y un filtro de interpolación de K derivaciones. En el caso de 2 vectores de movimiento refinados (MV0’ y MV1’), el cual es el caso de la bi-predicción, se obtienen dos segundas predicciones.
La segunda predicción se obtiene mediante la aplicación de un segundo filtro de interpolación (filtro de K derivaciones), que pudiera o no ser idéntica al primer filtro de interpolación (filtro de M-derivaciones). La segunda predicción se obtiene de manera similar a la primera predicción, con la aplicación del segundo filtro de interpolación y de acuerdo con el bloque señalizado por MV0’ y MV1 ’ en la imagen de referencia.
En el paso 5, dicho costo de emparejamiento es utilizado para determinar si se ejecuta un proceso de refinamiento de flujo óptico o no, de acuerdo con lo siguiente:
Cuando un valor del costo de emparejamiento es más pequeño que un umbral predefinido, el refinamiento de flujo óptico no es aplicado. Cuando un valor del costo de emparejamiento es mayor que o igual al umbral, se ejecuta el proceso de refinamiento de flujo óptico. Si se ejecuta el proceso de refinamiento de flujo óptico, las muestras de predicción final son modificadas.
En el paso 6, de acuerdo con la salida del paso 5, si el costo de emparejamiento es mayor que o igual a dicho umbral, el proceso de refinamiento de flujo óptico es aplicado a las segundas predicciones, las segundas predicciones son obtenidas de acuerdo con MV0’ y MV1 ’ (vectores de movimiento refinados). La predicción final para el bloque de codificación actual se obtiene ejecutando un proceso de refinamiento de flujo óptico en las segundas predicciones, las segundas predicciones son señalizadas por MV0’ y MV1’. Si el costo de emparejamiento es más pequeño que dicho umbral, la predicción final se obtiene de acuerdo con segundas predicciones señalizadas por MV0’ y MV1 ’, sin la aplicación de refinamiento de flujo óptico, lo que significa que el paso 6 no es ejecutado.
En una implementación, el costo de emparejamiento en el paso 2 es un costo de emparejamiento correspondiente al de vectores de movimiento iniciales (el cual es uno de los pares de vectores de movimiento candidatos de refinamiento (MV)). El costo de emparejamiento pudiera ser correspondiente al par MV0, MV1.
En otra implementación, dicho costo de emparejamiento en el paso 2 es un costo de emparejamiento igual al costo de emparejamiento más pequeño entre los pares de vectores de movimiento candidatos de refinamiento (MV). En otras palabras, se obtiene un costo de emparejamiento correspondiente a cada uno de los pares de vectores de movimiento candidatos de refinamiento, y dicho costo de emparejamiento es igual al costo de emparejamiento más pequeño entre estos. En un ejemplo, dicho costo de emparejamiento es un costo de emparejamiento correspondiente al par de vectores de movimiento refinados MV0’ y MV1’, (debido a que el par de vectores de movimiento refinados (MV0’, MV1 ’) es seleccionado ya que tiene el costo de emparejamiento más pequeño.
Como un ejemplo, los pares de MVs pueden ser construidos de la siguiente manera.
Pares de MVs candidatos son determinados agregando pequeñas diferencias de vector de movimiento a MV0 y MV1. Por ejemplo, los pares de MVs candidatos pudieran incluir lo siguiente:
(MV0, MV1)
(MV0 (0,1), MV1 (0,-1))
(MV0 (1,0), MV1 (-1,0))
MV0 y MV1 son vectores de movimiento iniciales, MV0’ y MV1’ vectores de movimiento refinados a través de la aplicación.
De acuerdo con otra implementación, cuando el proceso de refinamiento de flujo óptico no es ejecutado, la predicción final es obtenida de acuerdo con la siguiente fórmula:
Bi-predicción = Predicción1 * W1 Predicción2 * W2 K,
donde W1 y W2 son factores de ponderación, W1 y W2 pudieran ser señalizados en una corriente de bits, o W1 y W2 pudieran ser predefinidos en el lado del codificador o en el lado del decodificador. K es un factor aditivo que también pudiera ser señalizado en una corriente de bits o pudiera ser predefinido en el lado del codificador o en el lado del decodificador. En un ejemplo, la bi-predicción se pudiera obtener utilizando
Bi-predicción = (Predicción1 Predicción2)/2,
donde W1 y W2 son establecidos a / y K es establecido a 0. Predicción1 y Predicción2 son las segundas predicciones que son obtenidas mediante filtración de interpolación de K derivaciones, Predicción1 corresponde al primer MV refinado (MV0’) y Predicción2 corresponde al segundo MV refinado (MV1’).
La ecuación anterior logra la combinación ponderada de las dos predicciones, y el resultado es la predicción final para el bloque.
El umbral puede ser un valor predefinido, un valor del umbral puede depender del tamaño del bloque de predicción. Por ejemplo, el umbral puede ser thr = nCbW x nCbH x K, donde K es un valor mayor que cero, nCbW y nCbH son anchura y altura del bloque de predicción.
El primer ejemplo es ejemplificado adicionalmente a través del gráfico de flujo en la figura 6.
En una implementación, el filtro de M-derivaciones es un filtro de 2-derivaciones (por ejemplo, filtro bilineal) con una de las derivaciones igual a cero. En esta implementación, el filtro de M-derivaciones emplea 2 coeficientes de multiplicador, un valor de un coeficiente siempre es igual a cero. Cuál coeficiente tiene un valor igual a cero es determinado con base en un punto de muestra fraccional, donde el punto de muestra fraccional es señalizado por el vector de movimiento. En este caso, un valor del primer coeficiente de multiplicador, o un valor del segundo coeficiente de multiplicador pudiera ser cero, dependiendo del componente fraccional del vector de movimiento. Dicho filtro (con 2 derivaciones, una de las cuales es cero, se puede ejemplificar de acuerdo con la siguiente tabla:
La posición de muestra fraccional (p) se puede obtener de acuerdo con los componentes del vector de movimiento inicial o refinado. Por ejemplo si el -x componente del vector de movimiento es proporcionado por MV0x, entonces la posición de muestra fraccional se puede obtener como p = MV0x%16, donde “%” es la operación de módulo. En general p = MV0x%K, donde K representa el número de posiciones de muestra fraccional entre dos posiciones de muestra. El filtro de interpolación antes ejemplificado también se puede denominar filtro de 1-derivación, debido a que solamente una de las derivaciones de filtro es no-cero a la vez.
En una implementación, un valor de K es igual a 8. En otros ejemplos, un valor de M es inferior a 8.
En una implementación, un valor de M y un valor de K son ambos iguales a 8.
El vector de movimiento inicial se obtiene en 710, el cual es la entrada de la unidad de refinamiento de vector de movimiento. Un espacio de búsqueda es construido alrededor del vector de movimiento inicial por la unidad de refinamiento de vector de movimiento (740). En un ejemplo, el espacio de búsqueda consiste de pares de vectores de movimiento candidatos, primer vector de movimiento del par correspondiente a la primera imagen de referencia y el segundo vector de movimiento del par correspondiente a la segunda imagen de referencia. Primeras predicciones correspondientes a cada uno de los pares de vectores de movimiento candidatos se obtienen en el paso 710, mediante la aplicación del Filtro de interpolación de M-derivaciones. Como parte del refinamiento de vector de movimiento, un costo de emparejamiento es calculado correspondiendo a uno de los pares de vector de movimiento en el espacio de búsqueda (720). Dicho costo de emparejamiento es utilizado como parte de dos procesos, el primer proceso es refinamiento de vector de movimiento (740), donde el costo de emparejamiento es utilizado para decidir cuál par de vectores de movimiento es seleccionado como el par de vectores de movimiento refinados (750). El segundo proceso es la decisión respecto a si el refinamiento de flujo óptico (770) es o no aplicado. Después que se obtiene el vector de movimiento refinado, se obtiene la segunda predicción para el bloque actual a través de (760). Si el costo de emparejamiento es mayor que o igual a un umbral, se aplica el refinamiento de flujo óptico y la predicción en 760 es modificada por 770 para obtener la predicción modificada (780). La predicción modificada típicamente es diferente en valores de muestra de la segunda predicción en el paso 760.
En un ejemplo, el proceso de refinamiento de vector de movimiento es ejecutado más de una vez para refinar el vector de movimiento de manera adicional. En este ejemplo, vectores de movimiento iniciales primero son refinados a través del proceso de refinamiento de vector de movimiento, para obtener el primer vector de movimiento refinado. Posteriormente, el refinamiento de vector de movimiento es ejecutado una vez más, en este caso el primer vector de movimiento refinado es considerado como los vectores de movimiento iniciales para el segundo refinamiento de vector de movimiento.
De acuerdo con un segundo ejemplo que no forma parte de la presente invención, se aplican los siguientes pasos para obtener la predicción para un bloque de codificación actual:
Paso 0: obtener vectores de movimiento iniciales con base en una información de indicación en una corriente de bits.
Paso 1: obtener primeras predicciones con base en vectores de movimiento iniciales y un filtro de interpolación de M-derivaciones.
Paso 2: obtener N costos de emparejamiento de acuerdo con las primeras predicciones.
Paso 3: obtener un vector de movimiento refinado de acuerdo con los vectores de movimiento iniciales y los N costos de emparejamiento, con base en una primera función.
Paso 4: obtener una segunda predicción de acuerdo con el vector de movimiento refinado y un filtro de interpolación de K derivaciones.
Paso 5: determinar si se ejecuta un proceso de refinamiento de flujo óptico de acuerdo con los N costos de emparejamiento. Se obtiene un costo derivado de acuerdo con los N costos de emparejamiento y una segunda función. En un ejemplo, el costo derivado es comparado con un umbral, y el proceso de refinamiento de flujo óptico es ejecutado cuando un valor del costo derivado es mayor que o igual al umbral. El paso 5 también puede ser ejecutado antes que el Paso 3 o Paso 4.
Paso 6: modificar al menos una muestra de la predicción del bloque de codificación actual con la aplicación de refinamiento de flujo óptico, cuando se determina que el proceso de refinamiento de flujo óptico necesita ser ejecutado.
Cuando se determina que el proceso de refinamiento de flujo óptico necesita ser ejecutado, el refinamiento de flujo óptico es aplicado con la segunda predicción como entrada y la segunda predicción modificada como salida. Si se determina negativamente, el refinamiento de flujo óptico no es aplicado en la segunda predicción. En otras palabras, cuando se determina que el proceso de refinamiento de flujo óptico necesita ser ejecutado, la predicción final del bloque de codificación actual se obtiene de acuerdo con la segunda predicción y de acuerdo con el proceso de refinamiento de flujo óptico. De otra manera la predicción final del bloque de codificación actual se obtiene de acuerdo con la segunda predicción y sin la aplicación del proceso de refinamiento de flujo óptico.
La explicación detallada de los pasos es de la siguiente manera:
En el Paso 0, se obtienen dos vectores de movimiento iniciales como entrada. El vector de movimiento inicial puede ser determinado con base en una información de indicación en la corriente de bits. Por ejemplo, un índice pudiera ser señalizado en la corriente de bits, el índice indica una posición en una lista de vectores de movimiento candidatos. En otro ejemplo, un índice de predictor de vector de movimiento y un valor de diferencia de vector de movimiento pueden ser señalizados en la corriente de bits. El vector de movimiento que es determinado con base en una información de indicación en la corriente de bits es definido como los vectores de movimiento iniciales.
En otro ejemplo, indicaciones de imagen de referencia pueden ser obtenidas de la corriente de bits, los vectores de movimiento iniciales son obtenidos con base en las indicaciones de imagen de referencia. Las indicaciones de imagen de referencia son utilizadas para determinar las imágenes de referencia que son señalizadas por los vectores de movimiento iniciales.
El Paso 1, Paso 2 y Paso 3 corresponden a un proceso de refinamiento de vector de movimiento tal como se explicó en los ejemplos anteriores. Los vectores de movimiento iniciales refinados de acuerdo con el refinamiento de vector de movimiento. En un ejemplo, el costo de emparejamiento es la medición de similitud que es utilizada en el refinamiento de vector de movimiento.
De acuerdo con el paso 1, se obtienen primeras predicciones correspondientes a vectores de movimiento iniciales. En un ejemplo, hay al menos 2 pares de vectores de movimiento candidatos en el proceso de refinamiento de vector de movimiento, uno de los cuales típicamente es el par formado por los vectores de movimiento iniciales (MV0, MV1). Y el otro par de vectores de movimiento candidatos es determinado con base en (MV0, MV1), agregando pequeñas perturbaciones a los vectores de movimiento (tal como se explicó en el ejemplo anterior).
En el Paso 1, las primeras predicciones correspondientes a cada par de vectores de movimiento candidatos se obtienen con base en un filtro de interpolación de M-derivaciones.
En el paso 2, N costos de emparejamiento asociados con N pares de vectores de movimiento candidatos son determinados de acuerdo con las primeras predicciones.
De acuerdo con el paso 2, N costos de emparejamiento (medición de similitud) son obtenidos correspondientes a N de los pares de vectores de movimiento candidatos de refinamiento (MV). Mientras mayor es la similitud entre dos bloques de predicción, menor es el costo de emparejamiento.
Dichos N costos de emparejamiento son utilizados en el refinamiento de los vectores de movimiento iniciales en el paso 3.
El vector de movimiento refinado es determinado de acuerdo con una primera función y los N costos de emparejamiento.
En un ejemplo, el vector de movimiento refinado se puede obtener de acuerdo con la siguiente función:
- si ( sad[ 3 ] sad[5]) es igual a ( sad[ 4 ] << 1 ), dmvCompensación[ 0 ] se establece igual a 0,
De otra manera, aplica lo siguiente:
dmvCompensación[ 0 ] = ( ( sad[ 3 ] - sad[ 5 ] ) << 3 ) / ( sad[ 3 ] sad[ 5 ] - ( sad[ 4 ] << 1 ) )
- si ( sad[ 1 ] sad[7]) es igual a ( sad[ 4 ] << 1 ), dmvCompensación[ 1 ] se establece igual a 0,
De otra manera, aplica lo siguiente:
dmvCompensación[ 1 ] = ( ( sad[ 1 ] - sad[ 7 ] ) << 3 ) / ( sad[ 1 ] sad[ 7 ] - ( sad[ 4 ] << 1 ) )
donde dmvCompensación[0] y dmvCompensación[1] especifican la diferencia entre el vector de movimiento inicial y refinado. En un ejemplo, dmvCompensación[0] y dmvCompensación[1] especifican el componente-x y el componente-y de la diferencia entre los vectores de movimiento refinados e iniciales. sad[0] a sad[7] son los N costos de emparejamiento, correspondientes a N pares de vectores de movimiento candidatos. El vector de movimiento refinado se obtiene agregando el dmvCompensación a los vectores de movimiento iniciales.
Pudiera haber otras funciones que podrían ser utilizadas para determinar el vector de movimiento refinado de acuerdo con N costos de emparejamiento. La primera función en la invención no queda limitada a la ecuación anterior.
En el Paso 4, se obtiene una segunda predicción de acuerdo con el vector de movimiento refinado y un filtro de interpolación de K derivaciones. En el caso de 2 vectores de movimiento refinados (MV0’ y MV1’), el cual es el caso de bi-predicción, se obtienen dos segundas predicciones.
La segunda predicción se obtiene mediante la aplicación de un segundo filtro de interpolación (filtro de K derivaciones), que pudiera o no ser idéntico al primer filtro de interpolación (filtro de M-derivaciones). La segunda predicción se obtiene de manera similar a la primera predicción, con la aplicación del segundo filtro de interpolación y de acuerdo con el bloque señalizado por MV0’ y MV1 ’ en la imagen de referencia.
En el paso 5, se obtiene un costo derivado de acuerdo con una segunda función y dichos N costos de emparejamiento. El costo derivado es utilizado para determinar si se ejecuta un proceso de refinamiento de flujo óptico o no. Cuando un valor de dicho costo derivado es inferior a un umbral predefinido, el proceso de refinamiento de flujo óptico no es ejecutado. Cuando un valor del costo derivado es mayor que o igual al umbral, el proceso de refinamiento de flujo óptico es ejecutado. Si el proceso de refinamiento de flujo óptico es ejecutado, se modifican las muestras de predicción final.
En el paso 6, de acuerdo con la salida del paso 5, si el costo derivado es mayor que dicho umbral, el proceso de refinamiento de flujo óptico es aplicado a las segundas predicciones, las segundas predicciones son obtenidas de acuerdo con MV0’ y MV1’ (vectores de movimiento refinados). La predicción final para el bloque de codificación actual se obtiene ejecutando proceso de refinamiento de flujo óptico en las segundas predicciones, las segundas predicciones son señalizadas por MV0’ y MV1’. Si el costo de emparejamiento es inferior a dicho umbral, la predicción final se obtiene de acuerdo con segundas predicciones señaladas por MV0’ y MV1’, sin la aplicación de refinamiento de flujo óptico, lo que significa que el Paso 6 no es ejecutado.
De acuerdo con otra implementación, cuando el proceso de refinamiento de flujo óptico no es ejecutado, la predicción final se obtiene de acuerdo con la siguiente fórmula:
Bi-predicción = Predicción1 * W1 Predicción2 * W2 K,
donde W1 y W2 son factores de ponderación, W1 y W2 pudieran ser señalizados en una corriente de bits o pudieran ser predefinidos en el lado del codificador o en el lado del decodificador. K es un factor aditivo que también pudiera ser señalizado en una corriente de bits o pudiera ser predefinido en el lado del codificador o en el lado del decodificador. En un ejemplo, la bi-predicción pudiera ser obtenida utilizando
Bi-predicción = (Predicción1 Predicción2)/2,
donde W1 y W2 se establecen a / y K se establece a 0. Predicción1 y Predicción2 son las segundas predicciones que se obtienen mediante la filtración de interpolación de K derivaciones, la Predicción1 corresponde al primer MV refinado (MV0’) y Predicción2 corresponde al segundo MV refinado (MV1’).
La ecuación anterior logra la combinación ponderada de las dos predicciones, y el resultado es la predicción final para el bloque.
El umbral puede ser un valor predefinido, un valor del umbral depende del tamaño del bloque de predicción. Por ejemplo, el umbral puede ser thr = nCbW x nCbH x K, donde K es un valor mayor que cero, nCbW y nCbH son anchura y altura del bloque de predicción.
El segundo es ejemplificado adicionalmente por el gráfico de flujo de la figura 7.
En una implementación, el filtro de M derivaciones es un filtro de 2 derivaciones (por ejemplo, filtro bilineal) con una de las derivaciones igual a cero. En esta implementación, el filtro de M-derivaciones emplea 2 coeficientes de multiplicador, un valor de un coeficiente siempre es igual a cero. El coeficiente que es igual a cero es determinado con base en el punto de muestra fraccional que es señalizado por el vector de movimiento. En este caso, un valor del primer coeficiente de multiplicador, o un valor del segundo coeficiente de multiplicador pudieran ser cero, dependiendo del componente fraccional del vector de movimiento.
Dicho filtro (con 2 derivaciones, una de las cuales es cero) puede ser ejemplificado de acuerdo con la siguiente tabla:
La posición de muestra fraccional (p) se puede obtener de acuerdo con los componentes del vector de movimiento inicial o refinado. Por ejemplo si el componente-x del vector de movimiento es proporcionado por MV0x, entonces la posición de muestra fraccional se puede obtener como p = MV0x%16, donde “%” es la operación de módulo. En general p = MV0x%K, donde K representa el número de posiciones de muestra fraccional entre dos posiciones de muestra. El filtro de interpolación antes ejemplificado también puede ser denominado filtro de 1-derivación, debido a que solamente una de las derivaciones de filtro es no cero a la vez.
Otro ejemplo de filtro de interpolación bilineal puede ser de la siguiente manera, en cuyo caso ambos coeficientes de filtro son no-cero:
En una implementación, un valor de K es igual a 8. En otros ejemplos, un valor de M es inferior a 8.
En una implementación, un valor de M y un valor de K son ambos iguales a 8.
En una implementación, la segunda función puede ser una función para combinar linealmente los N costos de emparejamiento de acuerdo con dmvCompensación, donde el dmvCompensación ha sido obtenido en el paso 3. Una combinación lineal de x e y sería cualquier expresión de la forma ax by, donde a y b son constantes. En un ejemplo las constantes a y b pueden ser determinadas con base en dmvCompensación. A continuación se proporcionan ejemplos para la segunda función.
En una implementación, la segunda función puede ser:
• Sad[1]*A Sad[2]*B Sad[3]*C Sad[4]*D, donde A, B, C y D son mayores que o iguales a cero. En un ejemplo A, B, C y D pudieran ser números que estén entre 0 y 1, y que se sumen hasta llegar a 1 (es decir, A+B+C+D=1). En otro ejemplo A, B, C y D pudieran ser números mayores que o iguales a 0 y que se sumen hasta alcanzar un número fijo predefinido P, P pudiera ser igual a 1,2, 4, 8, 16 etc.
• A, B, C y D pudieran ser números fijos predefinidos.
• A, B, C y D pudieran ser derivados de acuerdo con dmvCompensación[ 0 ] y dmvCompensación[ 1 ]. En un ejemplo, A = dmvCompensación[ 0 ], B= P1 - dmvCompensación[ 0 ], C= dmvCompensación[ 1 ], D=P2 -dmvCompensación[ 1 ]. Donde P1 y P2 pudieran ser iguales a 1,4, 8, 16, etc.
• La ecuación anterior es proporcionada como ejemplo. La ecuación representa la combinación lineal de 4 costos de emparejamiento para obtener el costo derivado. En la ecuación se utiliza el dmvCompensación, el cual pudiera obtenerse en el paso 3. dmvCompensación representa la diferencia entre el vector de movimiento refinado y el vector de movimiento inicial. En una implementación específica, el dmvCompensación es definido como la diferencia entre MV0 y MV0’. Más específicamente, el dmvCompensación[0] pudiera ser la diferencia entre el componente -x de MV0 y MV0’, mientras que el dmvCompensación[1] pudiera ser la diferencia entre el componente -y de MV0 y MV0’.
En otra implementación, la segunda función puede ser:
• Sad[1]*A Sad[2]*B Sad[3]*C, donde A, B y C son mayores que o iguales a cero. En un ejemplo A, B, y C pudieran ser números que estén entre 0 y 1, y que se suman hasta alcanzar 1 (es decir, A+B+C=1). En otro ejemplo, A, B y C pudieran ser números mayores que o iguales a 0 y que se suman hasta alcanzar un número fijo predefinido P, P pudiera ser igual a 1,2, 4, 8, 16 etc.
• A, B y C pueden ser números fijos predefinidos.
• A, B y C pudieran ser derivados de acuerdo con dmvCompensación[ 0 ] y dmvCompensación[ 1 ]. En un ejemplo, A = P - dmvCompensación[ 0 ] - dmvCompensación[ 1 ], B = dmvCompensación[ 0 ], C= dmvCompensación[ 1 ]. Donde P pudiera ser igual a 1,4, 8, 16, etc.
• La ecuación anterior es proporcionada como ejemplo. La ecuación representa la combinación lineal de 3 costos de emparejamiento para obtener el costo derivado. En la ecuación se utiliza el dmvCompensación, que pudiera obtenerse en el paso 3. dmvCompensación representa la diferencia entre el vector de movimiento refinado y el vector de movimiento inicial. En un ejemplo el dmvCompensación es definido como la diferencia entre MV0 y MV0’. De manera más específica, el dmvCompensación[0] pudiera ser la diferencia entre el componente -x de MV0 y MV0’, mientras que el dmvCompensación[1] pudiera ser la diferencia entre el componente -y de MV0 y MV0’.
En otra implementación, la segunda función para obtener el costo derivado puede ser:
• Utilizando 5 valores de costo de disparidad evaluados (por ejemplo, valores SAD) en el par de MVs refinados y los pares de MVs candidatos que están a una distancia de entero del par de MVs refinados, se ajusta una función de superficie de error paramétrica
E(x,y) = A*(x - X<ü>) 2 B*(y - yü)2 C
donde (xo, yo) corresponde a la posición en la cual se reduce al mínimo la disparidad entre los dos parches de referencia, C es el valor del costo en (xo, yo), y A, B son coeficientes de modelo. Estos 5 desconocidos pueden ser resueltos en una manera exacta si 5 valores de costo están disponibles. En otras palabras, la ecuación para E(x,y) hace la suposición de que la forma de los costos de emparejamiento como una función de las posiciones espaciales cerca de la posición de costo de emparejamiento mínimo tiene forma parabólica.
En un ejemplo, se utilizan pares de MVs candidatos a la izquierda, superior, derecha e inferior del par de MVs refinados a una distancia de pixel entero. En este caso, dados los valores evaluados de E(x,y) en las posiciones (x,y) de (0,0), (-1,0), (0,-1), (1,0), y (0,1) y la ecuación paramétrica para E(x,y), los 5 desconocidos A, B, C, xo, yo pueden ser resueltos de la siguiente manera:
Por otra parte, si están disponibles los valores de costo en más de 5 posiciones, los 5 desconocidos pueden ser resueltos utilizando un enfoque de cuadrados mínimos o similar. El valor obtenido de C entonces se convierte en el costo derivado.
En una implementación, la segunda función puede ser de la siguiente manera
Donde K es un escalar mayor que 0 y sad[0] a sad[4] son los N costos de emparejamiento.
En un ejemplo, el proceso de refinamiento de vector de movimiento es ejecutado más de una vez para refinar el vector de movimiento adicionalmente. En este ejemplo, los vectores de movimiento iniciales primero son refinados por el proceso de refinamiento de vector de movimiento, para obtener el primer vector de movimiento refinado. Posteriormente, el refinamiento de vector de movimiento es ejecutado una vez más, en este caso el primer vector de movimiento refinado es considerado como los vectores de movimiento iniciales para el segundo refinamiento de vector de movimiento.
El vector de movimiento inicial es obtenido en 925, el cual es la entrada de la unidad de refinamiento de vector de movimiento. Un espacio de búsqueda es construido alrededor del vector de movimiento inicial por la unidad de refinamiento de vector de movimiento (930). En un ejemplo el espacio de búsqueda consiste de pares de vectores de movimiento candidatos, el primer vector de movimiento del par correspondiente a la primera imagen de referencia y el segundo vector de movimiento del par correspondiente a la segunda imagen de referencia. Primeras predicciones correspondientes a cada uno de los pares de vectores de movimiento candidatos se obtienen en el paso 910, mediante la aplicación del filtro de interpolación de M-derivaciones. Como parte del refinamiento de vector de movimiento, se calcula un costo de emparejamiento correspondiente a N pares de vectores de movimiento en el espacio de búsqueda (915). Dichos N costos de emparejamiento son utilizados como parte de dos procesos, el primer proceso es refinamiento de vector de movimiento (930), donde los costos de emparejamiento son utilizados para calcular el par de vectores de movimiento refinados (935) de acuerdo con una función que toma los N costos de emparejamiento como entrada. El segundo proceso es la decisión respecto a si el refinamiento de flujo óptico (950) es o no aplicado, donde la decisión es tomada por 945. Después que se obtiene el vector de movimiento refinado, la segunda predicción para el bloque actual es obtenida por (940). Si el costo de emparejamiento es mayor que un umbral, se aplica el refinamiento de flujo óptico y la predicción en 940 es modificada por 950 para obtener la predicción modificada (955-960). La predicción modificada típicamente es diferente en valores de muestra de la segunda predicción en el paso 940. Si el costo de emparejamiento es inferior a un umbral, no se aplica el refinamiento de flujo óptico y la segunda predicción es establecida como salida (la predicción final del bloque actual). De acuerdo con una realización ejemplar de la presente invención, se aplican los siguientes pasos para obtener la predicción para un bloque de codificación actual:
Paso 0: obtener par de vectores de movimiento iniciales con base en información de indicación en una corriente de bits.
Paso 1: obtener un primer conjunto de muestras predichas con base en el par de MVs iniciales y un filtro de interpolación de M-derivaciones.
Paso 2: obtener un primer costo de emparejamiento correspondiente al par de MVs iniciales utilizando el primer conjunto de muestras predichas.
Paso 3: determinar si el bloque de codificación actual es elegible para ejecutar refinamiento de vector de movimiento.
Paso 4: Si se determina que el bloque de codificación actual elegible para ejecutar MVR en el paso 3,
Paso 4a: obtener un par de MVs refinados y un costo de emparejamiento correspondiente al par de MVs refinados de acuerdo con el par de MVs iniciales y el costo de emparejamiento utilizando un proceso de refinamiento de vector de movimiento.
Paso 4b: obtener un segundo conjunto de muestras predichas de acuerdo con el par de MVs refinados y un filtro de interpolación de K derivaciones.
Paso 4c: determinar si se ejecuta un proceso de refinamiento de flujo óptico de acuerdo con el segundo costo de emparejamiento. En un ejemplo, el costo de emparejamiento es comparado con un umbral, y el proceso de refinamiento de flujo óptico es ejecutado cuando un valor del costo de emparejamiento es mayor que o igual al umbral.
Paso 5: De otra manera (si se determina que el bloque de codificación actual no es elegible para ejecutar MVR en el paso 3),
Paso 5a: obtener un segundo conjunto de muestras predichas de acuerdo con el par de MVs iniciales y un filtro de interpolación de K derivaciones.
Paso 5b: determinar si se ejecuta un proceso de refinamiento de flujo óptico de acuerdo con el primer costo de emparejamiento. En un ejemplo, el costo de emparejamiento es comparado con un umbral, y el proceso de refinamiento de flujo óptico es ejecutado cuando un valor del costo de emparejamiento es mayor que o igual al umbral.
Paso 6: Cuando se determina que el proceso de refinamiento de flujo óptico necesita ser ejecutado (ya sea en el paso 4c o en el paso 5b), el refinamiento de flujo óptico es aplicado con la segunda predicción como entrada y la segunda predicción modificada como salida. Si se determina negativamente, el refinamiento de flujo óptico no es aplicado en la segunda predicción. En otras palabras, cuando se determina que el proceso de refinamiento de flujo óptico necesita ser ejecutado, la predicción final del bloque de codificación actual se obtiene de acuerdo con la segunda predicción y de acuerdo con el proceso de refinamiento de flujo óptico. De otra manera la predicción final del bloque de codificación actual se obtiene de acuerdo con la segunda predicción y sin la aplicación del proceso de refinamiento de flujo óptico.
Esta realización es ilustrada adicionalmente en el gráfico de flujo en la figura 9. El bloque 1110 recibe un par de MVs iniciales para un bloque de codificación actual para predicción en las referencias L0 y L1. El bloque 1110 corresponde al paso 1, en donde un primer conjunto de muestras predichas se obtiene utilizando el par de MVs iniciales y muestras de referencia reconstruidas de las imágenes de imágenes L0 y L1. El bloque 1120 corresponde al paso 2, en donde un primer costo de emparejamiento (o métrica de disparidad tal como SAD) es evaluado entre el primer conjunto de bloques predichos de muestras correspondientes al par de MVs iniciales (como se describió en la sección de antecedentes MVR). El bloque 1130 corresponde al paso 3, en donde se verifican las condiciones para la idoneidad del bloque de codificación actual para ejecutar MVR. El bloque 1140 corresponde al paso 4a, en donde si se descubre que el bloque de codificación actual es elegible para ejecutar MVR, se obtiene un par de MVs refinados ejecutando MVR (tal como se describió en la sección de antecedentes de MVR) y se obtiene un segundo costo de emparejamiento (o métrica de disparidad) correspondiente al par de MVs refinados. El bloque 1150 corresponde al paso 4b, en donde un segundo conjunto de muestras predichas se obtiene utilizando un filtro de interpolación de K derivaciones (en las direcciones horizontal y vertical) utilizando el par de MVs refinados. El bloque 1160 corresponde al paso 4c, en donde se verifica si el segundo costo de emparejamiento es menor que un umbral predefinido por debajo del cual se omite el flujo óptico bi-predictivo con base en refinamiento y bi-predicción. El bloque 1180 corresponde al paso 5a, en donde el bloque de codificación actual omite MVR y obtiene un segundo conjunto de muestras predichas utilizando un filtro de interpolación de K derivaciones utilizando el par de MVs iniciales. El bloque 1185 corresponde al paso 5b, en donde se verifica si el primer costo de emparejamiento es menor que el umbral predeterminado por debajo del cual se omite BPOF. Los bloques 1170 y 1195 corresponden a una parte del paso 6, en donde si la verificación en el paso 4c o el paso 5b indica que el segundo o primer costo de emparejamiento respectivamente es menor que el umbral predeterminado por debajo del cual se omite BPOF, una promediación ponderada de bi-predicción sin BPOF es ejecutada utilizando el segundo conjunto de muestras predichas. El bloque 1175 corresponde a una parte del paso 6, en donde si la verificación en el paso 4c o el paso 5b indican que el segundo o primer costo de emparejamiento no es menor que el umbral predeterminado por debajo del cual se omite BPOF, se obtiene el flujo óptico estimado y la bi-predicción final se obtiene utilizando el segundo conjunto de muestras predichas, los gradientes del segundo conjunto de muestras predichas, y el flujo óptico estimado.
Se debiera observar que utilizando el primer o el segundo costo de emparejamiento que son calculados en un sub bloque de muestras dentro de una unidad de codificación actual conforme a lo requerido por el proceso de refinamiento de vector de movimiento para determinar la terminación anticipada del proceso de refinamiento basado en flujo óptico bi-predictivo, la decisión de omitir o ejecutar BPOF puede variar de un sub-bloque MVR a otro dentro de una unidad de codificación. BPOF debiera ser aplicado u omitido para todas las unidades de aplicación BPOF (por ejemplo, nivel de pixel, o nivel de bloque de muestras 4x4) dentro de un sub-bloque con base en la determinación ejecutada en el paso-4c o paso-5.
En algunas realizaciones, es posible ejecutar terminación anticipada adicional para cada unidad de aplicación BPOF dentro de un sub-bloque obteniendo costos de emparejamiento parciales correspondientes a cada unidad de aplicación BPOF dentro de un sub-bloque MVR.
El valor de umbral predeterminado típicamente es elegido como un valor de umbral por-muestra que depende de la profundidad de bit de la primera predicción o primer conjunto de muestras predichas. Por ejemplo, si el primer valor de muestra de predicción obtenido utilizando una interpolación bilineal (2-derivaciones) queda restringida a una profundidad de bit b, el umbral por-muestra es calculado para que sea k*2(b - 10), y el número de muestras para el cual se calcula el costo de emparejamiento es N, entonces el valor de umbral predeterminado contra el cual se compara el costo de emparejamiento para el sub-bloque actual debiera ser k*N*2(10-b). Valores de muestra para k son 2 (para una profundidad de bit de 10), N es 8x16=128, y b es 8. Debido a que el costo de emparejamiento en un par de MVs candidatos determinado puede ser calculado con un conjunto decimado de primeras muestras predichas, el valor de N debiera ser utilizado por consiguiente. Por ejemplo, si se utilizan filas alternas de un bloque 8x16 de muestras predichas, N debiera ser calculado como 8x8 = 64.
De acuerdo con realizaciones de la invención, se proporciona un método de terminación temprana para omitir condicionalmente una aplicación del proceso de refinamiento de flujo óptico, la aplicación del proceso de refinamiento de flujo óptico es considerada como computacionalmente intensa. Como resultado, se reduce el tiempo de decodificación promedio.
Adicionalmente, la condición para omitir de manera condicional la aplicación del flujo óptico se determina con base en parámetros que son calculados por otro proceso (calculando costos de emparejamiento en el curso de un proceso de refinamiento de vector de movimiento). Debido a que se utilizan valores ya calculados, ningún cálculo adicional necesita ser ejecutado.
Un método de codificación de vídeo implementado en un dispositivo de decodificación o un dispositivo de codificación de acuerdo con otro ejemplo, que no forma parte de la invención, tal como se ilustra en la figura 10. El método comprende los siguientes pasos que pueden ser ejecutados en el orden proporcionado. Se obtiene un vector de movimiento inicial para un bloque actual 1210. El bloque actual puede ser un bloque de codificación actual. Primeras predicciones para un valor de muestra en el bloque actual son obtenidas con base en los vectores de movimiento iniciales 1220. Se calcula un costo de emparejamiento de acuerdo con las primeras predicciones 1230. Después que se obtiene el primer costo de emparejamiento, se determina si un proceso de refinamiento de flujo óptico debiera o no ser ejecutado 1240, de acuerdo con al menos una condición preestablecida, al menos la condición preestablecida comprendiendo una condición respecto a si el costo de emparejamiento calculado (por ejemplo, en términos de una medición de similitud; ver la descripción anterior) es igual a o mayor que un umbral predefinido. En 1250 se ejecuta un proceso de refinamiento de flujo óptico para obtener una interpredicción final para el valor de muestra en el bloque actual, cuando se determina que el proceso de refinamiento de flujo óptico debiera ser ejecutado. Cuando se determina que el proceso de refinamiento de flujo óptico no debiera ser ejecutado, se pueden ahorrar costos computacionales omitiendo el proceso de refinamiento de flujo óptico.
Este método puede ser implementado en los aparatos antes descritos con referencia a las figuras 1a a 5.
En particular, el método puede ser implementado en el contexto de un proceso de refinamiento de vector de movimiento del lado del decodificador. Las entradas de dicho proceso son:
una ubicación de luminancia (xSb, ySb) qu especifica la muestra superior-izquierda del subbloque de codificación actual con relación a la muestra de luminancia superior-izquierda de la imagen actual,
una variable sbAnchura que especifica la anchura del subbloque de codificación actual en muestras de luminancia, una variable sbAltura que especifica la altura del subbloque de codificación actual en muestras de luminancia, los vectores de movimiento de luminancia en precisión de muestra de 1/16 fraccional mvL0 y mvL1,
los arreglos de muestra de imagen de referencia de luminancia seleccionados refImagenL0i_ y refImagenL1i_.
Las salidas de este proceso son: los vectores de movimiento de luminancia delta dMvL0 y dMvL y una variable dmvrSad que especifica la suma mínima de las diferencias absolutas de las primeras predicciones (cf. cálculo SAD antes descrito).
El vector de movimiento de luminancia delta dMvL0 puede ser derivado por dMvL0[ 0 ] = 16 * intOffX y dMvL0[ 1 ] = 16 * intOffY, donde intOffX e intOffY son las compensaciones de muestra de entero en la dirección x e y, respectivamente. Además, el vector de movimiento de luminancia delta dMvL puede ser calculado como dMvL1[ 0 ] = -dMvL0[ 0 ] y dMvL1 [ 1 ] = -dMvL0[ 1 ].
Los valores de muestra de luminancia de predicción son derivados por interpolación bilineal de muestra fraccional. En el proceso de decodificación de bloques interpredichos, un proceso de predicción de muestra de flujo óptico bidireccional puede o no ser aplicado. En caso de no aplicarse, entonces se aplica un proceso de predicción de muestra ponderada a segundas predicciones refinadas que se obtienen con base en vectores de movimiento refinado. Si se aplica el proceso de predicción de muestra de flujo óptico bidireccional, este recibe segundas predicciones obtenidas con base en vectores de movimiento refinados como una entrada y emite las predicciones finales.
Se puede utilizar un indicador para señalizar si se puede o no aplicar el proceso de predicción de muestra de flujo óptico bidireccional. Por ejemplo, se puede considerar una condición necesaria de que el indicador sea VERDADERO para que el proceso de predicción de muestra de flujo óptico bidireccional sea llevado a cabo. Sin embargo, esta condición necesaria puede no ser una condición suficiente para que el proceso de predicción de muestra de flujo óptico bidireccional sea llevado a cabo. Una condición suficiente puede ser que el indicador sea VERDADERO y el costo de emparejamiento antes descrito sea igual a o mayor que un umbral predefinido. Por ejemplo, el costo de emparejamiento puede ser determinado con base en la variable dmvrSad que especifica la suma mínima de diferencias absolutas de primeras predicciones.
Por otra parte, se puede considerar una condición suficiente para no llevar a cabo el proceso de predicción de muestra de flujo óptico pero llevando a cabo el proceso de predicción de muestra ponderada en caso que el indicador sea FALSO.
Además, se proporciona un dispositivo 1300 para uso en un codificador de imagen y/o un decodificador de imagen como se ilustra en la figura 11 que puede llevar a cabo el método de acuerdo con una realización de la presente invención descrita anteriormente. El dispositivo 1300, de acuerdo con esta realización ejemplar, comprende una unidad de vector de movimiento inicial 1310 que está configurada para obtener vectores de movimiento iniciales para un bloque actual. Además, el dispositivo 1300 comprende una unidad de predicción 1320 que está configurada para obtener primeras predicciones para un valor de muestra en el bloque actual con base en los vectores de movimiento iniciales. Además, el dispositivo 1300 comprende una unidad de cálculo de costo de emparejamiento 1330 que está configurada para calcular un costo de emparejamiento de acuerdo con las primeras predicciones. El dispositivo 1300 comprende una unidad de determinación de proceso de refinamiento de flujo óptico 1340 que está configurada para determinar si un proceso de refinamiento de flujo óptico debiera o no ser ejecutado, de acuerdo con al menos una condición preestablecida, al menos una condición preestablecida comprendiendo una condición respecto a si el costo de emparejamiento calculado es igual a o mayor que un umbral. Además, el dispositivo 1300 comprende una unidad de desempeño de proceso de refinamiento de flujo óptico 1350 que está configurada para ejecutar un proceso de refinamiento de flujo óptico para obtener una interpredicción final para el valor de muestra en el bloque actual, cuando se determina que el proceso de refinamiento de flujo óptico debiera ser ejecutado.
Operadores matemáticos
Los operadores matemáticos utilizados en esta solicitud son similares a aquellos utilizados en el lenguaje de programación C. Sin embargo, los resultados de las operaciones de división de entero y cambio aritmético son definidos de manera más precisa, y se definen operaciones adicionales, tal como exponenciación y división de valor real. Convenciones de numeración y conteo generalmente comienzan en 0, por ejemplo, "el primero" es equivalente al 0-avo, "el segundo" es equivalente al 1-er, etc.
Operadores aritméticos
A continuación se definen los siguientes operadores aritméticos:
Suma
Resta (como un operador de dos argumentos) o negación (como un operador de prefijo unario) Multiplicación, incluyendo multiplicación de matriz
Exponenciación. Especifica x a la potencia de y. En otros contextos, dicha anotación es utilizada para colocación de superíndice no destinado para interpretación como exponenciación.
División de entero con truncamiento del resultado hacia cero. Por ejemplo, 7 / 4 y -7 / -4 son truncados a 1 y -7 / 4 y 7 / -4 son truncados a -1.
Utilizado para denotar la división en ecuaciones matemáticas donde no se pretende que haya truncamiento o redondeo.
x Utilizado para denotar división en ecuaciones matemáticas donde no se pretende que haya truncamiento y o redondeo.
y
La suma de f( i ) con i tomando todos los valores enteros desde x hasta e incluyendo y.
Z f(,)
x % y Módulo. Recordatorio de x dividido entre y, definido únicamente para enteros x y con x>= 0 y y> 0.
Operadores lógicos
A continuación se definen los siguientes operadores lógicos:
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 igual a 0, evalúa al valor de y; de otra manera, evalúa al valor de z.
Operadores de Relación
A continuación se definen los siguientes operadores de relación:
> Mayor que
>= Mayor que o igual a
< Menor que
<= Menor que o igual a
= = Igual a
!= No igual a
Cuando se aplica un operador de relación a un elemento de sintaxis o variable a la que se ha asignado el valor "na" (no aplicable), el valor "na" es tratado como un valor distinto para el elemento de sintaxis o variable. El valor "na" es considerado no igual a algún otro valor.
Operadores por mapa de bits
A continuación se definen los siguientes operadores por mapa de bits:
& Por mapa de bits "y". Cuando opera en argumentos de entero, opera en una representación de complemento de dos del valor entero. Cuando opera en un argumento binario que contiene menor cantidad de bits que otro argumento, el argumento más corto es extendido agregando bits más significativos iguales a 0.
| Por mapa de bits "o". Cuando opera en argumentos de entero, opera en una representación de complemento de dos del valor entero. Cuando opera en un argumento binario que contiene menor cantidad de bits que otro argumento, el argumento más corto es extendido agregando bits más significativos iguales a 0.
A Por mapa de bits "exclusivo o". Cuando opera en argumentos de entero, opera en una representación de complemento de dos del valor entero. Cuando opera en un argumento binario que contiene menor cantidad de bits que otro argumento, el argumento más corto es extendido agregando bits más significativos iguales a 0.
x >> y Cambio aritmético a la derecha de una representación de entero de complemento de dos de dígitos binarios x por y. Esta función es definida únicamente para valores enteros no negativos de y. Bits cambiados a los bits más significativos (MSBs) como un resultado del cambio a la derecha tienen un valor igual al MSB de x antes de la operación de cambio.
x << y Cambio aritmético a la izquierda de una representación de entero de complemento de dos de dígitos binarios x por y. Esta función es definida únicamente para valores enteros no negativos de y. Bits cambiados a los bits menos significativos (LSBs) como un resultado del cambio a la izquierda tienen un valor igual a 0 Operadores de asignación
A continuación se definen los siguientes operadores aritméticos:
= Operador de asignación
+ Incremento, es decir,<x>+ es equivalente ax=x+ 1; cuando se utiliza en un índice de arreglo, evalúa al valor de la variable antes de la operación de incremento.
— Decremento, es decir,<x>- - es equivalente ax=x- 1; cuando se utiliza en un índice de arreglo, evalúa al valor de la variable antes de la operación de decremento.
+= Incremento por cantidad especificada, es decir, x = 3 es equivalente a x = x 3, y x = (-3) es equivalente a x = x (-3).
-= Decremento por cantidad especificada, es decir, x -= 3 es equivalente a x = x - 3, y x -= (-3) es equivalente a x = x - (-3).
Anotación de rango
La siguiente anotación se utiliza para especificar un rango de valores:
x = y..z x toma valores enteros iniciando desde y a z, inclusivo, con x, y, y z siendo números enteros y z siendo mayor que y.
Funciones matemáticas
Se definen las siguientes funciones matemáticas:
Abs(vx )'=(j-x ; x < 0_
Asin( x ) la función de seno inversa trigonométrica, operando en un argumento x que es el rango de -1.0 a 1.0, inclusivo, con un valor de salida en el rango de -n+2 a n+2, inclusivo, en unidades de radianes
Atan( x ) la función de tangente inversa trigonométrica, operando en un argumento x, con un valor de salida en el rango de -n+2 a n+2, inclusivo, en unidades de radianes
' Atan (9 ;<x > 0>
Atan (x) n -x < 0 && y >= 0
Atan2( y, x ) = Atan (y) - n ;<x < 0 && y < 0>
<0>
Techo(x ) el entero más pequeño mayor que o igual a x.
= Recorte3( 0, ( 1 << BitProfundidady ) - 1, x )
BitProfundidadc ) - 1, x )
x ; z < x
Recorte3( x, y, z ) = jy z > y
z de otra manera
Cos( x ) la función de coseno trigonométrica operando en un argumento x en unidades de radianes.
Piso( x ) el entero más grande menor que o igual a x.
íc d b - a >= d /2
ObtenerCurrMsb( a, b, c, d ) = jc - d a - b > d / 2
de otra manera
Ln( x ) el logaritmo natural de x (el algoritmo base-e, donde e es la constante base de logaritmo natural 2.718281 828...).
Log2( x ) el logaritmo base-2 de x.
Log10( x ) el logaritmo base-10 de x.
Min( x, y )<rx ; x <= y>
x > y
Redondeo( x ) = Signo( x ) * Piso( Abs( x ) 0.5 )
x > 0
Signo( x ) = j 0 x = = 0
x < 0
Sin( x ) la función de seno trigonométrica operando en un argumento x en unidades de radianes
Sqrt( x ) = Vx
Invertir( x, y ) = ( y, x )
Tan( x ) la función de tangente trigonométrica operando en un argumento x en unidades de radianes
Orden de precedencia de operación
Cuando un orden de precedencia en una expresión no es indicado explícitamente por el uso de paréntesis, aplican las siguientes reglas:
Operaciones de precedencia superior son evaluadas antes de cualquier operación de una precedencia inferior.
Operaciones de la misma precedencia son evaluadas en secuencia de izquierda a derecha.
La siguiente tabla especifica la precedencia de las operaciones de lo más alto a lo más bajo; una posición más elevada en la tabla indica una precedencia más elevada.
Para aquellos operadores que también son utilizados en el lenguaje de programación C, el orden de precedencia utilizado en esta Especificación es el mismo que aquel utilizado en el lenguaje de programación C.
Tabla: Precedencia de operación de los más alto (en la parte superior de la tabla) a lo más bajo (en el fondo de la
Descripción de texto de operadores lógicos
En el texto, una declaración de operaciones lógicas tal como se describiría matemáticamente en la siguiente forma: si( condición 0 )
declaración 0
además si ( condición 1 )
declaración 1
además /* comentario informativo sobre la condición remanente */
declaración n
se puede describir de la siguiente manera:
... de la siguiente manera / ... aplica lo siguiente:
- Si condición 0, declaración 0
- De otra manera, si condición 1, declaración 1
- De otra manera (comentario informativo sobre la condición remanente), declaración n
Cada declaración "Si ... De otra manera, si ... De otra manera, ..." en el texto se introduce con "... de la siguiente manera" o "... aplica lo siguiente" inmediatamente seguido por "Si ... ". La última condición de "Si ... De otra manera, si ... De otra manera, ..." siempre es un " De otra manera, ...". Declaraciones intercaladas "Si ... De otra manera, si ... De otra manera, ..." pueden ser identificadas emparejando "... de la siguiente manera" o "... aplica lo siguiente" finalizando con "De otra manera, ...".
En el texto, una declaración de operaciones lógicas tal como se describiría matemáticamente en la siguiente forma: si( condición 0a && condición 0b )
declaración 0
además si ( condición 1a | | condición 1b )
declaración 1
además
declaración n
puede ser descrito de la siguiente manera:
... de la siguiente manera / ... aplica lo siguiente:
- Si todas las siguientes condiciones son verdaderas, declaración 0:
- condición 0a
- condición 0b
- De otra manera, si una o más de las siguientes condiciones son verdaderas, declaración 1:
- condición 1a
- condición 1b
- De otra manera, declaración n
En el texto, una declaración de operaciones lógicas tal como se describiría matemáticamente en la siguiente forma: si ( condición 0 )
declaración 0
si ( condición 1 )
declaración 1
puede ser descrito de la siguiente manera:
Cuando condición 0, declaración 0
Cuando condición 1, declaración 1.
Aunque realizaciones de la invención han sido descritas principalmente con base en la codificación de vídeo, se debiera observar que realizaciones del sistema de codificación 10, el codificador 20 y el decodificador 30 (y de manera correspondiente el sistema 10) y las otras realizaciones aquí descritas también se pueden configurar para procesamiento o codificación de imágenes estáticas, es decir, el procesamiento o codificación de una imagen individual independiente de cualquier imagen precedente o consecutiva como en codificación de vídeo. En general solamente las unidades de inter-predicción 244 (codificador) y 344 (decodificador) pueden no estar disponibles en el caso en que la codificación de procesamiento de imagen esté limitada a una sola imagen 17. Todas las otras funcionalidades (también referidas como herramientas o tecnologías) del codificador de vídeo 20 y decodificador de vídeo 30 igualmente se pueden utilizar para procesamiento de imágenes estáticas, por ejemplo cálculo residual 204/304, transformada 206, cuantificación 208, cuantificación inversa 210/310, transformada (inversa) 212/312, partición 262/362, intra-predicción 254/354, y/o filtración de bucle 220, 320, y codificación entrópica 270 y decodificación entrópica 304.
Realizaciones, por ejemplo del codificador 20 y el decodificador 30, y funciones aquí descritas, por ejemplo con referencia al codificador 20 y el decodificador 30, pueden ser implementadas en hardware, software, firmware, o cualquier combinación de estos. Si se implementan en software, las funciones pueden ser almacenadas en un medio legible por computadora o transmitidas sobre el medio de comunicación como una o más instrucciones o código y ejecutadas por una unidad de procesamiento basada en hardware. Los medios legibles por computadora pueden incluir medios de almacenamiento legibles por computadora, lo cual corresponde a un medio tangible tal como medios de almacenamiento de datos, o medios de comunicación incluyendo cualquier medio que facilite la transferencia de un programa de computadora de un lugar a otro, por ejemplo, de acuerdo con un protocolo de comunicación. De esta manera, los medios legibles por computadora generalmente pueden corresponder a (1) medios de almacenamiento legibles por computadora tangibles los cuales son no-transitorios o (2) un medio de comunicación tal como una señal u onda portadora. Los medios de almacenamiento de datos pueden ser cualesquiera medios disponibles a los que se pueda tener acceso a través de una o más computadoras o uno o más procesadores para recuperar instrucciones, código y/o estructuras de datos para implementación de las técnicas descritas en esta divulgación. Un producto de programa informático puede incluir un medio legible por computadora.
A manera de ejemplo, y no limitación, dichos medios de almacenamiento legibles por computadora pueden comprender RAM, ROM, EEPROM, CD-ROM u otro almacenamiento de disco óptico, almacenamiento de disco magnético, otros dispositivos de almacenamiento magnético, memoria flash, o cualquier otro medio que pueda ser utilizado para almacenar un código de programa deseado en la forma de instrucciones o estructuras de datos y a las que se puede tener acceso a través de una computadora. También, cualquier conexión es determinada de manera apropiada un medio legible por computadora. Por ejemplo si las instrucciones son transmitidas desde un sitio Web, servidor, u otra fuente remota utilizando un cable coaxial, cable de fibra óptica, par torcido, línea de suscriptor digital (DSL), o tecnologías inalámbricas tal como infrarrojo, radio y microondas, entonces el cable coaxial, cable de fibra óptica, par torcido, DSL, o tecnologías inalámbricas tales como infrarrojo, radio, y microondas son incluidas en la definición de medio. Sin embargo, se debiera entender que los medios de almacenamiento legibles por computadora y los medios de almacenamiento de datos no incluyen conexiones, ondas de portadora, señales u otros medios transitorios, sino que más bien están dirigidos a medios de almacenamiento tangibles no transitorios. Disco (disk) y disco (disc), tal como aquí se utilizan, incluyen disco compacto (CD), disco láser, disco óptico, disco versátil digital (DVD), disco (disk) flexible y disco Blu-ray, donde los discos (disks) generalmente reproducen datos de forma magnética, mientras que los discos (discs) reproducen datos de manera óptica con láser. Combinaciones de lo anterior también se debieran incluir dentro del alcance de medios legibles por computadora.
Las instrucciones pueden ser ejecutadas por uno o más procesadores, tal como uno o más procesadores de señal digital (DSPs), microprocesadores de propósito general, circuitos integrados de aplicación específica (ASICs), arreglos lógicos programable en campo (FPGAs), u otros circuitos lógicos discretos o integrados equivalentes. Por consiguiente, el término “procesador” como aquí se utiliza se puede referir a cualquiera de la estructura anterior o cualquier otra estructura adecuada para implementación de las técnicas aquí descritas. Además, en algunos aspectos, la funcionalidad aquí descrita puede ser proporcionada dentro de los módulos de hardware y/o software dedicados configurados para codificación y decodificación, o incorporados en un códec combinado. También, las técnicas podrían ser completamente implementadas en uno o más circuitos o elementos lógicos.
Las técnicas de esta divulgación pueden ser implementadas en una amplia variedad de dispositivos o aparatos, incluyendo un equipo inalámbrico, un circuito integrado (IC) o un conjunto de ICs (por ejemplo, un conjunto de chips). Varios componentes, módulos o unidades se describen en esta divulgación para enfatizar aspectos funcionales de dispositivos configurados para ejecutar las técnicas divulgadas, pero no necesariamente requieren la realización a través de diferentes unidades de hardware. Más bien, como se describió antes, varias unidades se pueden combinar en una unidad de hardware de códec o pueden ser proporcionadas por un agrupamiento de unidades de hardware interoperativas, incluyendo uno o más procesadores como se describió antes, en conjunto con software y/o firmware conveniente.

Claims (10)

REIVINDICACIONES
1. Un método de codificación de vídeo, comprendiendo el método:
obtener un par de vectores de movimiento iniciales para un bloque actual;
obtener (1110) un primer conjunto de muestras predichas para las muestras en el bloque actual con base en el par de vectores de movimiento iniciales;
calcular (1120) un primer costo de emparejamiento de acuerdo con el primer conjunto de muestras predichas, en donde el primer costo de emparejamiento representa una suma de diferencias absolutas, SAD, entre dos bloques de predicción obtenidos utilizando el primer vector de movimiento inicial y el segundo vector de movimiento inicial respectivos del par de vectores de movimiento iniciales;
determinar (1130) si el bloque actual es elegible para ejecutar el refinamiento de vector de movimiento, MVR; si se determina que el bloque actual es elegible para ejecutar el MVR:
obtener (1140) un par de vectores de movimiento refinados y un segundo costo de emparejamiento correspondiente al par de vectores de movimiento refinados mediante la ejecución del MVR utilizando el par de vectores de movimiento iniciales;
obtener (1150) un segundo conjunto de muestras predichas para las muestras en el bloque actual utilizando un filtro de interpolación de K derivaciones que utiliza el par de vectores de movimiento refinados;
determinar (1160) si un proceso de refinamiento de flujo óptico debiera ser o no ejecutado, de acuerdo con al menos una condición preestablecida, al menos la condición preestablecida comprendiendo una condición respecto a si el segundo costo de emparejamiento es menor que un umbral;
ejecutar (1175) un proceso de refinamiento de flujo óptico para obtener una interpredicción final para el valor de muestra en el bloque actual, cuando se determina que el segundo costo de emparejamiento no es menor que el umbral;
en donde la ejecución del proceso de refinamiento de flujo óptico comprende: ejecutar el refinamiento de flujo óptico con base en el segundo conjunto de muestras predichas;
en donde únicamente cuando se determina que no se debería ejecutar el proceso de refinamiento de flujo óptico, se obtiene la interpredicción final mediante una suma ponderada del segundo conjunto de muestras predichas (1170).
2. El método de una de las reivindicaciones anteriores, en donde el primer conjunto de muestras predichas para las muestras en el bloque actual se obtienen con base en un primer filtro de interpolación.
3. El método de la reivindicación 2, en donde el primer filtro de interpolación es un filtro de interpolación bilineal.
4. El método de la reivindicación 1, en donde el filtro de interpolación de K derivaciones es un filtro de interpolación de 6 derivaciones u 8 derivaciones.
5. El método de una de las reivindicaciones anteriores, en donde el valor umbral se obtiene de acuerdo con el tamaño del bloque actual.
6. El método de una de las reivindicaciones anteriores, en donde el bloque actual es un bloque o sub-bloque de codificación.
7. El método de una de las reivindicaciones anteriores, que comprende además generar un bloque de interpredicción que comprende la interpredicción final para las muestras en el bloque actual.
8. Un codificador (20) que comprende un circuito de procesamiento para llevar a cabo el método de acuerdo con una cualquiera de las reivindicaciones 1 a 7.
9. Un decodificador (30) que comprende un circuito de procesamiento para llevar a cabo el método de acuerdo con una cualquiera de las reivindicaciones 1 a 7.
10. Un producto de programa informático que comprende un código de programa para ejecutar el método de acuerdo con una cualquiera de las reivindicaciones 1 a 7.
ES20759812T 2019-02-22 2020-02-21 Terminación temprana para el refinamiento de flujo óptico Active ES2965083T3 (es)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
IN201931007114 2019-02-22
PCT/CN2020/076178 WO2020169083A1 (en) 2019-02-22 2020-02-21 Early termination for optical flow refinement

Publications (1)

Publication Number Publication Date
ES2965083T3 true ES2965083T3 (es) 2024-04-10

Family

ID=72144773

Family Applications (1)

Application Number Title Priority Date Filing Date
ES20759812T Active ES2965083T3 (es) 2019-02-22 2020-02-21 Terminación temprana para el refinamiento de flujo óptico

Country Status (18)

Country Link
US (1) US11985320B2 (es)
EP (2) EP4243418A3 (es)
JP (2) JP7271697B2 (es)
KR (2) KR102616714B1 (es)
CN (3) CN118200560A (es)
AU (1) AU2020226553A1 (es)
BR (1) BR112021016270A2 (es)
CA (1) CA3128112A1 (es)
DK (1) DK3912352T3 (es)
ES (1) ES2965083T3 (es)
FI (1) FI3912352T3 (es)
HU (1) HUE063469T2 (es)
MX (1) MX2021009931A (es)
PL (1) PL3912352T3 (es)
PT (1) PT3912352T (es)
SG (1) SG11202107970QA (es)
WO (1) WO2020169083A1 (es)
ZA (1) ZA202106944B (es)

Families Citing this family (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
DK3912352T3 (da) 2019-02-22 2023-11-20 Huawei Tech Co Ltd Tidlig afslutning til forfinelse af optisk strøm
US12034967B2 (en) 2021-04-05 2024-07-09 Nvidia Corporation Superpixel generation and use
EP4364419A1 (en) * 2021-06-30 2024-05-08 Telefonaktiebolaget LM Ericsson (publ) Selective subblock-based motion refinement
WO2023277756A1 (en) * 2021-06-30 2023-01-05 Telefonaktiebolaget Lm Ericsson (Publ) Overlapped decoder side motion refinement
WO2023028965A1 (en) * 2021-09-02 2023-03-09 Nvidia Corporation Hardware codec accelerators for high-performance video encoding
US12039740B2 (en) * 2021-12-13 2024-07-16 Qualcomm Incorporated Vectorized bilinear shift for replacing grid sampling in optical flow estimation
TW202408242A (zh) * 2022-04-06 2024-02-16 聯發科技股份有限公司 隱式多通道解碼器端運動向量細化

Family Cites Families (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20040076333A1 (en) * 2002-10-22 2004-04-22 Huipin Zhang Adaptive interpolation filter system for motion compensated predictive video coding
US9350631B2 (en) 2013-09-30 2016-05-24 Broadcom Corporation Identifying flows causing undesirable network events
US9705808B2 (en) 2014-03-21 2017-07-11 Cisco Technology, Inc. Flow aware buffer management for data center switches
US10127644B2 (en) * 2015-04-10 2018-11-13 Apple Inc. Generating synthetic video frames using optical flow
KR20180043787A (ko) * 2015-08-23 2018-04-30 엘지전자 주식회사 인터 예측 모드 기반 영상 처리 방법 및 이를 위한 장치
AU2016316309B2 (en) * 2015-09-02 2019-01-24 Hfi Innovation Inc. Method and apparatus of decoder side motion derivation for video coding
WO2017036399A1 (en) * 2015-09-02 2017-03-09 Mediatek Inc. Method and apparatus of motion compensation for video coding based on bi prediction optical flow techniques
WO2017133661A1 (en) * 2016-02-05 2017-08-10 Mediatek Inc. Method and apparatus of motion compensation based on bi-directional optical flow techniques for video coding
US10084716B2 (en) 2016-03-20 2018-09-25 Mellanox Technologies Tlv Ltd. Flexible application of congestion control measures
US20180199057A1 (en) * 2017-01-12 2018-07-12 Mediatek Inc. Method and Apparatus of Candidate Skipping for Predictor Refinement in Video Coding
WO2018173895A1 (ja) * 2017-03-21 2018-09-27 シャープ株式会社 予測画像生成装置、動画像復号装置、および動画像符号化装置
WO2019001741A1 (en) * 2017-06-30 2019-01-03 Huawei Technologies Co., Ltd. MOTION VECTOR REFINEMENT FOR MULTI-REFERENCE PREDICTION
US11363293B2 (en) * 2017-07-03 2022-06-14 Vid Scale, Inc. Motion-compensation prediction based on bi-directional optical flow
US11750832B2 (en) * 2017-11-02 2023-09-05 Hfi Innovation Inc. Method and apparatus for video coding
CN113170171B (zh) * 2018-11-20 2024-04-12 北京字节跳动网络技术有限公司 组合帧间帧内预测模式的预测细化
DK3912352T3 (da) 2019-02-22 2023-11-20 Huawei Tech Co Ltd Tidlig afslutning til forfinelse af optisk strøm

Also Published As

Publication number Publication date
CN113383550A (zh) 2021-09-10
JP7508642B2 (ja) 2024-07-01
JP2023099561A (ja) 2023-07-13
WO2020169083A1 (en) 2020-08-27
HUE063469T2 (hu) 2024-01-28
US20210392334A1 (en) 2021-12-16
EP4243418A3 (en) 2023-10-25
JP7271697B2 (ja) 2023-05-11
CN114845102B (zh) 2023-07-07
MX2021009931A (es) 2021-09-21
KR20240000638A (ko) 2024-01-02
DK3912352T3 (da) 2023-11-20
JP2022521748A (ja) 2022-04-12
CN118200560A (zh) 2024-06-14
PT3912352T (pt) 2023-11-21
CA3128112A1 (en) 2020-08-27
ZA202106944B (en) 2022-09-28
EP3912352A4 (en) 2022-04-20
US11985320B2 (en) 2024-05-14
EP3912352B1 (en) 2023-09-06
EP4243418A2 (en) 2023-09-13
KR102616714B1 (ko) 2023-12-20
CN114845102A (zh) 2022-08-02
SG11202107970QA (en) 2021-08-30
FI3912352T3 (fi) 2023-11-30
EP3912352A1 (en) 2021-11-24
KR20210113384A (ko) 2021-09-15
AU2020226553A1 (en) 2021-08-19
PL3912352T3 (pl) 2024-02-26
BR112021016270A2 (pt) 2021-10-13

Similar Documents

Publication Publication Date Title
ES2965083T3 (es) Terminación temprana para el refinamiento de flujo óptico
ES2974160T3 (es) Decodificador de video y métodos
WO2020177696A1 (en) Use of extended samples during search in decoder-side motion refinement
BR112021008016A2 (pt) codificador, decodificador e métodos correspondentes para modo de fusão
US12015762B2 (en) DMVR using decimated prediction block
BR112021001813A2 (pt) método de processamento de vídeo, aparelho de processamento de vídeo, codificador, decodificador, mídia e programa de computador
JP2022535859A (ja) Mpmリストを構成する方法、クロマブロックのイントラ予測モードを取得する方法、および装置
BR112021013644A2 (pt) Codificador, decodificador e métodos correspondentes de adaptação de filtro de deblocagem
BR112021011723A2 (pt) Método e aparelho de predição intra e codificador, decodificador, programa de computador, mídia de armazenamento não transitória, e fluxo de bits
BR112021009911A2 (pt) codificador, decodificador e métodos correspondentes usando armazenamento de mv compacto
EP4376410A2 (en) Optical flow based video inter prediction
JP2024014927A (ja) インター予測方法および装置
CA3144797A1 (en) Method for computing position of integer grid reference sample for block level boundary sample gradient computation in bi-predictive optical flow computation and bi-predictive correction
BR112021009833A2 (pt) codificador, decodificador e métodos correspondentes para predição inter
ES2967663T3 (es) Método y aparato para el almacenamiento de información de movimiento
EP3981157A1 (en) Motion field storage optimization for the line buffer
BR112021000657A2 (pt) Método e aparelho de filtragem de interpolação para codificação preditiva, codificador, decodificador e produto de programa de computador
CN116647683A (zh) 量化处理方法和装置