ES3060652T3 - Adaptive loop filtering (alf) with non-linear clipping - Google Patents
Adaptive loop filtering (alf) with non-linear clippingInfo
- Publication number
- ES3060652T3 ES3060652T3 ES19813297T ES19813297T ES3060652T3 ES 3060652 T3 ES3060652 T3 ES 3060652T3 ES 19813297 T ES19813297 T ES 19813297T ES 19813297 T ES19813297 T ES 19813297T ES 3060652 T3 ES3060652 T3 ES 3060652T3
- Authority
- ES
- Spain
- Prior art keywords
- filter
- alf
- clipping
- luma
- sample
- 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
Links
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N19/00—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
- H04N19/10—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
- H04N19/102—Methods 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/117—Filters, e.g. for pre-processing or post-processing
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N19/00—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
- H04N19/10—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
- H04N19/102—Methods 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/132—Sampling, masking or truncation of coding units, e.g. adaptive resampling, frame skipping, frame interpolation or high-frequency transform coefficient masking
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N19/00—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
- H04N19/10—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
- H04N19/134—Methods 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/136—Incoming video signal characteristics or properties
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N19/00—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
- H04N19/10—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
- H04N19/134—Methods 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/136—Incoming video signal characteristics or properties
- H04N19/14—Coding unit complexity, e.g. amount of activity or edge presence estimation
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N19/00—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
- H04N19/10—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
- H04N19/169—Methods 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/17—Methods 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/176—Methods 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
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N19/00—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
- H04N19/10—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
- H04N19/169—Methods 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/182—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding the unit being a pixel
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N19/00—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
- H04N19/10—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
- H04N19/169—Methods 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/186—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding the unit being a colour or a chrominance component
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N19/00—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
- H04N19/42—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals characterised by implementation details or hardware specially adapted for video compression or decompression, e.g. dedicated software implementation
- H04N19/439—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals characterised by implementation details or hardware specially adapted for video compression or decompression, e.g. dedicated software implementation using cascaded computational arrangements for performing a single operation, e.g. filtering
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N19/00—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
- H04N19/70—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals characterised by syntax aspects related to video coding, e.g. related to compression standards
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N19/00—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
- H04N19/80—Details of filtering operations specially adapted for video compression, e.g. for pixel interpolation
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N19/00—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
- H04N19/80—Details of filtering operations specially adapted for video compression, e.g. for pixel interpolation
- H04N19/82—Details of filtering operations specially adapted for video compression, e.g. for pixel interpolation involving filtering within a prediction loop
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N19/00—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
- H04N19/85—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using pre-processing or post-processing specially adapted for video compression
- H04N19/86—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using pre-processing or post-processing specially adapted for video compression involving reduction of coding artifacts, e.g. of blockiness
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)
- Image Processing (AREA)
- Picture Signal Circuits (AREA)
Abstract
La presente invención proporciona un método para controlar un filtro de bucle adaptativo para una o más porciones de una imagen, el método comprende el control del filtrado en una primera muestra de una porción de imagen basado en uno o más valores de muestra vecinos del primer valor de muestra, donde el control utiliza una función no lineal que tiene una o más variables basadas en uno o más de los valores de muestra vecinos. (Traducción automática con Google Translate, sin valor legal)
Description
[0001] DESCRIPCIÓN
[0002] Filtrado de bucle adaptativo (ALF) con recorte no lineal
[0003] SECTOR DE LA INVENCIÓN
[0004] La presente invención se refiere a la codificación o decodificación de bloques de un componente de vídeo. Las realizaciones de la invención encuentran una utilización concreta, aunque no exclusiva, cuando se controla un filtro de bucle adaptativo.
[0005] ESTADO DE LA TÉCNICA ANTERIOR
[0006] Una codificación de vídeo incluye codificación de imagen (una imagen es equivalente a un solo cuadro de un vídeo). En la codificación de vídeo, algunas herramientas de codificación tales como una cuantificación de coeficientes de transformada o compensación de movimiento (que se realiza a menudo utilizando filtros de interpolación) a menudo introducen sesgos/efectos de distorsión (distorsiones que parecen sistemáticas o que, como mínimo, no son aleatorias en un contexto determinado). Con el fin de compensar dichos sesgos/artefactos, y de mejorar (o, como mínimo, mantener un buen nivel de) la eficiencia de codificación, se utilizan algunas herramientas de codificación específicas, denominadas post-filtros o filtros en bucle. Un filtro de desbloqueo (DeBlocking Filter, DBF), un filtro de desfase adaptativo de muestra (Sample Adaptive Offset, SAO) o un filtro de bucle adaptativo (Adaptive Loop Filter, ALF) son algunos ejemplos de dichas herramientas de codificación. Los filtros en bucle se aplican dentro de un bucle de codificación, de modo que el incremento de calidad de la imagen que proporcionan para un cuadro actual permite una mayor eficiencia de codificación para los cuadros siguientes que se codifican basándose en el actual. Por ejemplo, la cuantificación de coeficientes de DCT es eficiente para la compresión de vídeo pero, a menudo, introduce artefactos de bloqueo (sesgos) en los límites de bloques de muestras comprimidos. El filtro de desbloqueo reduce los efectos no deseables que surgen de dichos artefactos. El desbloqueo (utilizando el DBF) de un cuadro decodificado dentro del bucle de codificación (antes de que sirva como cuadro de referencia para la compensación de movimiento para otro cuadro) aumenta significativamente la eficiencia de codificación de la compensación de movimiento, en comparación con el desbloqueo del cuadro fuera del bucle de codificación (por ejemplo, justo antes de visualizarla, por ejemplo).
[0007] La presente invención se refiere, en concreto, al filtro de bucle adaptativo (ALF), que se aplica también como un filtro en bucle para reducir artefactos de compresión no deseables en cuadros/imágenes decodificadas. El ALF ha sido estudiado por los grupos de estandarización grupo de expertos de codificación de vídeo/grupo de expertos de imágenes en movimiento (VCEG/MPEG, Video Coding Experts Group/Moving Picture Experts Group), y se está considerando su utilización en el estándar de codificación de vídeo versátil (VVC, Versatile Video Coding), por ejemplo, en la tercera versión del software VVC Test Model (VTM-3.0 o VVC Draft, versión 3).
[0008] CARACTERÍSTICAS DE LA INVENCIÓN
[0009] Un objetivo de las realizaciones de la presente invención es abordar uno o varios problemas o inconvenientes de la codificación o decodificación de bloques de un componente de vídeo, mencionadas anteriormente. Aunque el ALF es una herramienta de codificación eficiente, su filtrado lineal es una solución subóptima para mejorar la calidad de la imagen. La presente invención permite el filtrado no lineal con ALF para mejorar su eficiencia y/o rendimiento.
[0010] El siguiente documento:
[0011] solicitud publicada de la Patente EP 2477403 A1 (de Samsung Electronics) da a conocer una técnica de filtrado de bucle adaptativo que prevé una clasificación de bloques de imagen dependiendo de sus características direccionales, seguida de un filtrado ALF compuesto que incluye una “parte lineal espacial” simple y una “parte direccional”. La parte direccional incluye opcionalmente un mapeo/filtrado no lineal que equivale a una aplicación de umbral simple, aplicada a la diferencia absoluta entre un píxel actual y sus píxeles vecinos. El propósito es evitar involucrar en el proceso de filtrado muestras vecinas con grandes diferencias.
[0012] Según aspectos de la presente invención, se dan a conocer un aparato/dispositivo, un procedimiento, un programa, un medio de almacenamiento legible por ordenador y una señal, tal como se expone en las reivindicaciones adjuntas. Otras características de la invención serán evidentes a partir de las reivindicaciones dependientes, y de la descripción.
[0013] BREVE DESCRIPCIÓN DE LOS DIBUJOS
[0014] Las realizaciones de la invención se describirán a continuación, solo a modo de ejemplo, y haciendo referencia a los siguientes dibujos, en los que:
[0015] Lafigura 1muestra dónde tiene lugar el ALF en un bucle de decodificación habitual de la VTM-3.0;
[0016] lafigura 2es un diagrama de flujo con una visión general de los elementos de sintaxis que están presentes en la VTM-3.0 para ALF;
[0017] lafigura 3-aes un diagrama de flujo que muestra las etapas para filtrar una componente de Croma, según una realización de la invención;
[0018] lafigura 3-bmuestra una forma de filtro y una disposición de coeficientes para un filtro de Croma, según una realización de la invención;
[0019] lafigura 4-aes un diagrama de flujo que muestra las etapas para filtrar una componente de Luma, según una realización de la invención;
[0020] lafigura 4-bmuestra una forma de filtro y cuatro posibles disposiciones de coeficientes para un filtro de Luma, según una realización de la invención;
[0021] lafigura 5es un diagrama de flujo con una visión general de los elementos de sintaxis modificados, según una realización de la invención;
[0022] lafigura 6es un diagrama de bloques de un filtro lineal en ALF en la VTM-3.0;
[0023] lafigura 7es un diagrama de bloques de un filtro no lineal, según una realización de la invención;
[0024] lafigura 8es un diagrama de bloques del filtro lineal obtenido cuando la parte no lineal del filtro en lafigura 7está deshabilitada, según una realización de la invención;
[0025] lafigura 9es un diagrama de flujo que muestra un proceso de codificación con ALF, según una realización de la invención;
[0026] lafigura 10es un diagrama de flujo que muestra las etapas de un procedimiento de codificación, según las realizaciones de la invención;
[0027] lafigura 11es un diagrama de flujo que muestra las etapas de un procedimiento de decodificación, según las realizaciones de la invención;
[0028] lafigura 12es un diagrama de bloques que muestra esquemáticamente un sistema de comunicación de datos en el que se pueden implementar una o varias realizaciones de la invención;
[0029] lafigura 13es un diagrama de bloques que muestra los componentes de un dispositivo de procesamiento en el que se pueden implementar una o varias realizaciones de la invención;
[0030] lafigura 14es un diagrama que muestra un sistema de cámara de red en el que se pueden implementar una o varias realizaciones de la invención;
[0031] lafigura 15es un diagrama que muestra un teléfono inteligente en el que se pueden implementar una o varias realizaciones de la invención;
[0032] lafigura 16-amuestra formas de filtro de rombo de 7x7 con un menor número de posiciones recortadas, según las realizaciones de la invención; y
[0033] lafigura 16-bmuestra formas de filtro de rombo de 5x5 con un menor número de posiciones recortadas, según las realizaciones de la invención.
[0034] DESCRIPCIÓN DETALLADA
[0035] Las realizaciones de la presente invención descritas a continuación se refieren a la mejora de la codificación y la decodificación de imágenes.
[0036] La invención se da a conocer en las secciones “ALF con una capacidad de filtrado no lineal” y “Semántica de datos del filtro de bucle adaptativo”.
[0037] La expresión “realización o realizaciones" se utiliza en toda la descripción. Cuando se refiere a una materia que no entra en el alcance de las reivindicaciones adjuntas, debe interpretarse como “ejemplo o ejemplos”. En esta memoria descriptiva, “señalización” puede referirse a insertar en (proporcionar/incluir/codificar en), o extraer/obtener (decodificar) de, una información de flujo de bits sobre uno o varios parámetros para controlar un filtro, por ejemplo, utilización, no utilización, habilitación o deshabilitación de un modo/esquema u otra información relacionada con el control del filtro.
[0038] En esta memoria descriptiva, el término “fragmento” se utiliza como ejemplo de una parte de imagen (otros ejemplos de dicha parte de imagen serían una tesela o un grupo de teselas, que es un grupo/conjunto de teselas). Se comprende que las realizaciones de la invención también pueden implementarse basándose en una parte de la imagen (por ejemplo, una tesela o un grupo de teselas), en lugar de un fragmento, y un parámetro/valor/sintaxis modificado adecuadamente, tal como una cabecera para la parte/tesela/grupo de teselas de la imagen (en lugar de una cabecera de fragmento), un tipo de una parte/tesela/grupo de teselas de la imagen (en lugar de un tipo de fragmento) y estadísticas para una parte de imagen/tesela/grupo de teselas de la imagen (en lugar de estadísticas de fragmento). Asimismo, se comprende que, en las realizaciones de la invención también se puede utilizar un conjunto de parámetros de adaptación (Adaptation
Parameter Set, APS) o una cabecera de tesela (grupo de teselas) para señalizar los parámetros de ALF (o información para utilizar filtrado ALF), en lugar de una cabecera de fragmento o un conjunto de parámetros de secuencia (Sequence Parameter Set, SPS). Cuando se utiliza el APS para señalizar los parámetros de ALF (o información para utilizar filtrado ALF), la cabecera del fragmento o la cabecera del grupo de teselas se puede utilizar para indicar qué APS se debe utilizar para obtener los parámetros de ALF (o información para utilizar filtrado ALF), por ejemplo, indicando un identificador de conjunto de adaptación (aps_id). También se comprende que cualquiera de un fragmento, un grupo de teselas, una tesela, una unidad de árbol de codificación (Coding Tree Unit, CTU)/unidad de codificación máxima (Largest Coding Unit, LCU), un bloque de árbol de codificación (Coding Tree Block, CTB), una unidad de codificación (Coding Unit, CU), una unidad de predicción (Prediction Unit, PU), una unidad de transformada (Transform Unit, TU) o un bloque de píxeles/muestras se puede denominar una parte de imagen.
[0040] También se comprende que: cuando un filtro o una herramienta se describe como “activo”, el filtro/herramienta está “habilitado” o “disponible para su utilización” o “utilizado”; cuando se describe como “inactivo”, el filtro/herramienta está “deshabilitado” o “no disponible para su utilización” o “no utilizado”; y una “clase” se refiere a un grupo, agrupación, categoría o clasificación de uno o varios elementos. Además, también se comprende que cuando un indicador se describe como “activo” significa que el indicador indica que el filtro/herramienta relevante está “activo”.
[0042] Filtro de bucle adaptativo (ALF)
[0044] Lafigura 1muestra dónde tiene lugar el ALF en un bucle de decodificación habitual de VTM-3.0. En101, se decodifica una parte de la imagen (por ejemplo, un fragmento), en unidades de una unidad de árbol de codificación (CTU: la unidad de codificación máxima en VVC, habitualmente de un tamaño de 128x128 muestras/píxeles). Una CTU se divide en bloques rectangulares, o unidades de codificación (CU), que se codifican utilizando un esquema/modo de predicción concreto y, a menudo, una codificación con pérdidas, de un bloque residual. Debido a la utilización de la codificación basada en bloques, los artefactos de bloqueo pueden ser visibles en los límites entre los bloques codificados. En102, la parte de imagen decodificada es procesada a continuación por el DBF para reducir/eliminar dichos artefactos. Habitualmente, para codificar el residuo (bloque) para una predicción de bloque, los valores del residuo son transformados utilizando una transformada de tipo DCT (con el fin de comprimir la energía del residuo en unos pocos coeficientes), y los coeficientes transformados se cuantifican para reducir el coste de codificación. Esta cuantificación a menudo introduce algunos artefactos de borde en los bloques reconstruidos (es decir, bloques en cuadros de referencia almacenadas en la memoria intermedia de cuadros106). En103, la parte de imagen de salida del DBF es procesada entonces por el filtro de SAO, que es útil para reducir algunos de estos artefactos con un bajo coste computacional. En104, la parte de imagen de salida del filtro de SAO es procesada a continuación por el ALF. El ALF puede reducir más los artefactos tales como los artefactos de borde ("ringing"), por ejemplo. El ALF tiene una capacidad de modelización de errores de orden superior, pero con un coste computacional más alto. La parte de imagen de salida del ALF se envía a continuación a una salida (por ejemplo, una pantalla o una interfaz de comunicación para comunicarse con la pantalla)105. También se puede colocar en una memoria intermedia de cuadros106(como una parte de un cuadro de referencia almacenado en la misma) para que se pueda utilizar para la predicción temporal (cuando se utilizan herramientas de predicción temporal). Es por esto que el DBF, el filtro de SAO y el ALF se denominan filtros “en bucle”. Un codificador puede deshabilitar algunos de los filtros en bucle de modo que en la decodificación se puedan omitir (es decir, no se realiza ningún filtrado y la salida de una etapa correspondiente a la herramienta deshabilitada es la misma que su entrada). Asimismo, en algunos casos, la parte de imagen procesada no está limitada a un fragmento, sino que puede ser un cuadro completo que contiene uno o múltiples fragmentos, con la posibilidad de aplicar los filtros a través de los límites de los fragmentos (si hay más de uno presente), para reducir el artefacto en dichos límites. Para imágenes de múltiples componentes (por ejemplo, una imagen en formato YCrCb), el procesamiento con DBF, filtro de SAO o ALF se aplica a cada componente individualmente y, posiblemente, de manera diferente (por ejemplo, utilizando un parámetro de filtrado diferente al del otro componente).
[0046] Lafigura 2muestra una visión general de los elementos de sintaxis que están presentes en VTM-3.0 para ALF. El conjunto de parámetros de secuencia (SPS) indica, mediante un indicador, si la herramienta ALF está activa (es decir, habilitada) para la secuencia de vídeo (201) y, si es así, la cabecera del fragmento indica si ALF está activo para el fragmento (202) y proporciona parámetros de filtro (203a207) para controlar el ALF. Cuando el ALF está activo en202, está activo, como mínimo, para la componente de Luma, y la cabecera del fragmento indica además si el ALF está activo para cada una de las componentes de Croma (203).
[0048] El ALF puede utilizar más de un filtro en una componente de Luma. Es decir, se puede utilizar más de una tabla de coeficientes de filtro porque diferentes configuraciones de filtro pueden compartir los mismos coeficientes de filtro (que se describirán más adelante). En el esquema de elementos de sintaxis del software VTM-3.0, estas diferentes configuraciones de filtro no son distinguibles individualmente, y los filtros con diferentes configuraciones se consideran como el mismo filtro. En la siguiente descripción, se utiliza la misma referencia a un solo filtro, excepto cuando se hacen referencias explícitas a diferentes tablas de coeficientes.
[0049] Esta compartición del filtro único en el esquema de elementos de sintaxis es una manera eficaz de reducir el número de bits asignados a los filtros mediante la consideración de que las estadísticas de la imagen filtrada son las mismas para configuraciones ortogonales rotadas y/o especulares: es decir, un filtro de referencia, diseñado para una configuración de muestra de referencia, se especifica como rotado y/o reflejado para filtrar configuraciones de muestras ortogonales y/o especulares. La cabecera del fragmento contiene el número de filtros de Luma codificados (204) (que es uno o varios).
[0050] Cuando se filtran muestras de Luma, el ALF clasifica (categoriza) localmente las muestras (según la configuración de las muestras vecinas) en una de veinticinco clases posibles (categorías/clasificaciones/grupos) para elegir un filtro (que está asociado con/asignado a esa clase/categoría/clasificación/grupo particular) para aplicar localmente a dichas muestras. En el presente documento se utilizan los términos clasificar “localmente” y aplicar “localmente”, porque las muestras se procesan en unidades de bloques (habitualmente 4x4 muestras, por ejemplo, en VTM-3.0) o en varias CU. El filtro de Luma elegido/seleccionado se señaliza a continuación en un flujo de bits, por ejemplo, utilizando un índice/información para identificar el filtro de Luma elegido. Cuando el número de filtros de Luma utilizados durante el proceso de codificación es mayor de uno, la cabecera del fragmento también contiene uno o varios índices para identificar/seleccionar dichos filtros de Luma (por ejemplo, índices para hasta veinticinco filtros utilizados para las veinticinco clases, correspondiendo cada índice a un filtro de Luma utilizado para una de dichas clases) (205). En el caso de que el número de filtros de Luma utilizados en el proceso de codificación sea uno, este único filtro de Luma se aplica a todas las clases.
[0051] Por lo tanto, la cabecera del fragmento contiene todos los coeficientes del filtro (o parámetros del filtro) para cada uno de los filtros de Luma (206) (es decir, una tabla de coeficientes para cada uno de los filtros de Luma utilizados durante el proceso de codificación) seguidos de los coeficientes de filtro para un filtro de Croma (207). Obsérvese que en VTM-3.0 las dos componentes de Croma comparten el mismo filtro de Croma cuando el ALF está activo (es decir, habilitado) para ambas componentes de Croma.
[0052] Cuando el ALF está activo, para cada una de las componentes en las que el ALF está activo, el filtrado se puede habilitar CTU por CTU. Dentro del flujo de bits codificado, para cada CTU, los datos de fragmento codificados incluyen un indicador codificado por entropía, por cada componente para el cual el ALF está activo, para indicar si el ALF está habilitado en la componente de esa CTU (208, 209y210) y, de este modo, si las muestras de dicha componente de dicha CTU tienen que ser filtradas utilizando el ALF o no. Este indicador se codifica utilizando una codificación aritmética binaria adaptativa al contexto (Context-Adaptive Binary Arithmetic Coding, CABAC).
[0053] En VTM-3.0, la señalización de los coeficientes para los filtros de Luma206se realiza de la siguiente manera:
[0054] [1] Primero se señaliza un ‘alf_coefficients_delta_flag’, indicando el indicador si algunos filtros pueden ser deshabilitados, y si ‘alf_coefficients_delta_flag’ es cero y si el número de filtros de Luma es mayor de 1, se señaliza un ‘coeff_delta_pred_mode_flag’, indicando que la codificación de los coeficientes del filtro utilizará predicción (lo que se describe con más detalle más adelante).
[0055] [2] En VTM-3.0, para codificar los coeficientes de Luma utilizando códigos de (exp-)Golomb, se utilizan 3 (2 para Croma) configuraciones de (exp-)Golomb. El único parámetro de la codificación (exp-)Golomb es el orden de (exp-)Golomb (a menudo designado como ‘k’). Cada configuración tiene un índice de (exp-)Golomb. Los parámetros para una codificación de (exp-)Golomb del coeficiente del filtro se señalizan utilizando un código de longitud variable (VLC) para el ‘orden mínimo’ de los códigos de (exp-)Golomb y, a continuación, para cada índice de (exp-)Golomb un indicador para señalizar si el orden de (exp-)Golomb se debe aumentar para dicho índice y para los siguientes (comenzando con el ‘orden mínimo’ para el primer índice).
[0056] [3] A continuación, si ‘alf_coefficients_delta_flag’ indica que algunos filtros están habilitados, se señaliza un indicador para cada filtro, indicando si ese filtro está deshabilitado (y, por lo tanto, no codificado), o no.
[0057] [4] A continuación, se señalizan los coeficientes del filtro para cada filtro (no deshabilitado) utilizando códigos de (exp-)Golomb (para enteros con signo) con el orden de (exp-)Golomb tomado con el índice de (exp-)Golomb asociado al índice del coeficiente del filtro (en una tabla fija) de la tabla que almacena los parámetros de (exp-)Golomb.
[0058] En el caso de que se señalice una ‘coeff_delta_pred_mode_flag’, este indica que la codificación de los coeficientes del filtro utiliza predicción. Esto significa que los coeficientes de filtro de un filtro ‘actual’ con un índice de filtro (es decir, un índice que identifica cada filtro) mayor o igual que uno se codifican como diferencias entre los coeficientes de filtro del filtro “actual” y los coeficientes de filtro de un filtro procesado anteriormente (por ejemplo, codificados como un valor del residuo del coeficiente de filtro utilizando los coeficientes de filtro del filtro procesado anteriormente como predictores de coeficientes de filtro, es decir, utilizando predicción). El primer filtro (con un índice de filtro cero) se codifica sin predicción.
[0059] La señalización del coeficiente del filtro de Croma 207 se realiza de manera similar a los filtros de Luma, excepto por que no hay ningún ‘alf_coefficients_delta_flag’, ni ningún ‘coeff_delta_pred_mode_flag’, y por que hay dos índices de (exp-)Golomb en lugar de 3.
[0061] Lafigura 3-aes un diagrama de flujo que muestra las etapas para filtrar una componente de Croma, según una realización de la invención, y lafigura 3-bmuestra una forma de filtro y una disposición de coeficientes para un filtro de Croma, según una realización de la invención.
[0063] En lafigura 3-a, el filtrado ALF se aplica de manera diferente entre las componentes de Luma y Croma. Comenzando con un caso simple, lafigura 3-amuestra las etapas principales para filtrar una componente de Croma. La parte de imagen de entrada301(por ejemplo, una tesela o un grupo de teselas) contiene las muestras de Croma que se van a filtrar. Los parámetros de filtrado de entrada302incluyen parámetros de ALF (por ejemplo, ‘alf_coefficients_delta_flag’, ‘coeff_delta_pred_mode_flag’, coeficientes de filtro, o cualesquiera otros indicadores o parámetros de filtro para el ALF) descritos haciendo referencia a los elementos de sintaxis de ALF en lafigura 2. Utilizando los coeficientes de filtro codificados para el filtro de Croma, el filtro de Croma se deriva/obtiene en303.
[0065] En una variante, el filtro de Croma tiene una forma/patrón/máscara/soporte de rombo de tamaño 5x5, es decir, 5 muestras de alto y 5 muestras de ancho (véase306en lafigura 3-b). Los coeficientes de filtro del filtro de Croma están organizados de modo que el filtro de Croma tenga una simetría con respecto al centro. Existen 6 coeficientes de filtro codificados para este filtro de Croma, con un índice numerado del 0 al 5, que se sitúan en las posiciones de coeficientes correspondientes mostradas en la figura. El signo de superíndice (“+” o “-”) para el número de índice se proporciona para que se pueda realizar una distinción entre diferentes posiciones de coeficientes que comparten el mismo coeficiente de filtro, es decir, cuando se refiere a dos vecinos simétricos (en el sentido de que comparten el mismo coeficiente de filtro):i+
corresponde a una muestra vecina con un índiceique se codifica/decodifica/procesa/almacena o a la que se accede después de la muestra a filtrar (es decir, en el centro de la forma/patrón/máscara/soporte del filtro) en un orden de escaneo (raster); ei-
corresponde a una muestra vecina con el índiceique se codifica/decodifica/procesa/almacena o a la que se accede después de la muestra a filtrar en el orden de escaneo (raster). El 7º coeficiente para el centro de la forma del filtro de Croma (la posición del coeficiente con un número de índice 6) se deduce/deriva de los otros coeficientes del filtro. El valor de este 7º coeficiente
[0066] en la posición 6 del coeficiente es igual a , evaluado con un cálculo de punto fijo (w<i>= coeficiente de filtro para el índice i). Es decir, una menos dos veces (debido a la simetría) la suma de todos los coeficientes de filtro para las posiciones de coeficientes 0 a 5. De este modo, la suma de todos los coeficientes de la forma de rombo, incluido el 7º coeficiente, es uno sobre el cual se aplica un desfase de 7 bits a la izquierda (1<<7), donde 7 es la precisión de bits de los coeficientes de filtro codificados menos uno para cálculos de punto fijo. Es por esto que solo la mitad de “el número total de coeficientes de filtro menos uno” es el número de coeficientes de filtro que se codifican en el flujo de bits.
[0068] Para cada muestra de componentes de Croma en la que el ALF está activo (es decir, se aplica), el filtrado en la etapa304se realiza de la siguiente manera para obtener una parte de imagen de salida305: para cada muestra actual de la parte de imagen de entrada,
[0070] - si la muestra actual pertenece a una CTU donde el ALF está habilitado, y si las muestras vecinas de la muestra actual necesarias para obtener los coeficientes de filtro para las posiciones de los coeficientes en la forma de rombo del filtro de Croma (estando la muestra actual posicionada en el centro de la forma de rombo) están disponibles (por ejemplo, utilizando una extensión de frontera en los límites de una imagen, o utilizando muestras de fragmentos vecinas si están disponibles en la frontera del fragmento); entonces, la muestra filtrada de salida, en la misma posición que la muestra actualI(x, y) en la posición (x, y), es igual a:
[0072] dondeiyjson dos desfases enteros (horizontal y vertical) con respecto al centro de la forma del filtro (es decir, la posición de la muestra actual en (x, y)),w(i, j) son los coeficientes del filtro en el desfase (i, j),N=7 es el número de bits para una aproximación entera de la parte decimal de los números reales (representación de punto fijo) utilizada en la representación de los coeficientes del filtrow(i, j) en el desfase (i, j),I(xi, y+j) son los valores de las muestras de entrada en el desfase (i, j) con respecto a la posición de la muestra actual (x, y),O(x, y) es el valor de la muestra filtrada de salida para la posición (x, y). a << N significa que se aplica un desplazamiento de bits a la izquierda de N bits al valor entero de a. Es equivalente a realizar una multiplicación entera por dos elevado a N.
[0074] a >> N significa que se aplica un desplazamiento de bits a la derecha de N bits al valor entero de a. En este caso, puesto que el resultado de la suma dentro del paréntesis de la ecuación (1) es positivo en la mayoría de los casos, esto es equivalente a realizar una división entera por dos elevado a N. Para los números negativos, el signo se propaga al desplazar a la derecha, por lo que un número negativo seguirá siendo
negativo (como mínimo -1). No hay ninguna parte no entera, porque la salida del ALF está, en general, recortada entre cero y dos elevado a la profundidad de bits, menos uno. N = 7 proporciona la precisión decimal fijada en VVC para el cálculo de ALF, pero se podrían utilizar otros valores en otras realizaciones. El efecto de añadir (1 << (N - 1)) antes de realizar el desplazamiento a la derecha >> N es un redondeo del resultado de punto fijo del producto escalar.
[0076] - En caso contrario, se emite el valor de la muestra actual en la misma posición en la que se encuentra (es decir, sin aplicar este ALF).
[0078] Según una variante de esta realización, para reducir el número de operaciones de multiplicación realizadas durante la implementación del filtro y para simplificar la notación, para un filtro de ALF con una forma de filtro que es simétrica con respecto al centro, la ecuación (1) se puede reformular de la siguiente manera:
[0080] dondeOn
es la muestra de salida en un índice/posición de orden de escaneo raster n. Un índice de orden de escaneo raster n, se refiere a un índice n que es un índice de muestra que aumenta de izquierda a derecha
[0081] en una fila de muestras, y a continuación aumenta con cada fila de muestras de arriba abajo. es la muestra de entrada en la misma posición n que la muestra de salida (y corresponde a la posición de la
[0082] muestra de entrada en el centro del filtro), es la i-ésima muestra de entrada vecina (en el orden de
[0083] escaneo de raster) de en la forma/patrón/máscara/soporte del filtro, con un orden de escaneo de raster
[0084] menor que n, e es la muestra de entrada vecina en una posición espacial especular de con respecto
[0085] a la posición central
. Por lo tanto, el hecho de que la forma sea simétrica con respecto al centro
[0086] significa que cuando está en la forma/patrón/máscara/soporte del filtro, también está en la misma forma/patrón/máscara/soporte del filtro. w<i>es el coeficiente del filtro asociado con las muestras de entrada
[0087] vecinas e , w<c>es el coeficiente del filtro para la muestra de entrada central , yces el número de coeficientes de filtro codificados (este es el mismo que un valor de índice para el coeficiente de filtro central, que no se codifica porque puede ser evaluado a partir de sus coeficientes de filtro vecinos). Los valores deiy
[0088] las posiciones asociadas de e corresponden a los valores de índice y a los valores de índice con su signo de superíndice (“+” o “-”) en la forma306de filtro de lafigura 3-b, por ejemplo, paracque es el índice del coeficiente de filtro en el centro de la forma de filtro, es i = c = “6”.
[0090] Lafigura 4-aes un diagrama de flujo que muestra las etapas para filtrar una componente de Luma, según una realización de la invención, y lafigura 4-bmuestra una forma de filtro y cuatro disposiciones de coeficientes posibles para el filtro de Luma, según una realización de la invención.
[0092] Lafigura 4-amuestra las etapas principales del proceso de filtrado para la componente de Luma. La parte401de imagen de entrada contiene las muestras de Luma que se van a filtrar. Los parámetros de filtrado de entrada402incluyen parámetros de ALF (por ejemplo, ‘alf_coefficients_delta_flag’, ‘coeff_delta_pred_mode_flag’, coeficientes de filtro, o cualquier otro indicador o parámetro de filtro para el ALF) descritos haciendo referencia a los elementos de sintaxis de ALF en lafigura 2. Antes del filtrado, el contenido de la parte de imagen se analiza en403. El objetivo principal de este análisis es permitir/habilitar la determinación de la orientación del contenido local y el nivel de actividad (véase la etapa405). Esto permite/habilita la estimación/evaluación local de si el contenido es homogéneo o tiene variaciones bruscas (aproximadamente la fuerza o el contraste del contenido), y de si el contenido tiene una orientación predominante (por ejemplo, basada en bordes o en texturas orientadas), y qué orientación es dicha orientación predominante. Por ejemplo, en VTM-3.0 el análisis comprende un análisis de gradiente local utilizando valores de laplaciana calculados para 4 orientaciones (horizontal, vertical y las dos diagonales) para cada dos muestras horizontal y verticalmente (es decir, en una cuarta parte de las muestras). Dividiendo las muestras de la parte de imagen de entrada en bloques404(por ejemplo, bloques de 4x4 muestras en VTM-3.0), y utilizando los resultados del análisis, en la etapa405cada bloque se clasifica en una de las 25 clases posibles, siendo cada clase identificable mediante un índice (es decir, el bloque se categoriza en una de las 25 categorías/clasificaciones/grupos) según los valores de Laplaciana calculados para las muestras en el bloque. Por ejemplo, en VTM-3.0 esto corresponde a la utilización de 16 valores de Laplaciana (4 orientaciones en 4 muestras). La clasificación consigue una partición de la actividad, de la fuerza de la directividad y disocia las orientaciones horizontal y vertical de las orientaciones diagonales. Además, en la etapa405, cada bloque se asocia con un índice de transposición. Este índice de transposición (por ejemplo, ‘transposeIdx’) puede verse como una información complementaria/adicional a la clasificación para representar/indicar completamente la orientación del contenido. Existen cuatro índices de transposición posibles. Cuando la clase del bloque indica que el bloque es horizontal o vertical, el índice de transposición
indica además si la orientación es de norte a sur, de este a oeste, de oeste a este o de sur a norte. Cuando la clase del bloque indica que el bloque es diagonal, el índice de transposición indica además si la orientación es de noroeste a sureste, de noreste a suroeste, de suroeste a noreste o de sureste a noroeste.
[0093] El índice de clase y el índice de transposición pueden verse como parámetros del filtro de bucle adaptativo para un bloque de muestras determinado. La etapa406toma estos parámetros para derivar el filtro de Luma que se utilizará para filtrar cada una de las muestras del bloque. Tal como se describió anteriormente haciendo referencia a lafigura 2, en402cada clase se asocia con un índice de una tabla de coeficientes de filtros de Luma. Para derivar el filtro de Luma para el bloque de 4x4, el índice de transposición permite/habilita seleccionar una de las cuatro formas/patrones409, 410, 411o412mostrados en lafigura 4-b. El patrón indica cómo organizar los coeficientes de filtro codificados (por ejemplo, basándose en un orden de escaneo), que se asocian con la clase del bloque tal como se explicó en la descripción para204a206, para construir el filtro de Luma. El filtro de Luma tiene una forma de rombo de tamaño 7x7. Existen 12 coeficientes de filtro codificados para cada filtro de Luma (números de índice 0 a 11). El 13-ésimo coeficiente para el centro de la forma del filtro (número de índice 12) se deduce/deriva de los otros coeficientes del filtro de la misma manera que para el coeficiente central del filtro de Croma descrito anteriormente.
[0094] El filtrado en la etapa407para obtener una parte de imagen de salida408se realiza de la misma manera en que el filtro de Croma realizó el filtrado, a saber, para cada bloque actual de muestras, el filtro de Luma derivado/obtenido en406para el bloque actual se aplica en cada muestra actual del bloque actual.
[0095] Cuando se filtran muestras de Luma, debido a la clasificación basada en la orientación (clase) y a la transposición asociada (transposeIdx), los filtros de ALF óptimos para cada clase (es decir, “filtros basados en la orientación” que se seleccionan según una orientación local, por ejemplo, basándose en gradientes locales), especialmente aquellos con una alta actividad (por ejemplo, gradientes locales altos), tienden a ser filtros orientados. Para una zona con una actividad más baja, es decir, una zona con bloques que pertenecen a una o varias clases donde los gradientes locales son relativamente pequeños, dicha orientación sería menos pronunciada y los filtros basados en la orientación para dicho bloque tienden a no ser un filtro orientado.
[0096] Los filtros basados en la orientación son adecuados para realiza un filtrado alrededor de los bordes sin afectar demasiado a la nitidez de los bordes. Tal como se describe a continuación, las clases se pueden agrupar para reducir el coste de señalización de los filtros. Incluso con este agrupamiento de clases, una optimización de filtro conducirá, en general, a obtener filtros orientados. Con dichos filtros (de ALF) basados en la orientación, cuando el gradiente local es a lo largo de una dirección horizontal, la orientación del filtro es, en general, vertical (es decir, los coeficientes más altos (en valor absoluto) estarán, en general, en posiciones por encima y por debajo del centro, mientras que los coeficientes a la izquierda y a la derecha del centro estarán, en general, más cerca de cero). De manera similar, cuando el gradiente local es a lo largo de una dirección vertical, la orientación del filtro es, en general, horizontal, y cuando el gradiente local es a lo largo de una dirección diagonal, la orientación del filtro es, en general, a lo largo de una dirección que es perpendicular a dicha dirección diagonal del gradiente local.
[0097] Cuando se filtran muestras de Croma en VTM-3.0, en contraste con el filtrado de muestras de Luma, debido a que no se utiliza ninguna clasificación (y puesto que el Croma suele ser suave), los filtros utilizados responden mejor, en general, a todas las orientaciones, y no son un filtro orientado (o no son un filtro basado en la orientación).
[0098] Tanto en lafigura 3-bcomo en lafigura 4-b, las formas de los filtros son simétricas con respecto al píxel central. Esta simetría ha sido elegida en el diseño del ALF en el software VTM pero, en una variante de las realizaciones, también se podría utilizar una forma no simétrica. A continuación, en lugar de compartir 7 coeficientes para 13 muestras de entrada, se podrían utilizar hasta 13 coeficientes para el mismo soporte/máscara de filtro que en lafigura 3-b. Y, en lugar de compartir 13 coeficientes para 25 muestras de entrada, se podrían utilizar hasta 25 coeficientes para el mismo soporte/máscara de filtro que en lafigura 4-b. En otras variantes, incluso el soporte/máscara del filtro no es simétrico. En variantes, la forma/patrón/soporte/máscara del filtro se transmiten con los parámetros de ALF.
[0099] En otras variantes, la forma/patrón/soporte/máscara del filtro es diferente de una forma de rombo. Por ejemplo, en una variante es un cuadrado, en otra variante es un rectángulo, en otra variante más es un hexágono, y en otra variante es un octógono.
[0100] En algunas variantes, la forma/patrón/soporte/máscara del filtro no es la misma para todas las orientaciones de clase. En una variante, la forma es un rectángulo horizontal (por ejemplo, “-”) para las configuraciones de orientación de clase/transposeIdx horizontales, un rectángulo vertical (por ejemplo, “|”) para las configuraciones de orientación de clase/transposeIdx verticales, un rectángulo Noroeste-Sureste (NO-SE, por ejemplo, “\”) para las configuraciones de orientación de clase/transposeIdx NO-SE y SE-NO, y un rectángulo Noreste-Suroeste (NE-SW, por ejemplo, “/”) para las configuraciones de orientación de clase/transposeIdx
NE-SO y SO-NE. En otras variantes, la forma/patrón/soporte/máscara del filtro es una cruz horizontal-vertical (“+”), una cruz diagonal (“X”), un segmento vertical (“|”), un segmento horizontal (“-”), un segmento diagonal desde la parte superior izquierda a la inferior derecha (“\”), un segmento diagonal desde la parte superior derecha a la inferior izquierda (“/”), o cualquier combinación de las formas/patrones/soportes/máscaras de filtro mencionados anteriormente.
[0102] Lafigura 6muestra un diagrama de bloques de un filtro lineal en ALF. Corresponde a una implementación de ejemplo de un ALF cuyo filtrado corresponde funcionalmente a la ecuación (1), correspondiendo ‘C’601aI(x, y), que es el valor de muestra de la muestra actual, correspondiendo ‘S0’602a ‘Sn’603aI(x i, y j) para cada , que son valores de muestras vecinas, correspondiendo ‘wC’604a w (0,0), que es el coeficiente de filtro para la muestra actual, correspondiendo ‘w0’605a ‘wn’606aw(i, j) para cada , que son coeficientes de filtro para las muestras vecinas en la posición (x i, y j), y correspondiendo ‘O’607aO(x, y), que es la salida del filtro de ALF, es decir, el valor de la muestra filtrada de la muestra actual. El proceso toma, como entradas, una tabla de valores enteros de muestras de entrada (es decir, ‘C’ y ‘S0’ a ‘Sn’) y una tabla de pesos de entrada, es decir, ‘wC’ y ‘w0’ a ‘wn’ (o coeficientes de filtro; nótese que esta tabla tiene el mismo número de elementos que la tabla de valores enteros de muestras de entrada) en una representación entera de un número real con una precisión de punto fijo. Las dos tablas tienen el mismo número de elementos y se multiplican elemento por elemento, y el resultado de esas multiplicaciones se suma (es decir, se obtiene una combinación lineal de los elementos de dichas dos tablas). El resultado de esta operación es una aproximación con precisión de punto fijo de un número real. Este valor de punto fijo se redondea a un valor entero, cuyo resultado es el valor de la muestra de salida ‘O’.
[0104] Desde el punto de vista de un codificador, el ALF se inspira en los filtros de Wiener. Un filtro de Wiener es un filtro lineal (a menudo aplicado como un filtro de convolución lineal en el procesamiento de señales/imágenes), que minimiza el error cuadrático medio entre: 1) un proceso/variable aleatorio estimado (su salida), que es una combinación lineal de un número finito de procesos/variables observados (sus entradas), y 2) un proceso/variable deseado (su objetivo, es decir, la imagen original antes de que ocurrieran los artefactos). En el procesamiento de señales/imágenes, un filtro de Wiener de respuesta finita al impulso (Finite Impulse Response, FIR) tiene aplicaciones en la separación de fuentes o en la eliminación de ruido, por ejemplo. En el caso de codificación de imágenes, el objetivo es la imagen original (antes de ser alterada por compresión/cuantificación), mientras que las entradas son muestras de la imagen comprimida que se desea mejorar aplicando el filtro.
[0106] La solución de mínimos cuadrados paraX(que es una matriz de entrada de realizaciones de los procesos aleatorios observados, conteniendo cada columna una realización para cada uno de los procesos aleatorios) ey(que es un vector fila de salida que contiene la realización del proceso deseado para el proceso aleatorio observado en el mismo índice de columna) es:
[0108]
[0111] Los coeficientes del filtro de Wiener corresponden a .
[0113] Se comprende que una ‘realización’ es una observación o un valor observado de una variable aleatoria, es decir, el valor que se observa realmente en la práctica.
[0115] En un codificador de ALF de VTM-3.0, los filtros de FIR de Wiener (o soluciones de mínimos cuadrados funcionalmente equivalentes) se utilizan para optimizar el compromiso tasa/distorsión (Rate/Distortion, R/D) entre el coste de codificación de los parámetros de ALF (que está dominado principalmente por el coste de codificación de los coeficientes del filtro de FIR) y las ganancias de distorsión obtenidas filtrando una imagen utilizando los parámetros de ALF codificados (es decir, utilizando los filtros de FIR). Si la tasa para codificar los parámetros de ALF (es decir, el coste de codificación) no fuera una preocupación, y si maximizar la relación de señal a ruido de pico máxima (Peak Signal to Noise Ratio, PSNR) de un cuadro determinada fuera el único objetivo (sin considerar impactos temporales), los filtros de Wiener permitirían conseguir una solución óptima para el diseño del filtrado de ALF en VTM-3.0. Por lo tanto, un codificador de ALF según una realización de la invención puede utilizar el mismo filtro o uno similar a un filtro de ALF lineal proporcionado con el mismo.
[0117] Lafigura 9muestra un diagrama de flujo que muestra un proceso de codificación de ALF, según una realización de la invención, implementándose la realización mediante la modificación del ALF de VTM-3.0 descrito haciendo referencia a lafigura 6. Se comprende que, según otras realizaciones de la invención, se puede modificar otro ALF de la misma manera para implementar dichas otras realizaciones.
[0119] Un proceso de codificación de ALF comienza determinando un índice de clase y un índice de transposición para cada bloque de 4x4 muestras de luma901.
[0120] A continuación, en902se extraen/obtienen las estadísticas que se utilizarán para derivar los filtros de Wiener. Estas estadísticas son estadísticas de (auto)covarianza que corresponden a en la ecuación (3), y estadísticas de covarianza cruzada que corresponden a en la ecuación (3). Se utilizan para construir/obtener/estimar matrices de (auto)covarianza y matrices de covarianza cruzada, dividiendo respectivamente y por N (el número de columnas en X, es decir, el número de muestras a filtrar). Estas matrices de (auto)covarianza y matrices de covarianza cruzada se construyen/obtienen/estiman para cada clase y para cada CTU de muestras de la componente de Luma, y para cada CTU de cada muestra902de las componentes de Croma. En la siguiente descripción, los términos “estadísticas de matriz de (covarianza cruzada)” y “matriz de (covarianza cruzada)” se utilizan de manera intercambiable para referirse a lo mismo. Se comprende que la diferencia entre ambos es que las “estadísticas de matriz de (covarianza cruzada)” se obtienen acumulando (o sumando) valores, mientras que la “matriz de (covarianza cruzada)” también se obtiene acumulando (o sumando) valores pero, a continuación, se normaliza por el número de acumulaciones (para estimar un valor esperado).
[0122] Para una CTU/clase/componente determinada, X se obtiene de la siguiente manera. Puesto que se considera que la forma de los filtros es simétrica, el número de filas enXcorresponde al número de coeficientes de filtro del filtro. Una fila (la última) deXcontiene las realizaciones de la muestra central en la forma del filtro (donde el centro de la forma del filtro pertenece a la CTU/clase/componente determinada), mientras que cada una de las otras filas, con índicei, contiene la suma de las dos muestras simétricas con índiceien la forma del filtro (donde las muestras simétricas son vecinas del centro de la forma del filtro que pertenece a la CTU/clase/componente determinada). En el caso de las muestras de la componente de Luma, el índice de transposición también se utiliza para transponer las posiciones de las muestras de la forma del filtro según las diferentes formas de lafigura 4-b, de modo que cada filaideXcontiene las estadísticas de muestra para las muestras que pertenecen a la forma del filtro con índicei. Por ejemplo, para las formas de lafigura 4-b, Xi,jcontiene: parai< 12, la suma de los dos vecinos simétricos (de laj-ésima muestra filtrada) con índiceien la forma, y parai= 12, laj-ésima muestra filtrada; donde Xi,es el valor en la matrizXen la filaiy la columnaj.
[0123] El vectorycontiene todos los valores de las muestras objetivo (es decir, yjes el valor de laj-ésima muestra en la imagen fuente/original antes de su compresión).
[0125] La matrizXno se construye/calcula realmente. En su lugar,
se calcula sumando iterativamente el resultado de , donde Xies lai-ésima columna deXobtenida para una posición de muestra determinada.
[0126] El vectorytampoco se construye/calcula realmente. En su lugar,
se calcula sumando iterativamente el resultado de , donde Yies eli-ésimo elemento dey, y corresponde al valor de la muestra objetivo cuando se filtra lai-ésima muestra de entrada utilizando la entrada Xi.
[0128] En VTM-3.0, un codificador de ALF intenta reducir el coste de R/D, que es igual aD+λR para la optimizaciσn lagrangiana del compromiso de tasa-distorsión. En este caso,Des la distorsión (error cuadrático),Res la tasa, yλes determinada por el codificador principalmente basándose en el parámetro de cuantificación (Quantization Parameter, QP) del codificador de VTM-3.0, en el tipo de fragmento (intra o inter), y en el tipo de componente comprimido (Luma o Croma). El codificador de ALF primero intenta optimizar los parámetros de ALF minimizando este coste lagrangiano de R/D.
[0130] Si el ALF reduce el coste para la componente de Luma, es decir, si la distorsión del fragmento de salida cuando el ALF no está activo es mayor que la distorsión cuando el ALF está activo másλveces la tasa necesaria para señalizar los parámetros de ALF, entonces el codificador determina el ALF como activo para la componente de Luma. A continuación, si está activo para la componente de Luma, intenta optimizar los parámetros de ALF para las componentes de Croma, para ver si puede mejorar el coste de R/D de la señalización de dichas componentes de Croma. Basándose en esto, el codificador puede determinar si es mejor activar/habilitar el ALF para cada una de dichas componentes o no.
[0132] Según una realización de la invención, el codificador de ALF realiza el mismo proceso de optimización, o uno funcionalmente equivalente, para sus parámetros de ALF. Según una variante de dicha realización, al principio del proceso de optimización de los parámetros de ALF, el ALF se establece como activo para todas las CTU903. Las estadísticas a nivel de fragmento para construir las matrices de covarianza y las matrices de covarianza cruzada se obtienen agregando las estadísticas de cada CTU donde el ALF está activo/habilitado. Se calcula una matriz para cada clase para la componente de Luma904, utilizando las estadísticas obtenidas para todas las muestras de los bloques de 4x4 muestras clasificados como pertenecientes a esa clase; y se calcula una matriz agregando (sumando) las estadísticas de las dos componentes de Croma para el Croma912.
[0133] El proceso de optimización del filtro para Luma comienza buscando 25 grupos de filtros para combinar/fusionar clases entre sí, a saber, un primer grupo de 25 filtros, un segundo grupo de 24 filtros, y así sucesivamente, hasta un último grupo de 1 filtro (un grupo para cada número posible de filtros)905. El codificador comienza con un filtro para cada clase (por lo tanto, 25 filtros en total), que es el filtro de Wiener calculado a partir de la covarianza y la covarianza cruzada de las muestras de los bloques de esa clase. Este es el primer grupo de 25 filtros. Intenta reducir iterativamente el número de filtros (uno por uno, y hasta que solo quede uno, para obtener todos los grupos deseados) fusionando los filtros entre sí, es decir, fusionando las clases asociadas a los filtros, para ser más precisos. El codificador hace que las clases asociadas inicialmente con dos filtros diferentes compartan un filtro común (es decir, el codificador fusiona las dos clases para compartir un filtro asociado). Para determinar qué filtros fusionar (es decir, qué clases fusionar), se determinan las estadísticas de covarianza y covarianza cruzada para cada filtro. El codificador estima/evalúa, para cada filtro asociado con una o varias clases (índices), el error residual total obtenido tras utilizar el filtro para realizar el filtrado en todos los bloques de muestras asociados con esa o esas clases. A continuación, para cada par de filtros (y sus clases asociadas), el codificador calcula las estadísticas de covarianza y covarianza cruzada fusionadas para determinar el filtro de Wiener para las clases fusionadas y el error residual total obtenido tras filtrar todos los bloques de muestras asociados con el índice de las clases con el filtro de Wiener determinado. A continuación, el codificador determina dos filtros para los que la diferencia entre el error residual total del filtro fusionado (derivado de las estadísticas asociadas con la una o varias clases, que están asociadas con los dos filtros) y la suma del error residual total de esos dos filtros (añadiendo el error residual total de un filtro al de otro) es la más pequeña, y fusiona esos dos filtros (de modo que este filtro fusionado esté listo para las siguientes iteraciones de fusión de filtros). En resumen, el codificador fusiona (a, b), un par de estadísticas de filtro diferentes que minimiza:
[0135] ,dondeErr(x) devuelve el error para las estadísticas de filtro x, y a b son las estadísticas fusionadas de las dos estadísticas de filtro a y b.
[0137] Hasta aquí, las estadísticas, los filtros y los errores se estiman utilizando valores de punto flotante de doble precisión. Ahora el codificador intenta encontrar el mejor compromiso de coste de R/D para codificar los filtros de Luma906. Una vez que se determinan los 25 grupos de filtros/clases (empezando por 25 filtros hasta 1 filtro), para cada grupo el codificador de ALF deriva coeficientes de filtro enteros (para una codificación de valor entero y cálculos de precisión de punto fijo) para cada filtro. A continuación busca el mejor filtro en términos de compromiso de coste de R/D cuando se utilizan diferentes esquemas de codificación alternativos. Una primera alternativa es codificar todos los coeficientes de todos los filtros utilizando una codificación (exp-)Golomb. Una segunda alternativa es utilizar la codificación delta de los filtros, en la que los coeficientes de filtro de cada filtro se codifican como diferencia con los coeficientes de filtro del filtro anterior (utilizando codificación (exp-)Golomb). Una tercera alternativa (optimizada para R/D) permite deshabilitar algunos filtros con un indicador y codifica todos los coeficientes de filtro (utilizando codificación (exp-)Golomb) de los filtros que no están deshabilitados. Las dos primeras alternativas pueden conducir a una reducción de la tasa de bits, mientras que la tercera podría conducir a más distorsiones a cambio de una menor tasa de bits.
[0139] El codificador toma/selecciona/elige el grupo de filtros y el compromiso de codificación que minimizan el coste de R/D.
[0141] Una vez que el codificador determina/selecciona los filtros de Luma para su utilización, para cada CTU, el codificador utiliza las estadísticas de la CTU para ver si el coste de R/D de filtrar las muestras de Luma de la CTU es mejor que el coste de R/D de no filtrar las muestras de Luma de la misma CTU. Si no es mejor, el ALF se deshabilita para las muestras de Luma de dicha CTU 907. El codificador puede entonces volver a la etapa de optimización del filtro de Luma en908para luma, mientras actualiza las estadísticas del fragmento sobre las estadísticas de covarianza y covarianza cruzada de la CTU (para la cual el ALF está habilitado)904. Por ejemplo, en VTM-3.0, el codificador repite el bucle 4 veces más.
[0143] Dependiendo de la diferencia de coste de R/D entre aplicar el ALF en la muestra de la componente de Luma o no, el codificador determina si el ALF debe estar activo/habilitado para la componente de Luma o no en909.
[0145] Si el ALF va a estar activo/habilitado para la componente de Luma, el codificador procede a procesar la una o varias componentes de Croma en910. Si el ALF va a estar inactivo/deshabilitado para la componente de Luma, el ALF se señaliza como no activo/deshabilitado en911y el proceso de codificación de ALF finaliza.
[0146] El proceso de codificación de ALF para la componente de Croma comienza con unas estadísticas combinadas de las dos componentes de Croma912, siempre que el ALF esté activo/habilitado para todas las CTU del fragmento.
[0148] A continuación, el codificador determina el filtro de Croma913. El codificador determina primero un filtro de Wiener (en punto flotante) utilizando las estadísticas de la CTU de ambas componentes de Croma. Deriva coeficientes de filtro enteros. A continuación, para cada componente de Croma, el codificador utiliza las
estadísticas de la CTU para ver si el coste de R/D de filtrar la componente de Croma de la CTU es mejor que el coste de R/D de no filtrar la componente de Croma de la CTU. Si no es mejor, el ALF se deshabilita para las muestras de la componente de Croma de dicha CTU914. Si el codificador determina que el ALF no debe estar activo (es decir, debe ser deshabilitado) para todas las CTU de una componente de Croma determinada, deshabilita el ALF en dicha componente de Croma y, por lo tanto, no necesita codificar para cada CTU el ‘indicador de habilitación’ que es 0,915.
[0149] El codificador puede entonces volver a la etapa de optimización del filtro de Croma en916mientras actualiza las estadísticas del fragmento sobre las estadísticas de covarianza y covarianza cruzada de las componentes de Croma para la CTU (para la que el ALF está habilitado). Por ejemplo, en VTM-3.0, el codificador repite el bucle 2 veces más.
[0150] El codificador aplica entonces el ALF según una realización de la invención en917con los parámetros de ALF determinados (es decir, utilizando el filtro de Croma determinado en la etapa913). Dependiendo de la configuración del codificador, la imagen resultante puede ser emitida y/o colocada en la memoria intermedia de cuadros de referencia. El codificador codifica finalmente los parámetros de mejor coste de R/D, concretamente el indicador de habilitación de ALF y, si el indicador de habilitación de ALF indica activo/habilitado, los parámetros de ALF determinados918.
[0151] Se comprende que, según variantes, se puede realizar un proceso de optimización para otros parámetros de ALF con el fin de optimizar dichos parámetros del ALF.
[0152] ALF con capacidad de filtrado no lineal
[0153] El filtrado lineal utilizado en las etapas304y407se puede modificar según realizaciones de la invención, las cuales introducen no linealidad y mejoran los resultados del filtrado (obteniendo un mejor compromiso entre la calidad del filtrado y la eficiencia de la codificación). El objetivo del filtrado ALF es eliminar parte del “ruido” introducido por las herramientas de codificación (por ejemplo, el ruido/error de cuantificación). Para eliminar dicho ruido, suelen utilizarse filtros lineales de paso bajo para suavizar la señal y reducir las pequeñas variaciones locales. Este tipo de filtros pueden introducir desenfoque en la salida filtrada, especialmente en zonas en las que el contraste es fuerte, cerca de los bordes, por ejemplo. Los filtros no lineales, tal como un filtro bilateral, por ejemplo, se han desarrollado para permitir una eliminación de ruido más eficaz, introduciendo al mismo tiempo menos efectos de desenfoque o de artefactos de borde, incluso alrededor de los bordes. Para ello, estos filtros no lineales suelen basarse en el filtrado de una muestra basándose en su vecindad local (es decir, las muestras vecinas), al igual que los filtros lineales, pero prestan más atención (o peso) a las muestras que tienen valores similares a la muestra que se va a filtrar que a las muestras que tienen valores muy diferentes. La ponderación de los valores vecinos se realiza a menudo mediante funciones no lineales (es decir, mapeos no lineales). Este tipo de filtros no lineales suelen ser más complejos que los filtros lineales, y puede resultar difícil optimizar sus parámetros, y/o pueden tener menos flexibilidad que los filtros lineales si se desea utilizar este tipo de filtros en un nuevo diseño de ALF.
[0154] Según una realización de la invención, se modifica un ALF de VTM-3.0 (o de cualquiera de las realizaciones mencionadas o variantes de las mismas) introduciendo una no linealidad con una complejidad relativamente baja que implica operaciones que conservan el diseño paralelizable del ALF.
[0155] Observando el ALF en VTM-3.0, reformulando la ecuación (1) utilizando números reales para simplificar la ecuación, se obtiene (eliminando las operaciones relacionadas con una representación de punto fijo y un redondeo de enteros):
[0157] Para este ALF, se cumple la condición:
[0159] Esto significa que la suma de todos los coeficientes del filtro del ALF es uno. Entonces se puede ver que la ecuación (4) puede ser reformulada como:
[0161] Por lo tanto, la muestra de salidaO(x, y) es el resultado de sumar la muestra de entradaI(x, y) (en la misma ubicación) a un producto escalar entre un vector de coeficientes de filtro y un vector de gradiente local (un vector de gradientes locales calculados como diferencias entre las muestras vecinas de la muestra de entrada y la propia muestra de entrada). En otras palabras, la muestra de salida (es decir, el valor de la
muestra filtrada) es el resultado de añadir a la muestra de entrada una combinación lineal de los coeficientes del filtro y los gradientes locales.
[0162] En lugar de utilizar esta formulación lineal habitual para el filtro, según una realización de la invención, se modifica el proceso de filtrado ALF para introducir una no linealidad en los filtros de ALF. Esta no linealidad se consigue utilizando una función de varias variablesK(d, b) que toma un gradiente local d en el desfase (i, j) como primer parámetro y varía su valor dependiendo de un segundo parámetro b = k (i, j). En lugar de utilizar los gradientes locales para los desfases (i, j) en el producto escalar de la ecuación (6), se utilizaK(d, b) en el producto escalar, lo que da como resultado una muestra de salidaO(x, y) que varía de manera no lineal con el gradiente local:
[0164] dondeK(d, b) es una función que toma como su primer parámetro/variabled=I(x i, y j) –I(x, y) (el gradiente local en el desfase (i, j) calculado como la diferencia entre el valor de la muestra vecina en la posición (x i, y j) y el valor de la muestra actual en la posición (x, y)), y como su segundo parámetro/variable b =k(i, j) (un parámetro de filtrado adicional). Los parámetros de filtrado adicionalesk(i, j) se determinan al mismo tiempo quew(i, j). En una implementación, los valores dek(i, j) yw(i, j) se determinan para optimizar el proceso de filtrado y señalización (para minimizar las distorsiones, por ejemplo). Este proceso de optimización lo realiza un codificador que utiliza el ALF. Más adelante en la descripción se proporcionará un ejemplo de dicho proceso de optimización.
[0165] Así, según las realizaciones de la invención, un valor de muestra de entrada se filtra utilizando una combinación lineal de la propia muestra de entrada y de una transformada no lineal adaptativa de las muestras de entrada que son vecinas de la muestra de entrada. La transformada no lineal adaptativa depende de las posiciones relativas de las muestras de entrada vecinas con respecto a la posición de la muestra de entrada que está siendo filtrada.
[0166] Con dicho ALF modificado, todavía es posible lograr un filtrado lineal para unaKconcreta cuandoKcumple la condición de que existeb, y existeadistinta de cero, tal queK(d, b) es igual aamultiplicado pordpara todad, es decir:
[0168] Por lo tanto, elegir una funciónK(d, b) que se comporte como una función lineal (es decir, un mapeo lineal) para algunos valores deb(es decir, que la funciónK(d, b) cumpla la condición (8)), garantiza que el proceso de filtrado ALF modificado de la realización pueda ser, como mínimo, tan eficiente como la utilización del ALF lineal estándar (es decir, en el peor de los casos, el ALF modificado puede alcanzar el mismo nivel de eficiencia que el ALF en VTM-3.0). Por ejemplo, cuando se utiliza una función de recorte, el parámetrobse podría establecer en el valor entero máximo posible (idealmente debería establecerse en infinito, pero podemos lograr el mismo efecto utilizando el valor entero máximo posible en el esquema de precisión entera limitada) para que se comporte como una función lineal.
[0169] Cabe señalar que, en algunas realizaciones de la invención, el filtrado ALF utiliza una formulación/fórmula de filtrado alternativa. La función de varias variablesK(d, b), que toma un gradiente local y un parámetro/variable adicional, se sustituye por otra función de varias variables que toma tres parámetros/variables: un valor de muestra vecina, el valor de muestra a filtrar y un parámetro/variable adicional. Se reformula utilizando la ecuación (7) a la vez que se utiliza una notación similar a la de la ecuación (4) y se cumple la condición (5):
[0170]
[0173] dondeK’(n, e, b) es una función que toma como sus parámetros/variables un valor de muestra vecina (n), el valor de la muestra actual a filtrar (c) y un parámetro/variable de filtrado adicional (b).
[0174] Según una realización de la invención, las etapas de filtrado tanto para las componentes (304) de Croma como para la componente (407) de Luma se modifican para utilizar este filtrado con una formulación no lineal (preferentemente utilizando la ecuación (7), pero también, alternativamente, utilizando la ecuación (9)) implementada mediante una aritmética de enteros (tal como se describe haciendo referencia a la ecuación (1)).
[0175] Según una realización alternativa, en la que cualquier elección se basa en la complejidad, por ejemplo, solo una de las dos etapas (304) o (407) de filtrado se modifica para utilizar el filtro con la formulación no lineal.
[0176] Según algunas realizaciones, el parámetro/variableb = k(i, j) tiene más de una dimensión, por ejemplo, podría ser , utilizando por ejemplo:
[0178]
[0180] pudiendo variar los valores de Sby Dbcon (i, j).
[0181] La utilización de parámetros/variables/funciones con más de una dimensión permite a menudo mejorar el filtrado, pero con un coste más elevado para la señalización de los parámetros del filtro. Además, introduce más complejidad cuando optimiza los parámetros del filtro en un espacio de mayor dimensión en el codificador, y suele ser más complejo calcular la función en el decodificador (más parámetros de filtro implican a menudo más operaciones para utilizarlos). En una realización,btiene una sola dimensión, lo que puede conseguir un buen compromiso para muchas aplicaciones de ALF.
[0182] Según algunas realizaciones, la funciónKtambién puede ser una función que comprende más de una función diferente para diferentes desfases (i, j). En algunas realizaciones, la configuración/disposición de las funciones en la forma/patrón del filtro está predefinida tanto en el codificador como en el decodificador. Alternativamente, la configuración de las funciones se elige/selecciona de entre un conjunto de configuraciones predefinidas, y se transmite/señaliza un índice para la configuración elegida. En otras realizaciones, se elige una función de entre un conjunto de funciones predefinidas para cada índice de coeficiente en la forma/patrón del filtro (excepto para la posición central) y su índice se transmite/señaliza. En una variante de dichas realizaciones, cada función es una función de una sola variable (es decir, la funciónKya no tiene el parámetro/variable adicionalb), por lo que en lugar de señalizar los parámetrosb, se señaliza un índice de función. Dicha variante se puede considerar como la utilización de una formulación de varias variables, por ejemplo, la formulaciónK(d, b) =Kb(d). Por ejemplo,bes un índice entero para seleccionar una función de variable únicaKbde entre un conjunto de funciones.
[0183] Según algunas realizaciones, la funciónKno es la misma para el uno o varios filtros de Luma y el uno o varios filtros de Croma. Según algunas realizaciones, la funciónKno es la misma para cada filtro de Luma. En algunas de estas realizaciones, para cada filtro se proporciona un índice de la función seleccionada en una cabecera de fragmento.
[0184] Según una realización de la invención, se seleccionaKpara que sea simple de calcular (para no introducir demasiada complejidad de decodificación). Por ejemplo, en dicha realización,Kes simplemente una función de recorte:
[0186]
[0188] A diferencia de algunas de las funciones alternativas descritas a continuación, una función de recorte no se anula para valores altos de gradientes locales (en otras palabras, una función de recorte f(x) no converge hacia cero a medida que x se acerca a infinito). Sin embargo, se ha observado experimentalmente que los resultados de compresión que utilizan una función tan simple son a menudo tan eficientes como, e incluso pueden ser mejores que, la utilización de funciones más complejas. De hecho, el hecho de que la función de recorte no se anule para valores altos de gradientes locales, sino que simplemente los recorte, puede permitir seguir teniendo en cuenta las transiciones de borde pronunciadas, al tiempo que se limita el impacto de la alta varianza que existe alrededor de esas zonas de transiciones de borde pronunciadas. Puesto que los artefactos son, en general, más fuertes alrededor de las transiciones pronunciadas, esto tiene interés.
[0189] Una función equivalenteK’de esta función de recorteKutilizando la formulación de filtrado de la ecuación (9) es:
[0191]
[0192] La función de recorte cumple la ecuación (8), siempre quebsea mayor o igual que el valor de muestra máximo posible (dos elevado a la profundidad de bits de la imagen, por ejemplo).
[0193] En la siguiente descripción, se utiliza un “intervalo de recorte” o un “parámetro de recorte” para referirse al parámetro/variablebdeKoK’. Se comprende que dichos términos se pueden considerar como un término genérico para referirse a los parámetros de las funciones no lineales. Del mismo modo, “recorte” o “función de recorte” se puede utilizar para referirse aKoK’descritas anteriormente o a una función funcionalmente equivalente de las mismas.
[0194] En una realización alternativa,Kpuede ser otra función no lineal. En una variante,Kes una función antisimétrica, por ejemplo un período de diente de sierra, correspondiente a:
o algunos períodos de triángulo que corresponden a un caso concreto de la ecuación (10) cuando ; o también puede utilizar un núcleo Gaussiano de manera similar a un filtro bilateral: , por ejemplo. Por ejemplo,Kpuede ser cualquier función que se establezca en cero por encima (o por debajo) de un cierto umbral, tal como las funciones antisimétricas de la variante anterior.
[0195] Según una realización, se utiliza un ALF no lineal en lugar de un ALF lineal para reducir el número de búferes de línea de muestras (es decir, para reducir el número de muestras de la componente de imagen de entrada que necesitan ser procesadas/accedidas/mantenidas en memoria al realizar el filtrado, por ejemplo, en un decodificador), que son necesarios para realizar el filtrado ALF.
[0196] Según una variante, como solución de compromiso, el tamaño de la forma/patrón del filtro para los filtros de Luma se reduce de una forma de rombo de 7x7 a una forma/patrón de filtro más pequeña. Por ejemplo, se utiliza una forma de rombo de 5x5 (por ejemplo, la misma forma que para el filtro de Croma en lafigura 3-b, pero utilizando todavía variantes de índice de transposición) para el uno o varios filtros de Luma. Esto todavía puede lograr una ganancia de codificación similar a la de un ALF solo lineal con uno o varios filtros de Luma con forma de rombo de 7x7 (por ejemplo, los mostrados en lafigura 4-b), pero con un menor número de muestras a procesar/acceder/almacenar (por ejemplo, un menor número de memorias intermedias de línea de muestras), y también una menor complejidad de cálculo: es decir, el número de multiplicaciones necesarias para procesar el filtro de ALF se reduce en 6 por cada muestra de entrada filtrada, aun consiguiendo una buena ganancia de codificación.
[0197] Según una variante, cuando se realiza el filtrado ALF en una muestra, el ALF no lineal se utiliza basándose en todas las muestras vecinas que se habrían utilizado para el ALF lineal. Según otra variante, cuando se realiza el filtrado ALF en una muestra, solo algunas de las muestras vecinas que se habrían utilizado con el ALF lineal se utilizan con el ALF no lineal, y el resto de las muestras vecinas se utilizan con el ALF lineal. Según otra variante más, cuando se realiza el filtrado ALF en una muestra, solo algunas de las muestras vecinas que se habrían utilizado con el ALF lineal se utilizan con el ALF no lineal, y el resto de las muestras vecinas no se utilizan tampoco con el ALF lineal.
[0198] Según diversas variantes, aprovechando la simetría en estas formas/patrones de filtro, utilizando la misma notación que en la ecuación (2) para simplificar la implementación de un filtro de ALF lineal y/o no lineal, la función lineal en la ecuación (4) puede ser reformulada como:
[0200] Que, para el ALF, cumple la condición:
[0202] La función lineal en la ecuación (6) también puede ser reformulada como:
[0204] Y la función no lineal en la ecuación (7) se convierte en:
[0206] dondekies el parámetro de recorte del filtro asociado con el coeficientewidel filtro.
[0207] Finalmente, la función no lineal en la ecuación (9) puede ser reformulada como:
[0208] Según una variante de esta realización, la funciónK’o la funciónKes una función de recorte.
[0209] Según una realización, con el fin de reducir el número de cálculos implicados en el procesamiento de una función no lineal en comparación con el número de cálculos para procesar la funciónKen la ecuación (17), se introduce en su lugar una no linealidad en la suma de, como mínimo, dos diferencias de vecinos (es decir, se puede utilizar una función no lineal con la suma de dos o más gradientes locales como sus variables):
[0211] La ecuación (19) no siempre es equivalente a la ecuación (17), y un filtro que utilice la ecuación (19) puede ser menos eficiente pero reduce la complejidad de cálculo. Según una variante, el número de parámetros/valores de recorte señalizados/codificados no cambia con respecto a los de la ecuación (17), por ejemplo, cuandoKes una función de recorte.
[0212] Se comprende que, según otra variante, se puede utilizar una ecuación derivada de manera similar basada en la ecuación (18) con menor complejidad, teniendo la funciónK’la suma de los dos o más valores de diferencia de vecinos (gradientes locales) como sus variables:
[0214] Lafigura 7proporciona un diagrama de bloques de un filtro no lineal, según una realización de la invención, que puede ser un sustituto del filtro lineal en el ALF de VTM-3.0 (o ser un filtro no lineal adicional además de un filtro lineal en el ALF). Corresponde a una implementación de la ecuación (7) con aritmética de punto fijo entera, utilizando la función de recorte de la ecuación (11). ‘C’701corresponde aI(x, y), ‘S0’702a ‘Sn’703, corresponden aI(x+ i,y+ j) para cada , ‘k0’704a ‘kn’705, corresponden ak(i, j)para cada , ‘w0’706a ‘wn’707, corresponden aw(i, j) para cada y ‘O’708corresponde aO(x, y).
[0215] Lafigura 5es un diagrama de flujo con una visión general de los elementos de sintaxis modificados según una realización de la invención, que proporciona un ejemplo de los elementos de sintaxis que se podrían utilizar para implementar la función no lineal (y sus parámetros) de las realizaciones/variantes mencionadas anteriormente y las relacionadas con estas. En esta realización, el coeficiente de filtro codificado de la ecuación (7) (o (9)) para cada filtro está asociado con su propio intervalo de recorte y, por lo tanto,k(i, j) puede tener diferentes valores que varían con el desfase (i, j). La mayoría de los elementos de sintaxis son los mismos que los ya utilizados en VTM-3.0 y explicados haciendo referencia a lafigura 2: 501, 502, 503, 504, 505, 506, 507, 508, 509, 510en lafigura 5tienen la misma señalización y semántica que201, 202, 203, 204, 205, 206, 207, 208, 209, 210en lafigura 2. Los nuevos elementos de sintaxis son los parámetros de recorte para cada filtro de luma511, todos los coeficientes de filtro para los filtros de Luma (506), y todos los parámetros de recorte para cada uno de los filtros de Luma (511), que se pueden señalizar, por ejemplo, en la cabecera del fragmento. Esta señalización va seguida de la señalización de todos los coeficientes de filtro para el filtro de Croma (507) y todos los parámetros de recorte para los filtros de Croma (512).
[0216] Según una realización, para cualquier filtro, el número de parámetros de recorte señalizados es el mismo que el número de coeficientes de filtro señalizados. Los parámetros de recorte para el desfase (i, j) se obtienen de la misma manera que para los coeficientes de filtro en la misma posición (x i, y j). Para Croma, se procesan de la misma manera que se describió para el proceso de derivación de coeficientes de filtro en la etapa303de lafigura 3-a(pero con parámetros de recorte de Croma); y para Luma se procesan de la misma manera que se describió para el proceso de derivación de coeficientes de filtro en la etapa406de lafigura 4-a(pero con parámetros de recorte de filtro de Luma).
[0217] En una realización alternativa, solo hay un parámetro de recorte por cada filtro; este parámetro de recorte se utiliza para todas las posiciones del filtro.
[0218] En una realización alternativa, el número de parámetros de recorte es inferior al número de coeficientes de filtro. En una variante de esta realización, estos parámetros de recorte se utilizan para un subconjunto (que puede estar predefinido o determinado) de posiciones del filtro con desfase (i, j). Para las otras posiciones del filtro, se realiza el filtrado lineal habitual (o, en otras palabras, en esas otras posiciones del filtro,Kse toma como la función identidad) o, alternativamente, se utilizan valores de parámetros de recorte predefinidos. Las variantes de dicha realización se describen haciendo referencia a lafigura 16-ay lafigura 16-b. En estas variantes, la una o varias funciones de recorte se aplican a un subconjunto de posiciones del filtro, es decir, un patrón/forma/soporte/máscara de recorte incluye solo un subconjunto de las posiciones del filtro en
una forma/patrón de filtro, de modo que solo un subconjunto de los valores/posiciones de las muestras vecinas sea recortado durante el proceso de filtrado (por ejemplo, la función no lineal se aplica a los valores de muestra solo de dicho subconjunto). Puesto que las operaciones de recorte pueden ser costosas computacionalmente, reducir el número de operaciones de recorte implicadas en el filtrado de esta manera puede reducir la complejidad y los costes de cálculo para el proceso de filtrado.
[0220] Lafigura 16-aproporciona formas de filtro de rombo de 7x7 con un menor número de posiciones recortadas/de recorte, que muestran tres posibles disposiciones/configuraciones de las posiciones recortadas/de recorte para reducir el número de operaciones de recorte requeridas cuando se realiza el filtrado con la forma de filtro de 7x7, por ejemplo con un ALF para luma. Utilizando los patrones de recorte mostrados en lafigura 16-a, el número de operaciones de recorte para realizar el filtrado se reduce, debido a que las operaciones de recorte no se aplican a todas las posiciones (de entrada) del filtro, es decir, solo un subconjunto (que puede estar predefinido, señalizado o inferido) de las posiciones del filtro se utiliza para las operaciones de recorte (es decir, utilizado con la función no lineal). En lafigura 16-a, las posiciones de las muestras recortadas están marcadas con una ‘X’ en los patrones de recorte1601, 1602y1603. Los patrones de recorte1601y1602reducen el número de operaciones de recorte en dos tercios, mientras que el patrón de recorte1603reduce este número a la mitad. Estos patrones de recorte1601, 1602y1603consiguen un buen compromiso entre la precisión de la salida y la complejidad implicada en el proceso de filtrado cuando se utiliza una forma de filtro de rombo de 7x7. Los patrones de recorte1601, 1602y1603funcionan bien para un ALF no lineal que se basa en un ALF basado en la orientación (es decir, un filtro construido para clasificaciones basadas en la orientación del contenido local y el nivel de actividad, como el uno o varios filtros de Luma en VTM-3.0). Pero si no se utiliza ninguna clasificación, es preferente utilizar el patrón1602o1603.
[0222] Se comprende que, según otras variantes, se pueden utilizar más o menos posiciones recortadas. Por ejemplo, se puede recortar una columna entera y una fila entera (excepto la posición central) en lugar del patrón de recorte1601(es decir, una cruz de arriba abajo y de izquierda a derecha, excepto la posición central), o se pueden recortar posiciones del borde exterior (es decir, patrones de recorte de rombo/paralelogramo más grandes) en lugar del patrón de recorte1602. En otras variantes de posiciones recortadas, el patrón/forma/soporte/máscara de recorte forma una cruz diagonal “X” (excepto la posición central), un segmento vertical “I” (excepto la posición central), un segmento horizontal “-” (excepto la posición central), un segmento diagonal de arriba a la izquierda a abajo a la derecha “\” (excepto la posición central), un segmento diagonal de arriba a la derecha a abajo a la izquierda “/” (excepto la posición central), o cualquier combinación de los patrones/formas/soportes/máscaras de recorte mencionados anteriormente.
[0223] Lafigura 16-bproporciona formas de filtro de rombo de 5x5 con un menor número de posiciones recortadas/de recorte, que muestran dos disposiciones posibles de las posiciones recortadas/de recorte para reducir el número de operaciones de recorte requeridas cuando se realiza el filtrado con la forma de filtro de 5x5. Al igual que en lafigura 16-a, mediante la utilización de los patrones de recorte mostrados en la figura 16-b, es decir, los patrones de recorte1604y1605, cuando se filtra con una forma de filtro de diamante de 5x5 es posible reducir el número de operaciones de recorte involucradas durante este proceso de filtrado. Los patrones de recorte1604y1605funcionan bien para un ALF no lineal que se basa en un ALF basado en orientación (es decir, un filtro construido para clasificaciones basadas en la orientación de contenido local y en el nivel de actividad, por ejemplo, el uno o varios filtros de Luma en VTM3.0. Pero si no se utiliza clasificación, es preferente utilizar el patrón1605.
[0225] Los patrones de recorte1602y1605funcionan mejor para filtros que no utilizan clasificación basada en la orientación (por ejemplo, son mejores para un filtro de croma, en contraste con los filtros de luma que dependen de la clasificación en orientación horizontal, vertical o diagonal en VTM-3.0), porque los vecinos en dirección horizontal y vertical son estadísticamente más fiables que los diagonales (debido a su mayor distancia euclidiana). Por lo tanto, es más ventajoso utilizar operaciones de recorte solamente en las posiciones de filtro de las muestras vecinas diagonales menos fiables, en lugar de en las posiciones de filtro de las muestras vecinas de dirección horizontal y vertical más fiables.
[0227] Con los filtros basados en la orientación, (es decir, los filtros obtenidos para clasificación basada en la orientación) las operaciones de recorte se aplican, en general, a muestras en posiciones de filtro que son perpendiculares a las orientaciones del filtro. Por ejemplo, el patrón de recorte en1601funcionará mejor con filtros para clases con orientación horizontal o vertical que con filtros para clases con orientación diagonal. El patrón de recorte1602funcionará aproximadamente igual de bien para las cuatro orientaciones de clases, pero será menos eficiente que el patrón1601para las orientaciones horizontal y vertical. De modo que los patrones de recorte en1601y1602funcionan de manera casi equivalente en promedio para los filtros de Luma que utilizan el patrón de filtro de 7x7, y los patrones de recorte en1604y1605funcionarán de manera casi equivalente en promedio para los filtros de Luma que utilizan el patrón de filtro de 5x5.
[0229] Según una variante, para mejorar el filtro basado en la orientación, el patrón de recorte se selecciona de entre patrones predefinidos basados en la orientación del filtro. Por ejemplo, el patrón de recorte1601se utiliza en
filtros horizontales o verticales, mientras que el patrón de recorte1602se utiliza en filtros diagonales. En otra variante más, el patrón de recorte seleccionado para un filtro vertical es diferente de un patrón de recorte seleccionado para un filtro horizontal (cada uno es una versión rotada 90º del otro, por ejemplo), y los patrones de recorte para dos orientaciones de filtro diagonales también son diferentes (cada uno es una versión rotada 90º del otro, por ejemplo). En otra variante más, el patrón de recorte se selecciona según el índice de transposición (transposeIdx) para cada bloque de 4x4 valores de muestra.
[0230] Según una variante, existe un patrón de recorte predeterminado para cada filtro. Según otra variante, existen una pluralidad de patrones de recorte (por ejemplo, un número predeterminado) disponibles pase ser utilizados y, para cada índice de filtro, se codifica/señaliza un índice (de patrón de recorte) para los patrones de recorte seleccionados, con los parámetros de ALF, en el APS o en la cabecera del grupo de teselas, por ejemplo. Según otra variante más, el uno o varios patrones de recorte se señalizan con los parámetros de ALF. Por ejemplo, la señalización de un patrón de recorte se puede realizar mediante la codificación/decodificación de una secuencia de indicadores, un indicador por cada índice de posición de filtro (patrón) (por ejemplo, equivalente a un índice de coeficiente de filtro codificado/decodificado), indicando cada indicador si el recorte debe ser aplicado, o de hecho no ser aplicado, para el índice correspondiente. Alternativamente, la señalización de un patrón de recorte se puede realizar mediante la codificación/decodificación de los propios índices de posición recortados, o mediante la codificación/decodificación del índice de posición del filtro (patrón) de posiciones que no van a ser recortadas (preferentemente, se señaliza aquel que requiera un menor número de bits).
[0231] Según una variante, cuando se utiliza un patrón de recorte (predeterminado o no), los parámetros de recorte solo se señalizan para las posiciones de filtro (patrón) donde se aplica una operación de recorte.
[0232] En algunas variantes, para no romper la implementación paralelizada de una sola instrucción y múltiples datos (Single Instruction, Multiple Data, SIMD), el recorte se aplica a todas las posiciones del filtro, pero el parámetro de recorte para las posiciones en las que no se proporciona dicho parámetro de recorte se toma para tener una salida lineal (por ejemplo, en una variante, una salida de una función identidad).
[0233] En una realización alternativa, el número de parámetros de recorte es menor que el número de coeficientes del filtro, porque se comparten uno o varios parámetros de recorte. Por ejemplo, en las formas de filtro de la figura 3-b y la figura 4-b, algunos índices de coeficiente pueden compartir los mismos parámetros de recorte. Según una variante, se indica un índice del parámetro de recorte en una tabla que contiene un número de elementos, siendo el número de elementos igual a la mitad del tamaño de la forma (debido a la simetría) menos uno (debido a que no existe ningún parámetro de recorte para la posición del coeficiente del centro). Esta tabla permite asociar un índice de parámetro de recorte a cada coeficiente de filtro. Según una variante, esta tabla es fija/preestablecida por el códec. Según una variante, se definen múltiples tablas fijas/preestablecidas, y se señaliza un índice para identificar un parámetro de recorte de la tabla, por ejemplo en la cabecera del fragmento. En una variante alternativa, el contenido de dicha tabla se señaliza, en la cabecera del fragmento, por ejemplo, y es compartido por todos los filtros de Luma.
[0234] En una realización, el número de valores que los parámetros de recorte pueden tomar está limitado a ser pequeño (para reducir la complejidad del codificador y el coste de codificación frente a los pequeños beneficios de calidad). Los valores autorizados para el parámetro de recorte se indexan con un índice de valor entero, preferentemente en orden ascendente o descendente. A continuación, estos índices pueden ser mapeados a cada elemento de una tabla de parámetros de recorte. A continuación, en lugar de señalizar los valores de los parámetros de recorte, se señaliza un índice (p) del valor del parámetro de recorte pertinente en la tabla. En una realización en la quepes un índice de filtro en una tabla, no hay necesidad de utilizar una tabla intermedia para reducir el número de valores posibles parap. Es posible reducir directamente el número de funciones disponibles en la tabla de funciones y, por lo tanto, reducir su tamaño.
[0235] En una realización, los valores de los parámetros de recorte se limitan a potencias de dos: 2p. Por lo tanto, lo que se codifica esp. El valor máximo depes la profundidad de bits Bdde la imagen de entrada (no son necesarios valores más altos, puesto que proporcionarían los mismos resultados. En una realización alternativa, en lugar dep, lo que se codifica es Bd–p. En otra realización, el intervalo depestá limitado a estar entrepmín
ypmáx
. Por ejemplo,pmín
= 3 ypmáx
= Bd- 1. A continuación, se pueden señalizarp-pmín
opmáx
-p.
[0236] En una realización, los valores de parámetros de recorte autorizados/permitidos/disponibles para el filtro de Croma no son los mismos que aquellos para los filtros de Luma.
[0237] Según una realización, el índice mínimo en la tablapmín
y el índice máximo en la tablapmáx
que se utilizan para los parámetros de recorte en el fragmento, se proporcionan en la cabecera del fragmento de modo que el número de valores posibles de los parámetros de recorte pueda ser restringido/limitado al señalizarlos. Según una realización,pmín
ypmáx
son compartidas por los filtros de Luma y de Croma. En una realización
alternativa,pmín
ypmáx
solo se proporcionan para Luma, no estando limitados los índices de Croma. En otra realización alternativa,pmín
ypmáx
se proporcionan en la cabecera del fragmento para Luma y para Croma. Según una realización alternativa, una tabla de valores de parámetros de recorte autorizados está señalizada en la cabecera del fragmento para las componentes tanto de Luma como de Croma o, alternativamente, dos tablas: una para Luma y una para Croma.
[0238] En una realización de la invención, los parámetros de recorte511y512no se señalizan en la cabecera del fragmento. En su lugar, los parámetros de recorte se determinan en el codificador/decodificador utilizando el parámetro de cuantificación (QP) que se utilizó para señalizar la muestra filtrada, y basándose en un índice de clase del filtro.
[0239] En una realización alternativa, los parámetros de recorte511y512se señalizan en la cabecera del fragmento. Pero, en el proceso de filtrado no se utilizan directamente. Por el contrario, los parámetros de recorte se escalan dependiendo del parámetro de cuantificación (QP) que se utilizó para señalizar la muestra filtrada.
[0240] En una realización, los parámetros de recorte para el filtro de luma no se proporcionan para cada filtro. Solo dos tablas de parámetros de recorte son compartidas por todos los filtros de luma, y se señalizan en la cabecera del fragmento. Una tabla es para las clases horizontal/vertical mientras que la otra es para las clases diagonales. Los parámetros de recorte de cada clase se derivan de esas dos tablas según la orientación de la clase, utilizando las disposiciones de coeficientes de lafigura 4-b, y escalando (es decir, multiplicando) los parámetros de recorte según un valor fijo determinado a partir del nivel de actividad de la clase. El escalado tiene en cuenta el nivel de actividad cuando se clasifican bloques de 4x4. Por ejemplo, para zonas de niveles altos de actividad (por ejemplo, cerca de bordes) se pueden utilizar valores de recorte más altos en comparación con zonas de niveles bajos de actividad (por ejemplo, en zonas homogéneas). En una realización, un bit en la cabecera del fragmento señaliza que el recorte está habilitado/deshabilitado para cada índice de recorte de filtro para cada filtro. En realizaciones en las que solo hay un valor de recorte permitido por parámetro de recorte, si el bit indica que el recorte está activo, se utiliza ese valor de recorte (es decir, no se señaliza nada más para el valor del parámetro de recorte). Alternativamente, cuando se permiten más de un valor de recorte, si el bit para un índice de recorte indica que el recorte está deshabilitado para ese índice de recorte de filtro, el valor de recorte no se señaliza, mientras que en otro caso sí se señaliza.
[0241] En este caso, el índice de recorte de filtro corresponde a un índice del parámetro de recorte asociado con un índice de coeficiente de filtro en las formas de filtro.
[0242] En una realización, los valores de recorte permitidos pueden depender del tipo de fragmento (que puede ser INTRA, B o P, por ejemplo).
[0243] En variantes de una realización, los valores de recorte permitidos son: { 6, 32, 181, 1024 } para Luma en un fragmento B o P; { 4, 25, 161, 1024 } para Croma en un fragmento B o P; { 10, 102, 1024 } para Luma en un fragmento INTRA; o/y { 4, 24, 1024 } para Croma en un fragmento INTRA. Por lo tanto, cualquier parámetro de recorte puede tomar un valor perteneciente a uno de dichos conjuntos (de acuerdo con el tipo de fragmento y del componente filtrado). Y, el índice de dicho valor en el conjunto se codifica en la cabecera del fragmento para cada filtro, para cada parámetro de recorte.
[0244] En una variante, una tabla de valores de recorte permitidos está definida como sigue:
[0246]
[0248] dondeNes el número de valores de recorte en la tabla (es decir, el tamaño de la tabla),Mes el valor de recorte máximo (que es la última entrada en la tabla, por ejemplo M = 2Do M = 2D– 1, dondeDes la profundidad de bits de la muestra del componente para el cual se define la tabla), y donde ‘round’ es un operador de redondeo (al entero más cercano, por ejemplo).
[0249] En una variante, una tabla de valores de recorte permitidos se define como sigue:
[0251]
[0253] dondeNes el número de valores de recorte en la tabla (es decir, el tamaño de la tabla),Mes el valor de recorte máximo (que es la última entrada en la tabla, por ejemplo M = 2Do M = 2D– 1, dondeDes la
profundidad de bits de la muestra), A es el valor de recorte más pequeño (que es la primera entrada en la tabla), y donde ‘round’ es un operador de redondeo (al entero más cercano, por ejemplo).
[0254] En una realización, los valores de recorte permitidos no son los mismos para cada índice de recorte del filtro. En variantes de realizaciones que utilizan una función de recorte sobre un valor de diferencia, es decir, que aplican la función K de la ecuación (11) o la ecuación (12) a la diferencia entre un valor de muestra vecina y el valor central, el valor de recorte máximo permitido se define de modo que el número de bits a la salida del recorte se reduzca. Esto permite limitar el número de bits que necesitan ser manejados para una implementación de hardware que realiza el filtrado según dichas variantes. Por lo tanto, permite reducir el número de puertas lógicas/transistores en un chip, por ejemplo. Reducir el número de bits en el extremo de entrada de un operador de multiplicación es especialmente interesante debido a que la multiplicación necesita muchas puertas lógicas. Por ejemplo, establecer el valor de recorte máximo permitido en dos elevado a la profundidad de bits de la muestra menos uno, menos uno; (es decir, el recorte máximo es igual a 2<(profundidad de>bits - 1) – 1) permite reducir el número máximo de bits en uno en el extremo de salida del recorte y, por lo tanto, en el extremo de entrada del operador de multiplicación. Y utilizar la profundidad de bits de la muestra menos dos (es decir, recorte máximo igual a 2<(profundidad de bits - 2)>– 1) permite reducir el número máximo de bits en dos. En una realización que utiliza un APS, la distinción entre un fragmento INTRA y un fragmento INTER (o imagen/parte de imagen/ grupo de teselas INTRA e INTER) puede no ser posible durante una derivación de valor de recorte, debido a que el APS es compartido por los fragmentos/imágenes/grupos de teselas/partes de imagen INTRA e INTER. Entonces, una tabla predefinida de valores de recorte permitidos ya puede no depender del tipo de fragmento/parte de imagen/grupo de teselas. Por lo tanto, una tabla de valores de recorte por defecto es compartida por todos los tipos de fragmento/imagen/grupo de teselas/parte de imagen. En una variante, queda entonces a criterio del codificador decidir (y, por lo tanto, señalizar a un decodificador) si los valores de recorte están limitados a un subconjunto de los valores de recorte de la tabla de valores de recorte por defecto, por consideraciones de reducción de complejidad, por ejemplo.
[0255] En una variante, una tabla de valores de recorte, de valores de recorte utilizables, se señaliza en el APS con los parámetros de ALF. De este modo, un codificador (y un decodificador) puede utilizar cualquier valor de recorte y señalizar los valores de recorte utilizados con su propia tabla de valores de recorte.
[0256] En una variante, hay más de una tabla de valores de recorte por defecto, por ejemplo, una utilizada para fragmentos INTER y otra para fragmentos INTRA. La información para identificar la tabla utilizada, por ejemplo, un índice de la tabla utilizada, se proporciona entonces en el APS con los parámetros de ALF. En una variante, las tablas de valores de recorte por defecto son diferentes para Luma y para Croma.
[0257] En una realización, el valor de salida del filtro también se recorta dependiendo del valor de la muestra de entrada y de un parámetro de recorte adicional (que puede añadirse a la tabla de parámetros de recorte). Según una realización, además del indicador activo de ALF, un indicador activo de NLALF (Non Linear ALF, ALF No Lineal) es colocado a nivel de secuencia, en el SPS por ejemplo, o, alternativamente, a nivel de cuadro, en la cabecera de imagen por ejemplo, para indicar que el ALF no lineal está activo/utilizado/habilitado. Si este indicador está activo (es decir, indica que el ALF no lineal está activo), los elementos de sintaxis para el ALF incluyen parámetros de filtro para filtros no lineales, el de lafigura 5, por ejemplo. Si el indicador está inactivo (es decir, no indica que un ALF no lineal está activo), los elementos de sintaxis para el ALF solo contienen parámetros de filtro para filtro lineal, el de lafigura 2, por ejemplo.
[0258] Según una realización, se coloca un indicador activo de NLALF en la cabecera del fragmento, si el indicador de ALF está activo en la cabecera del fragmento. Si este indicador de NLALF está activo, los parámetros de recorte para cada elemento de sintaxis511de filtro de Luma y los parámetros de recorte para el filtro512de croma están presentes en la cabecera del fragmento. Si este indicador de NLALF está inactivo, los elementos de sintaxis511y512no están presentes en la cabecera del fragmento, y el ALF utiliza el filtrado lineal habitual.
[0259] Según una realización alternativa, se proporciona un indicador activo de NLALF separado para cada tipo de componente de Luma y Croma, y uno o ambos de estos indicadores se utilizan para indicar si un ALF no lineal debe ser utilizado en una muestra de una componente concreta (por ejemplo, se proporcionan en el mismo lugar que el indicador activo de NLALF, tal como a nivel de secuencia o en la cabecera del fragmento). En una variante, se utiliza un ALF no lineal en Luma y se utiliza un ALF lineal en Croma. En una variante alternativa, se utiliza un ALF no lineal en Croma y se utiliza un ALF lineal en Luma.
[0260] En una variante, se proporcionan un indicador activo de Luma de NLALF y un indicador activo de Croma de NLALF en la cabecera del fragmento. El indicador activo de Luma de NLALF indica si se utiliza un filtro de bucle adaptativo no lineal en la componente de Luma y, por lo tanto, si los parámetros de recorte del ALF no lineal se señalizan para cada filtro de Luma. El indicador activo de Croma de NLALF indica si se utiliza un
filtro de bucle adaptativo no lineal en la componente de Croma y, por lo tanto, si los parámetros de recorte del ALF no lineal se señalizan para el filtro de Croma.
[0261] En una variante, el indicador activo de Croma de NLALF no se señaliza sino que se infiere que es igual a cero si el indicador activo de Luma de NLALF es igual a cero, de modo que un ALF no lineal no puede ser utilizado solo en Croma.
[0262] En una variante, siempre se usa un ALF no lineal en Luma (por defecto - por lo que puede no utilizarse un indicador activo de Luma de NLALF o se puede suponer que es el valor por defecto correspondiente), y se utiliza un indicador activo de Croma de NLALF para indicar si se utiliza un ALF no lineal o un ALF lineal en Croma. En otra variante, siempre se utiliza un ALF lineal en Luma (por defecto - por lo que puede no utilizarse un indicador activo de Luma de NLALF o se puede suponer que es el valor por defecto correspondiente) y se utiliza un indicador activo de Croma de NLALF para indicar si se utiliza un ALF no lineal o un ALF lineal en Croma. En una variante, se utiliza un indicador activo de Luma de NLALF para indicar si se utiliza un ALF no lineal o un ALF lineal en Luma, y siempre se utiliza un ALF no lineal en Croma (por defecto - por lo que puede no utilizarse un indicador activo de Croma de NLALF o se puede suponer que es el valor por defecto correspondiente). En una variante, se utiliza un indicador activo de Luma de NLALF para indicar si se utiliza un ALF no lineal o un ALF lineal en Luma, y siempre se utiliza un ALF lineal en Croma (por defecto - por lo que puede no utilizarse un indicador activo de Croma de NLALF o se puede suponer que es el valor por defecto correspondiente).
[0263] En una realización, un indicador activo de NLALF (o un indicador activo de Luma de NLALF o un indicador activo de Croma de NLALF) se coloca en la cabecera del fragmento solo si el indicador de NLALF está activo en el SPS. En el caso en el que el indicador activo de NLALF (o un indicador activo de Luma de NLALF o un indicador activo de Croma de NLALF) no está presente, se considera como inactivo por defecto.
[0264] En una realización, el indicador de NLALF reemplaza al indicador de ALF en el SPS y en la cabecera del fragmento. El ALF clásico (solo lineal) ya no se puede utilizar, excepto en realizaciones en las que la función de recorte permite una salida lineal para los valores de parámetros de recorte permitidos.
[0265] Según una realización, la señalización de los parámetros de recorte se realiza de manera similar a la de los coeficientes de filtro. Primero se señalizan los parámetros para la codificación (exp-)Golomb de los parámetros de recorte: se utiliza un código de VLC para señalizar el orden mínimo de los códigos (exp-)Golomb; a continuación, para cada índice (exp-)Golomb (por ejemplo, 3 índices para filtros de Luma y 2 índices para Croma), se utiliza un indicador para señalizar si el orden (exp-)Golomb debe ser incrementado para el índice actual y los siguientes (empezando con el orden mínimo).
[0266] A continuación, se señalizan los parámetros de recorte para cada filtro (no deshabilitado) utilizando el código (exp-)Golomb (para enteros sin signo), con el orden (exp-)Golomb tomado con el índice (exp-)Golomb asociado con el índice de coeficiente (en una tabla fija, la misma que para los coeficientes de filtro, por ejemplo) de la tabla que almacena los parámetros (exp-)Golomb..
[0267] Según una realización alternativa, para cada filtro codificado se señaliza un valor de parámetro de codificación (exp-)Golomb, por ejemplo, en la cabecera del fragmento, y cada valor del parámetro de recorte se codifica utilizando el valor del parámetro de codificación (exp-)Golomb para una codificación (exp-)Golomb de entero sin signo.
[0268] Según una realización, el valor del parámetro de codificación (exp-)Golomb se señaliza como un índice en una tabla de valores de parámetros de codificación (exp-)Golomb disponibles.
[0269] Según una realización, se señaliza un indicador en la cabecera del fragmento, por ejemplo, indicando el indicador si los parámetros de recorte para los filtros de Luma se señalizan utilizando un modo delta. Cuando el modo delta está activo, los parámetros de recorte del primer filtro se codifican tal como se describió anteriormente, pero cada uno de los parámetros de recorte de filtro siguientes se codifica como una diferencia entre el parámetro de recorte del filtro siguiente y el parámetro de recorte del filtro codificado anteriormente. En ese caso, la diferencia se codifica utilizando una codificación (exp-)Golomb de entero con signo.
[0270] Según una realización, se señaliza un indicador en la cabecera del fragmento, por ejemplo, indicando el indicador si el parámetro de recorte para los filtros puede utilizar un modo delta. Según una realización, cuando el modo delta está activo, se señaliza un indicador para cada filtro, indicando el indicador si el parámetro de recorte para el filtro utiliza el modo delta o no. Según una realización, cuando el modo delta está activo para codificar los parámetros de recorte de un filtro determinado, los parámetros de recorte se codifican uno por uno, utilizando el primero una codificación (exp-)Golomb sin signo, y los siguientes utilizando una codificación (exp-)Golomb con signo de la diferencia entre el parámetro de recorte y el valor del parámetro de recorte codificado anteriormente.
[0271] Según una realización alternativa, el número de valores que puede tomar un parámetro de recorte se limita a dos valores diferentes. Por lo tanto, se utiliza un solo bit para señalizar cuál de los valores del parámetro de recorte se debe utilizar (no hay necesidad de proporcionar parámetros (exp-)Golomb).
[0272] Según una realización, se realiza una señalización condicional de un parámetro de recorte de modo que se minimiza la señalización de datos innecesarios (por ejemplo, donde el coeficiente de filtro es cero o igual a un valor conocido para un filtro en el lado del decodificador). En una variante, los coeficientes de filtro se señalizan, en la cabecera del fragmento, por ejemplo, antes de que se señalicen los parámetros de recorte, y para cada i-ésimo coeficiente de filtro de un filtro que es igual a cero, su correspondiente i-ésimo parámetro de recorte no se señaliza. Esto se debe a que el i-ésimo recorte no será útil para el filtro, puesto que su resultado será multiplicado por el coeficiente cero, de modo que no hay efecto del i-ésimo recorte en la salida filtrada. En una variante, dicho recorte se establece en un valor por defecto (por ejemplo, el valor máximo posible de acuerdo con la profundidad de bits de la muestra). En otra variante, el proceso de filtrado no aplica recorte en la una o varias muestras de entrada que luego se espera que sean multiplicadas por un coeficiente cero.
[0273] Según una realización, se señaliza un indicador para cada filtro de Luma, para indicar si se utiliza un filtro no lineal con ese filtro de Luma o no. En una variante, los parámetros/valores de recorte del filtro de Luma se señalizan solo si el filtro no lineal se utiliza (es decir, si el indicador está activo) para ese filtro de Luma. Según una realización, se señaliza un indicador para un filtro de Croma para indicar si se utiliza un filtro no lineal con ese filtro de Croma o no. En una variante, los parámetros/valores de recorte del filtro de Croma se señalizan solo si el filtro no lineal se utiliza (es decir, si el indicador está activo) para dicho filtro de Croma. Según una realización, la señalización de información relacionada con ALF, tal como parámetros e indicadores de ALF, se realiza utilizando uno o varios de: una sintaxis de APS (Tabla 1); una sintaxis de cabecera de grupo de teselas (Tabla 2); una sintaxis de unidad de árbol de codificación (Tabla 3); y/o una sintaxis de datos de ALF no lineal (Tabla 4) mostradas a continuación, que utilizan la misma convención de nomenclatura de sintaxis que en la versión 3 del borrador de VVC. Según una variante, las cuatro sintaxis (por ejemplo, Tablas 1 a 4) se utilizan para señalizar información relacionada con ALF. Según una variante alternativa, un subconjunto de las cuatro sintaxis se utiliza para señalizar información relacionada con ALF. La Tabla 1 y la Tabla 2 proporcionan elementos de sintaxis de alto nivel para proporcionar/señalizar uno o varios parámetros de ALF, por ejemplo, alf_data( ).
[0276]
[0278] Tabla 1 - Sintaxis de conjunto de parámetros de adaptación (APS)
[0281]
[0283] Tabla 2 - Sintaxis de cabecera del grupo de teselas
[0284] Un fragmento (cabecera) descrito en relación con otras realizaciones (o variantes de las mismas) se reemplaza por un grupo de teselas (cabecera), tal como se muestra en la sintaxis de cabecera de grupo de teselas de la Tabla 2. Por lo tanto, ‘tile_group_alf_enabled_flag’ corresponde al elemento de sintaxis para202en lafigura 2y502en lafigura 5, e indica si el ALF está activo o no para el grupo de teselas. Además, el elemento de sintaxis de datos de ALF no se proporciona en la cabecera del grupo de teselas (en otras realizaciones con un fragmento, se puede proporcionar en una cabecera de fragmento). En su lugar, el elemento de sintaxis de datos de ALF se proporciona en un conjunto de parámetros específico denominado conjunto de parámetros de adaptación (APS), tal como se muestra en la Tabla 1. Los datos de ALF incluyen elementos de sintaxis ALF, y la provisión de elemento de sintaxis de datos de ALF en el APS permite compartir los parámetros de ALF entre más de un grupo de teselas, por ejemplo, entre varios grupos de teselas de la misma imagen o de diferentes imágenes decodificadas.
[0285] La sintaxis del conjunto de parámetros de adaptación (APS) de la Tabla 1 se utiliza para definir la señalización de cualquier conjunto de parámetros de adaptación. En una variante, el APS está incluido en una unidad de ‘capa de abstracción de red’ (Network Abstraction Layer, NAL) que no es de ‘capa de codificación de vídeo’ (Video Coding Layer, VCL) (por ejemplo, denominada ‘APS_NUT’ o tipo de unidad NAL de APS).
[0286] Las semánticas de cada elemento de sintaxis para el APS son como sigue:
[0287] Semántica del conjunto de Parámetros de Adaptación
[0288] adaptation_parameter_set_ididentifica el APS para referencia por otros elementos de sintaxis. El valor de adaptation_parameter_set_id debe estar en el intervalo comprendido entre 0 y 63, incluidos.
[0289] La sintaxis de la cabecera del grupo de teselas de la Tabla 2 se utiliza para definir cada cabecera de grupo de teselas. Se proporciona una cabecera de grupo de teselas para cada grupo de teselas. Un grupo de teselas incluye un conjunto de teselas, incluyendo cada tesela un conjunto de CTU.
[0290] Las semánticas de los elementos de sintaxis para una cabecera de grupo de teselas son como sigue:
[0291] Semánticas de la cabecera del grupo de teselas
[0292] tile_group_aps_idespecifica el adaptation_parameter_set_id del APS al que se refiere el grupo de teselas. El valor de tile_group_aps_id estará en el intervalo comprendido entre 0 y 63, incluidos. El TemporalId de la unidad de NAL del APS que tiene un adaptation_parameter_set_id igual a tile_group_aps_id debe ser menor o igual que el TemporalId de la unidad de NAL del grupo de teselas codificado.
[0293] La Tabla 3 proporciona los elementos de sintaxis para la señalización, a nivel de CTU, de los indicadores (de habilitación) de ALF para cada componente en la que el ALF está activo. Corresponde a los elementos de sintaxis utilizados en208, 209y210en lafigura 2y508,509y510en la figura 5.
[0296]
[0298] Tabla 3 - Sintaxis de la Unidad de Árbol de Codificación
[0299] La sintaxis de la unidad de árbol de codificación de la Tabla 3 se utiliza para definir una unidad de árbol de codificación (codificada). Las semánticas de cada uno de los elementos de sintaxis para una unidad de árbol de codificación son como sigue:
[0300] Semánticas de la unidad de árbol de codificación
[0301] La CTU es el nodo raíz de una estructura de árbol de codificación cuaternario.
[0302] igual a 1 especifica que el filtro de bucle adaptativo se aplica al bloque del árbol de codificación de la componente de color indicada por cIdx de la unidad de árbol de codificación en la ubicación de luma ( xCtb, yCtb ). igual a 0 especifica que el filtro de bucle adaptativo no se aplica al bloque del árbol de codificación de la componente de color indicada por cIdx de la unidad de árbol de codificación en la ubicación de luma ( xCtb, yCtb ).
[0304] Cuando no está presente, se infiere que es igual a 0.
[0305] La Tabla 4 proporciona elementos de sintaxis para señalizar parámetros de ALF no lineal (es decir, una sintaxis de datos de ALF no lineal), que se basan en elementos de sintaxis de datos de ALF de la versión 3 del borrador de VVC. Estos elementos de sintaxis se basan en aquellos utilizados en la variante descrita en el presente documento haciendo referencia a los elementos de sintaxis de ALF no lineal de lafigura 5, que se basan en los elementos de sintaxis de lafigura 2.
[0308]
[0309]
[0311] Tabla 4 - Sintaxis de datos de ALF no Lineal
[0312] La sintaxis de datos del filtro de bucle adaptativo (ALF) no lineal de la Tabla 4 se utiliza para definir un conjunto de parámetros de adaptación (mostrado en la Tabla 1). Las semánticas de los elementos de sintaxis de datos de ALF no lineal son como sigue:
[0313] Semánticas de los datos del filtro de bucle adaptativo
[0314] alf_chroma_idcigual a 0 especifica que el filtro de bucle adaptativo no se aplica a las componentes de color Cb y Cr. alf_chroma_idc igual a 1 indica que el filtro de bucle adaptativo se aplica a la componente de color Cb. alf_chroma_idc igual a 2 indica que el filtro de bucle adaptativo se aplica a la componente de color Cr. alf_chroma_idc igual a 3 indica que el filtro de bucle adaptativo se aplica a las componentes de color Cb y Cr. El valor máximo maxVal de la binarización unaria truncada tu(v) se establece igual a 3.
[0315] La variable NumAlfFilters, que especifica el número de diferentes filtros de bucle adaptativos, se establece igual a 25.
[0316] alf_luma_num_filters_signalled_minus1más 1 especifica el número de clases de filtros de bucle adaptativos para los que se pueden señalizar coeficientes de luma. El valor de alf_luma_num_filters_signalled_minus1 debe estar en el intervalo comprendido entre 0 y NumAlfFilters - 1, incluidos.
[0317] El valor máximo maxVal de la binarización binaria truncada tb(v) se establece igual a NumAlfFilters - 1.
[0318] alf_luma_coeff_delta_idx[ filtIdx ] especifica los índices de los deltas de coeficientes de luma del filtro de bucle adaptativo señalizados para la clase de filtro indicada por filtIdx que varía entre 0 y NumAlfFilters - 1. Cuando alf_luma_coeff_delta_idx[ filtIdx ] no está presente, se infiere que es igual a 0.
[0319] El valor máximo maxVal de la binarización binaria truncada tb(v) se establece igual a alf_luma_num_filters_signalled_minus1.
[0320] alf_luma_coeff_delta_flagigual a 1 indica que alf_luma_coeff_delta_prediction_flag no se señaliza. alf_luma_coeff_delta_flag igual a 0 indica que alf_luma_coeff_delta_prediction_flag puede ser señalizada.alf_luma_coeff_delta_prediction_flagigual a 1 especifica que los deltas de coeficientes de filtro de luma señalizados se predicen a partir de los deltas de los coeficientes de luma anteriores. alf_luma_coeff_delta_prediction_flag igual a 0 especifica que los deltas de coeficientes de filtro de luma señalizados no se predicen a partir de los deltas de los coeficientes de luma anteriores. Cuando no está presente, se infiere que alf_luma_coeff_delta_prediction_flag es igual a 0.
[0321] alf_luma_min_eg_order_minus1más 1 especifica el orden mínimo del código exp-Golomb para la señalización de coeficientes de filtro de luma. El valor de alf_luma_min_eg_order_minus1 debe estar en el intervalo comprendido entre 0 y 6, incluidos.
[0322] alf_luma_eg_order_increase_flag[ i ] igual a 1 especifica que el orden mínimo del código exp-Golomb para la señalización de coeficientes de filtro de luma se incrementa en 1. alf_luma_eg_order_increase_flag[ i ] igual a 0 especifica que el orden mínimo del código exp-Golomb para la señalización de coeficientes de filtro de luma no se incrementa en 1.
[0323] El orden expGoOrderY[ i ] del código exp-Golomb utilizado para decodificar los valores de alf_luma_coeff_delta_abs[ sigFiltIdx ][ j ] se deriva como sigue:
[0324] expGoOrderY[ i ] = alf_luma_min_eg_order_minus1 1 alf_luma_eg_order_increase_flag[ i ]alf_luma_coeff_flag[ sigFiltIdx ] igual a 1 especifica que los coeficientes del filtro de luma indicados por sigFiltIdx se señalizan. alf_luma_coeff_flag[ sigFiltIdx ] igual a 0 especifica que todos los coeficientes de filtro del filtro de luma indicado por sigFiltIdx se establecen iguales a 0. Cuando no está presente, alf_luma_coeff_flag[ sigFiltIdx ] se establece igual a 1.
[0325] alf_luma_coeff_delta_abs[ sigFiltIdx ][ j ] especifica el valor absoluto del j-ésimo delta de coeficiente del filtro de luma señalizado indicado por sigFiltIdx. Cuando alf_luma_coeff_delta_abs[ sigFiltIdx ][ j ] no está presente, se infiere que es igual a 0.
[0326] El orden k de la binarización exp-Golomb uek(v) se deriva como sigue:
[0327] golombOrderIdxY[ ] = { 0, 0, 1, 0, 0, 1, 2, 1, 0, 0, 1, 2 }
[0328] k = expGoOrderY[ golombOrderIdxY[ j ] ]
[0329] alf_luma_coeff_delta_sign[ sigFiltIdx ][ j ] especifica el signo del j-ésimo coeficiente de luma del filtro indicado por sigFiltIdx como sigue:
[0330] - Si alf_luma_coeff_delta_sign[ sigFiltIdx ][ j ] es igual a 0, el coeficiente de filtro de luma correspondiente tiene un valor positivo.
[0331] - De lo contrario (alf_luma_coeff_delta_sign[ sigFiltIdx ][ j ] es igual a 1), el coeficiente de filtro de luma correspondiente tiene un valor negativo.
[0332] Cuando alf_luma_coeff_delta_sign[ sigFiltIdx ][ j ] no está presente, se infiere que es igual a 0.
[0333] La variable filterCoefficients[ sigFiltIdx ][ j ] con sigFiltIdx = 0..alf_luma_num_filters_signalled_minus1, j = 0..11 se inicializa como sigue:
[0334] filterCoefficients[ sigFiltIdx ][ j ] = alf_luma_coeff_delta_abs[ sigFiltIdx ][ j ] * ( 1 - 2 * alf_luma_coeff_delta_sign[ sigFiltIdx ][ j ] )
[0335] Cuando alf_luma_coeff_delta_prediction_flag es igual a 1, filterCoefficients[ sigFiltIdx ][ j ] con sigFiltIdx = 1..alf_luma_num_filters_signalled_minus1 y j = 0..11 se modifican como sigue:
[0336] filterCoefficients[ sigFiltIdx ][ j ] = filterCoefficients[ sigFiltIdx - 1 ][ j ]
[0337] Los coeficientes de filtro de luma AlfCoeffL con elementos AlfCoeffL[ filtIdx ][ j ], con filtIdx = 0..NumAlfFilters -1 y j = 0..11 se derivan como sigue:
[0338] AlfCoeffL[ filtIdx ][ j ] = filterCoefficients[ alf_luma_coeff_delta_idx[ filtIdx ] ][ j ]
[0339] Los últimos coeficientes de filtro AlfCoeffL[ filtIdx ][ 12 ] para filtIdx = 0..NumAlfFilters - 1 se derivan como sigue:
[0340] AlfCoeffL[ filtIdx ][ 12 ] = 128
[0341] Es un requisito de conformidad del flujo de bits que los valores de AlfCoeffL[ filtIdx ][ j ] con filtIdx = 0..NumAlfFilters - 1, j = 0..11 deben estar en el intervalo comprendido entre -2<7>y 2<7>- 1, incluidos, y que los valores de AlfCoeffL[ filtIdx ][ 12 ] deben estar en el intervalo comprendido entre 0 y 2<8>- 1, incluidos.
[0342] alf_chroma_min_eg_order_minus1más 1 especifica el orden mínimo del código exp-Golomb para la señalización de coeficientes de filtro de croma. El valor de alf_chroma_min_eg_order_minus1 debe estar en el intervalo comprendido entre 0 y 6, incluidos.
[0343] alf_chroma_eg_order_increase_flag[ i ]igual a 1 especifica que el orden mínimo del código exp-Golomb para la señalización de coeficientes de filtro de croma se incrementa en 1. alf_chroma_eg_order_increase_flag[ i ] igual a 0 especifica que el orden mínimo del código exp-Golomb para la señalización de coeficientes de filtro de croma no se incrementa en 1.
[0344] El orden expGoOrderC[ i ] del código exp-Golomb utilizado para decodificar los valores de alf_chroma_coeff_abs[ j ] se deriva como sigue:
[0345] expGoOrderC[ i ] = alf_chroma_min_eg_order_minus1 1 alf_chroma_eg_order_increase_flag[ i ]alf_chroma_coeff_abs[ j ]especifica el valor absoluto del j-ésimo coeficiente de filtro de croma. Cuando alf_chroma_coeff_abs[ j ] no está presente, se infiere que es igual a 0. Es un requisito de conformidad del flujo de bits que los valores de alf_chroma_coeff_abs[ j ] deben estar en el intervalo comprendido entre 0 y 2<7>- 1, incluidos.
[0346] El orden k de la binarización exp-Golomb uek(v) se deriva como sigue:
[0347] golombOrderIdxC[ ] = { 0, 0, 1, 0, 0, 1 }
[0348] k = expGoOrderC[ golombOrderIdxC[ j ] ]
[0349] alf_chroma_coeff_sign[ j ] especifica el signo del j-ésimo coeficiente de filtro de croma como sigue:
[0350] - Si alf_chroma_coeff_sign[ j ] es igual a 0, el coeficiente de filtro de croma correspondiente tiene un valor positivo.- De lo contrario (alf_chroma_coeff_sign[ j ] es igual a 1), el coeficiente de filtro de croma correspondiente tiene un valor negativo.
[0351] Cuando alf_chroma_coeff_sign[ j ] no está presente, se infiere que es igual a 0.
[0352] Los coeficientes de filtro de croma AlfCoeffC con elementos cC[ j ], con j = 0..5 se derivan como sigue:
[0353] AlfCoeffC[ j ] = alf_chroma_coeff_abs[ j ] * ( 1 - 2 * alf_chroma_coeff_sign[ j ] )
[0354] El último coeficiente de filtro para j = 6 se deriva como sigue:
[0355] AlfCoeffC[ 6 ] = 128
[0356] Un requisito de conformidad del flujo de bits es que los valores de AlfCoeffC[ j ] con j = 0..5 deben estar en el intervalo comprendido entre -2<7>- 1 y 2<7>- 1, incluidos, y que los valores de AlfCoeffC[ 6 ] deben estar en el intervalo comprendido entre 0 y 2<8>- 1, incluidos.
[0357] alf_luma_clipigual a 0 especifica que se aplica un filtro de bucle adaptativo lineal en la componente de luma. alf_luma_clip igual a 1 especifica que se puede aplicar un filtro de bucle adaptativo no lineal en la componente de luma.
[0358] alf_chroma_clipigual a 0 especifica que se aplica un filtro de bucle adaptativo lineal en las componentes de croma; alf_chroma_clip igual a 1 especifica que se aplica un filtro de bucle adaptativo no lineal en la componente de croma. Si no está presente, alf_chroma_clip se infiere como 0.
[0359] alf_luma_clip_default_tableigual a 1 especifica que se utiliza la tabla alf_luma_clipping_value[ ] por defecto para convertir el índice de recorte en valor de recorte. alf_luma_clip_default_table igual a 0 indica que la tabla alf_luma_clipping_value[ ] está presente en alf_data().
[0360] alf_luma_num_clipping_values_minus1más uno indica el tamaño de la tabla alf_luma_clipping_value[ ]. Si no está presente, se infiere igual a bitDepthY.
[0361] alf_luma_clipping_value[ clipIdx ] especifica el valor de recorte a utilizar cuando el índice de recorte clipIdx se señaliza en la tabla alf_luma_clip_idx[ ][ ]. Cuando no está presente, se infiere que es
[0362] .
[0363] Por comodidad, alf_luma_clipping_value[ alf_luma_num_clipping_values_minus1 1 ] se infiere igual a 1 << bitDepth.
[0364] alf_chroma_clip_default_tableigual a 1 especifica que se utiliza la tabla alf_chroma_clipping_value[ ] por defecto para convertir el índice de recorte en valor de recorte; alf_chroma_clip_default_table igual a 0 indica que la tabla alf_chroma_clipping_value[ ] está presente en alf_data().
[0365] alf_chroma_num_clipping_values_minus1más uno indica el tamaño de la tabla alf_chroma_clipping_value[ ]. Si no está presente, se infiere igual a bitDepthC.
[0366] alf_chroma_clipping_value[ clipIdx ] especifica el valor de recorte a utilizar cuando el índice de recorte clipIdx se señaliza en la tabla alf_chroma_clip_idx[ ][ ]. Cuando no está presente, se infiere que es
[0367] 4, 2 }.
[0368] Por comodidad, alf_chroma_clipping_value[ alf_chroma_num_clipping_values_minus1 1 ] se infiere igual a 1 << bitDepthC.
[0369] alf_luma_filter_clip[ sigFiltIdx ] igual a 0 especifica que se aplica un filtro de bucle adaptativo lineal con el filtro de luma indicado por sigFiltIdx. alf_luma_filter_clip[ sigFiltIdx ] igual a 1 especifica que se aplica un filtro de bucle adaptativo no lineal con el filtro de luma indicado por sigFiltIdx.
[0370] alf_luma_clip_min_eg_order_minus1más 1 especifica el orden mínimo del código exp-Golomb para la señalización de coeficientes de filtro de luma. El valor de alf_luma_clip_min_eg_order_minus1 debe estar en el intervalo comprendido entre 0 y 6, incluidos.
[0371] alf_luma_clip_eg_order_increase_flag[ i ] igual a 1 especifica que el orden mínimo del código exp-Golomb para la señalización de coeficientes de filtro de luma se incrementa en 1. alf_luma_eg_order_increase_flag[ i ] igual a 0 especifica que el orden mínimo del código exp-Golomb para la señalización de coeficientes de filtro de luma no se incrementa en 1.
[0372] El orden expGoOrderYClip[ i ] del código exp-Golomb utilizado para decodificar los valores de alf_luma_clip_idx[ sigFiltIdx ][ j ] se deriva como sigue:
[0373] expGoOrderYClip[ i ] = alf_luma_clip_min_eg_order_minus1 1 alf_luma_clip_eg_order_increase_flag[ i ]alf_luma_clip_idx[ sigFiltIdx ][ j ] especifica el índice de recorte del recorte a utilizar antes de multiplicar por el j-ésimo coeficiente del filtro de luma señalizado indicado por sigFiltIdx.
[0374] Cuando alf_luma_clip_idx[ sigFiltIdx ][ j ] no está presente, se infiere que es igual a alf_luma_num_clipping_values_minus1 1 (sin recorte).
[0375] El orden k de la binarización exp-Golomb uek(v) se deriva como sigue:
[0376] golombOrderIdxYClip[ ] = { 0, 0, 1, 0, 0, 1, 2, 1, 0, 0, 1, 2 }
[0378] La variable filterClips[ sigFiltIdx ][ j ] con sigFiltIdx = 0..alf_luma_num_filters_signalled_minus1, j = 0..11 se inicializa como sigue:
[0379] filterClips[ sigFiltIdx ][ j ] = alf_luma_clipping_value[ alf_luma_clip_idx[ sigFiltIdx ][ j ] ]
[0380] Los valores de recorte del filtro de luma AlfClipL con elementos AlfClipL[ filtIdx ][ j ], con filtIdx = 0..NumAlfFilters - 1 y j = 0..11 se derivan como sigue:
[0381] AlfClipL[ filtIdx ][ j ] = filterClips[ alf_luma_coeff_delta_idx[ filtIdx ] ][ j ]alf_chroma_clip_min_eg_order_minus1más 1 especifica el orden mínimo del código exp-Golomb para la señalización de coeficientes de filtro de croma. El valor de alf_chroma_clip_min_eg_order_minus1 debe estar en el intervalo comprendido entre 0 y 6, incluidos.
[0382] alf_chroma_clip_eg_order_increase_flag[ i ]igual a 1 especifica que el orden mínimo del código exp-Golomb para la señalización de coeficientes de filtro de croma se incrementa en 1. alf_chroma_clip_eg_order_increase_flag[ i ] igual a 0 especifica que el orden mínimo del código exp-Golomb para la señalización de coeficientes de filtro de croma no se incrementa en 1.
[0383] El orden expGoOrderC[ i ] del código exp-Golomb utilizado para decodificar los valores de alf_chroma_coeff_abs[ j ] se deriva como sigue:
[0384] expGoOrderC[ i ] = alf_chroma_clip_min_eg_order_minus1 1 alf_chroma_clip_eg_order_increase_flag[ i ]alf_chroma_clip_idx[ j ] especifica el índice de recorte del recorte a utilizar antes de multiplicar por el j-ésimo coeficiente del filtro de croma. Cuando alf_chroma_clip_idx[ j ] no está presente, se infiere que es igual a alf_chroma_num_clipping_values_minus1 1 (sin recorte).
[0385] El orden k de la binarización exp-Golomb uek(v) se deriva como sigue:
[0386] golombOrderIdxC[ ] = { 0, 0, 1, 0, 0, 1 }
[0387] k = expGoOrderC}[ golombOrderIdxC}[ j ] ]
[0388] Los valores de recorte del filtro de croma AlfClipC con elementos AlfClipC[ j ], con j = 0..5 se derivan como sigue:
[0389] AlfClipC[ j ] = alf_chroma_clipping_value[ alf_chroma_clip_idx[ j ] ]
[0390] De acuerdo con una variante, alf_luma_num_clipping_values_minus1 se reemplaza por alf_luma_num_clipping_values_minus2 y los valores de recorte se proporcionan desde index = 1 hasta alf_luma_num_clipping_values_minus2+1, y el primer valor de alf_luma_clipping_value[ ] se infiere como alf_luma_clipping_value[ 0 ] = 1 << bitDepthY. lf_chroma_num_clipping_values_minus1 se reemplaza por alf_chroma_num_clipping_values_minus2 y los valores de recorte se proporcionan desde index = 1 hasta alf_chroma_num_clipping_values_minus2+1, y el primer valor de alf_chroma_clipping_value[ ] se infiere como alf_chroma_clipping_value[ 0 ] = 1 << bitDepthC.
[0391] De acuerdo con una variante, un proceso de filtrado de bucle adaptativo utiliza los elementos de sintaxis anteriores. Dicha variante se describe utilizando la convención de notación de la especificación del borrador de VVC que se muestra a continuación
[0392] Proceso del filtro de bucle adaptativo
[0393] General
[0394] Las entradas de este proceso son las matrices de muestras de imágenes reconstruidas antes del filtro de bucle adaptativo recPictureL, recPictureCb y recPictureCr.
[0395] Las salidas de este proceso son las matrices de muestras de imágenes reconstruidas modificadas después del filtro de bucle adaptativo alfPictureL, alfPictureCb y alfPictureCr.
[0396] Los valores de las muestras en las matrices de muestras de imágenes reconstruidas modificadas después del filtro de bucle adaptativo alfPictureL, alfPictureCb y alfPictureCr se establecen inicialmente iguales a los valores de las muestras en las matrices de muestras de imágenes reconstruidas antes del filtro de bucle adaptativo recPictureL, recPictureCb y recPictureCr, respectivamente.
[0397] Cuando tile_group_alf_enabled_flag es igual a 1, para cada unidad de árbol de codificación con ubicación de bloque de árbol de codificación de luma (rx, ry), donde rx = 0..PicWidthInCtbs - 1 y ry = 0..PicHeightInCtbs - 1, se aplica lo siguiente:
[0398] Cuando alf_ctb_flag[ 0 ][ rx ][ ry ] es igual a 1, el proceso de filtrado de bloque de árbol de codificación para muestras de luma, según se especifica en el apartado ‘Proceso de filtrado de bloque de árbol de codificación para muestras de luma’, se invoca con recPictureL, alfPictureL, y la ubicación del bloque de árbol de codificación de luma ( xCtb, yCtb ) establecida como igual a ( rx << CtbLog2SizeY, ry << CtbLog2SizeY ) como entradas, y la salida es la imagen filtrada modificada alfPictureL.
[0399] Cuando alf_ctb_flag[ 1 ][ rx ][ ry ] es igual a 1, el proceso de filtrado de bloque de árbol de codificación para muestras de croma, según se especifica en el apartado ‘Proceso de filtrado de bloque de árbol de codificación para muestras de croma’, se invoca con recPicture establecida como igual a recPictureCb, alfPicture establecida como igual a alfPictureCb, y la ubicación del bloque de árbol de codificación de croma ( xCtbC, yCtbC ) establecida como igual a ( rx << ( CtbLog2SizeY - 1 ), ry << ( CtbLog2SizeY - 1 ) ) como entradas, y la salida es la imagen filtrada modificada alfPictureCb.
[0400] Cuando alf_ctb_flag[ 2 ][ rx ][ ry ] es igual a 1, el proceso de filtrado de bloque de árbol de codificación para muestras de croma, según se especifica en el apartado ‘Proceso de filtrado de bloque de árbol de codificación para muestras de croma’, se invoca con recPicture establecida como igual a recPictureCr, alfPicture establecida como igual a alfPictureCr, y la ubicación del bloque de árbol de codificación de croma ( xCtbC, yCtbC ) establecida como igual a ( rx << ( CtbLog2SizeY - 1 ), ry << ( CtbLog2SizeY - 1 ) ) como entradas, y la salida es la imagen filtrada modificada alfPictureCr.
[0401] Proceso de filtrado de bloque de árbol de codificación para muestras de luma
[0402] Las entradas de este proceso son: una matriz de muestras de imagen de luma reconstruida recPictureL antes del proceso de filtrado de bucle adaptativo, una matriz de muestras de imagen de luma reconstruida filtrada alfPictureL, una ubicación de luma ( xCtb, yCtb ) que especifica la muestra superior izquierda del bloque de árbol de codificación de luma actual con respecto a la muestra superior izquierda de la imagen actual.
[0403] La salida de este proceso es la matriz de muestras de imagen de luma reconstruida filtrada modificada alfPictureL.
[0404] El proceso de derivación para el índice de filtro del apartado ‘Proceso de derivación para la transposición de ALF e índice de filtro para muestras de luma’ se invoca con la ubicación ( xCtb, yCtb ) y la matriz de muestras de imagen de luma reconstruida recPictureL como entradas, y filtIdx[ x ][ y ] y transposeIdx[ x ][ y ] con x, y = 0..CtbSizeY - 1 como salidas.
[0405] Para la derivación de las muestras de luma reconstruidas filtradas alfPictureL[ x ][ y ], cada muestra de luma reconstruida dentro del bloque de árbol de codificación de luma actual recPictureL[ x ][ y ] se filtra de la siguiente manera con x, y = 0..CtbSizeY - 1:
[0406] La matriz de coeficientes de filtro de luma f[ j ] y la matriz de recorte de filtro de luma c[ j ] correspondientes al filtro especificado por filtIdx[ x ][ y ] se derivan de la siguiente manera con j = 0..12:
[0408]
[0410] Los coeficientes de filtro de Luma filterCoeff y los valores de recorte de filtro filterClip se derivan dependiendo de transposeIdx[ x ][ y ] de la siguiente manera:
[0411] Si transposeIndex[ x ][ y ] == 1,
[0413]
[0415] De lo contrario, si transposeIndex[ x ][ y ] == 2,
[0416]
[0418] De lo contrario, si transposeIndex[ x ][ y ] == 3,
[0420]
[0422] Las ubicaciones ( hx, vy ) para cada una de las muestras de luma ( x, y ) correspondientes dentro de la matriz dada recPicture de muestras de luma se derivan de la siguiente manera:
[0424]
[0426] La variable curr se deriva de la siguiente manera:
[0427] curr = recPictureL[ hx, vy ]
[0428] La variable sum se deriva de la siguiente manera:
[0430]
[0431]
[0433] La muestra de imagen de luma reconstruida filtrada modificada alfPictureL[ xCtb x ][ yCtb y ] se deriva de la siguiente manera:
[0434] alfPictureL[ xCtb x ][ yCtb y ] = Clip3 ( 0, ( 1 << BitDepthY ) - 1, sum )
[0435] Proceso de derivación para la transposición de ALF e índice de filtro para muestras de luma
[0436] Las entradas de este proceso son: una ubicación de luma ( xCtb, yCtb ) que especifica la muestra superior izquierda del bloque de árbol de codificación de luma actual con respecto a la muestra superior izquierda de la imagen actual, una matriz de muestras de imagen de luma reconstruida recPictureL antes del proceso de filtrado de bucle adaptativo.
[0437] Las salidas de este proceso son
[0438] la matriz de índices de filtro de clasificación filtIdx[ x ][ y ] con x, y = 0..CtbSizeY – 1,
[0439] la matriz de índices de transposición transposeIdx[ x ][ y ] con x, y = 0..CtbSizeY - 1.
[0440] Las ubicaciones ( hx, vy ) para cada una de las muestras de luma ( x, y ) correspondientes dentro de la matriz dada recPicture de muestras de luma se derivan de la siguiente manera:
[0442]
[0444] La matriz de índices de filtro de clasificación filtIdx y la matriz de índices de transposición transposeIdx se derivan mediante las siguientes etapas ordenadas:
[0445] 1) Las variables filtH[ x ][ y ], filtV[ x ][ y ], filtD0[ x ][ y ] y filtD1[ x ][ y ] con x, y = -2..CtbSizeY 1 se derivan de la siguiente manera:
[0446] Si tanto x como y son números pares o tanto x como y son números impares, se aplica lo siguiente:
[0448]
[0450] De lo contrario, filtH[ x ][ y ], filtV[ x ][ y ], filtD0[ x ][ y ] y filtD1[ x ][ y ] se establecen como iguales a 0.
[0451] 2) Las variables varTempHl[ x ][ y ], varTempVl[ x ][ y ], varTempDOl[ x ][ y ], varTempD1l[ x ][ y ] y varTemp[ x ][ y ] con x, y = 0.. (CtbSizeY - 1) >> 2 se derivan como sigue:
[0453]
[0455] 3) Las variables dir1[ x ][ y ], dir2[ x ][ y ] y dirS[ x ][ y ] con x, y = 0.. CtbSizeY - 1 se derivan como sigue: Las variables hv1, hv0 y dirHV se derivan como sigue:
[0456] Si sumV[ x >> 2 ][ y >> 2 ] es mayor que sumH[ x >> 2 ][ y >> 2 ], se aplica lo siguiente:
[0458]
[0460] De lo contrario, se aplica lo siguiente:
[0462]
[0464] Las variables d1, d0 y dirD se derivan como sigue:
[0465] Si sumD0[ x >> 2 ][ y >> 2 ] es mayor que sumD1[ x >> 2 ][ y >> 2 ], se aplica lo siguiente:
[0466]
[0468] De lo contrario, se aplica lo siguiente:
[0470]
[0472] Las variables hvd1, hvd0, se derivan como sigue:
[0474]
[0476] Las variables dirS[ x ][ y ], dir1[ x ][ y ] y dir2[ x ][ y ] se derivan como sigue:
[0478]
[0480] 4) La variable avgVar[ x ][ y ] con x, y = 0.. CtbSizeY - 1 se deriva como sigue:
[0482]
[0484] 5) La matriz de índices de filtro de clasificación filtIdx[ x ][ y ] y la matriz de índices de transposición transposeIdx[ x ][ y ] con x = y = 0.. CtbSizeY - 1 se derivan como sigue:
[0486]
[0488] Cuando dirS[ x ][ y ] no es igual a 0, filtIdx[ x ][ y ] se modifica como sigue:
[0490] Proceso de filtrado de bloque de árbol de codificación para muestras de croma
[0491] Las entradas de este proceso son: una matriz de muestras de imagen de croma reconstruida recPicture antes del proceso de filtrado de bucle adaptativo, una matriz de muestras de imagen de croma reconstruida filtrada alfPicture, una ubicación de croma ( xCtbC, yCtbC ) que especifica la muestra superior izquierda del bloque de árbol de codificación de croma actual con respecto a la muestra superior izquierda de la imagen actual. La salida de este proceso es la matriz de muestras de imagen de croma reconstruida filtrada modificada alfPicture.
[0492] El tamaño del bloque de árbol de codificación de croma actual ctbSizeC se deriva de la siguiente manera: ctbSizeC = CtbSizeY / SubWidthC
[0493] Para la derivación de las muestras de croma reconstruidas filtradas alfPicture[ x ][ y ], cada muestra de croma reconstruida dentro del bloque de árbol de codificación de croma actual recPicture[ x ][ y ] se filtra de la siguiente manera con x, y = 0..ctbSizeC - 1:
[0494] Las ubicaciones ( hx, vy ) para cada una de las muestras de croma ( x, y ) correspondientes dentro de la matriz dada recPicture de muestras de croma se derivan de la siguiente manera:
[0496]
[0498] La variable curr se deriva de la siguiente manera:
[0499] curr = recPicture[ hx, vy ]
[0500] La variable sum se deriva de la siguiente manera:
[0502]
[0504] La muestra de imagen de croma reconstruida filtrada modificada alfPicture[ xCtbC x ][ yCtbC y ] se deriva de la siguiente manera:
[0505] alfPicture[ xCtbC x ][ yCtbC y ] = Clip3 ( 0, ( 1 << BitDepthC ) - 1, sum )
[0506] En la variante anterior, la operación de recorte se aplica a la diferencia entre una muestra vecina y la muestra filtrada (es decir, se utiliza la ecuación (7)). En otra variante que utiliza la ecuación (9), su semántica y proceso de filtrado se modifican de la siguiente manera (modificados basándose en la semántica y el proceso de filtrado de la variante anterior):
[0507] - AlfCoeffL[ filtIdx ][ 12 ] se derivaría como:
[0508] con k = 0..11
[0509] - AlfCoeffC[ 6 ] se derivaría como:
[0510] con k = 0..5
[0511] - La limitación sobre la profundidad de bits de AlfCoeffL[ filtIdx ][ 12 ] y AlfCoeffC[ 6 ], que es que deben estar en el intervalo comprendido entre 0 y 2<8>- 1 incluidos, se flexibiliza al intervalo comprendido entre 0 y 2<9>- 1 o incluso al intervalo comprendido entre 0 y 2<10>– 1, con el fin de obtener mejores rendimientos de filtrado. Esto se debe a que, con las operaciones de recorte, a menudo ocurre que los coeficientes asociados con las posiciones de las muestras vecinas tienen que ser mayores (en valor absoluto) para una mejor eficiencia
(debido a que las muestras de entrada del filtro son más fiables, es decir, más propensas a proporcionar un mejor filtrado, una vez que se ha aplicado la función no lineal). Como resultado, ocurre frecuentemente que la suma de dichos coeficientes (por lo tanto, no incluyendo el coeficiente central) es inferior a -128 (en representación de punto fijo), de modo que el coeficiente central tiene que ser superior a 256 (en representación de punto fijo). Por lo tanto, limitar el coeficiente central para que esté en un intervalo normativo comprendido entre 0 y 2<8>- 1 implica que el codificador necesita encontrar coeficientes subóptimos, reduciendo su dinámica/amplitud, lo que resulta en un filtrado menos eficiente. Utilizando un intervalo normativo de 10 bits de precisión (es decir, un intervalo comprendido entre 0 y 2<10>- 1) en el coeficiente central, es mucho menos frecuente que el codificador tenga que utilizar coeficientes de filtro subóptimos y, por lo tanto, la calidad global del filtrado aumenta en comparación con la precisión de 8 bits. Para el filtrado lineal de ALF, la limitación de 8 bits en el coeficiente central no afecta tanto a la eficiencia del filtro, debido a que las muestras de entrada vecinas del filtro a menudo tienen un peso menor (es decir, coeficientes más pequeños). Mientras que con el recorte, es decir, el filtrado no lineal de ALF, los filtros óptimos pueden dar más peso a las muestras vecinas, que, una vez recortadas, son más fiables.
[0513] - La variable sum en el ‘proceso de filtrado de bloque de árbol de codificación para muestras de luma’ se deriva de la siguiente manera:
[0515]
[0516]
[0519] - La variable sum en el ‘proceso de filtrado de bloque de árbol de codificación para muestras de croma’ se deriva de la siguiente manera:
[0521]
[0524] En otra variante que utiliza una forma de filtro de rombo de 5x5 para los filtros de luma (para reducir el número de líneas de la memoria intermedia necesarias para aplicar el ALF), que también utiliza recorte aplicado a una diferencia entre un valor de muestra vecina y el valor de la muestra central, una sintaxis de datos de ALF no lineal de la Tabla 4 se modifica de la siguiente manera (los cambios realizados en la sintaxis de datos de ALF presentada anteriormente están tanto subrayados como en negrita, y las partes repetidas se omiten siempre que sea posible):
[0525]
[0527] Tabla 5 – una parte modificada de una sintaxis de datos de ALF no lineal El número de coeficientes de ALF para filtros de luma pasa a ser 13 y, por lo tanto, el proceso de inicialización del último coeficiente del filtro pasa a ser:
[0528] Los últimos coeficientes del filtro
se derivan de la siguiente manera:
[0530] Un requisito de conformidad del flujo de bits es que los valores de AlfCoeffL[ filtIdx ][ j ] con filtIdx = 0..NumAlfFilters - 1, j = 0..11 deben estar en el intervalo comprendido entre -2<7>y 2<7>- 1, incluidos, y que los valores de AlfCoeffL[ filtIdx ][6] deben estar en el intervalo comprendido entre 0 y 2<8>- 1, incluidos.
[0531] Para el “Proceso de filtrado de bloque de árbol de codificación para muestras de luma”, el proceso de derivación para el apartado de índice de filtro ‘Proceso de derivación para la transposición de ALF e índice de filtro para muestras de luma’ se modifica de la siguiente manera (los cambios realizados en la sintaxis de datos de ALF presentada anteriormente se encuentran tanto subrayados como en negrita, y las partes repetidas se omiten siempre que sea posible):
[0532] El proceso de derivación para el índice de filtro del apartado ‘Proceso de derivación para la transposición de ALF e índice de filtro para muestras de luma’ se invoca con la ubicación ( xCtb, yCtb ) y la matriz de muestras de imagen de luma reconstruida recPictureL como entradas, y filtIdx[ x ][ y ] y transposeIdx[ x ][ y ] con x, y = 0..CtbSizeY - 1 como salidas.
[0533] Para la derivación de las muestras de luma reconstruidas filtradas alfPictureL[ x ][ y ], cada muestra de luma reconstruida dentro del bloque de árbol de codificación de luma actual recPictureL[ x ][ y ] se filtra de la siguiente manera con x, y = 0..CtbSizeY - 1:
[0534] La matriz de coeficientes de filtro de luma f[ j ] y la matriz de recorte de filtro de luma c[ j ] correspondientes al filtro especificado por filtIdx[ x ][ y ] se derivan de la siguiente manera con j = 0..6:
[0536]
[0538] Los coeficientes de filtro de Luma filterCoeff y los valores de recorte de filtro filterClip se derivan dependiendo de transposeIdx[ x ][ y ] de la siguiente manera:
[0539] Si transposeIndex[ x ][ y ] == 1,
[0540]
[0542] En caso contrario, si transposeIndex[ x ][ y ] == 2,
[0544]
[0546] En caso contrario, si transposeIndex[ x ][ y ] == 3,
[0548]
[0550] Las ubicaciones ( hx, vy ) para cada una de las muestras de luma ( x, y ) correspondientes dentro de la matriz dada recPicture de muestras de luma se derivan de la siguiente manera:
[0552]
[0554] La variable curr se deriva de la siguiente manera: curr = recPictureL[ hx, vy ]
[0555] La variable sum se deriva de la siguiente manera:
[0557]
[0559] La muestra de imagen de luma reconstruida filtrada modificada alfPictureL[ xCtb x ][ yCtb y ] se deriva de la siguiente manera:
[0560] En variantes que no utilizan la diferencia entre los vecinos y el centro, se utiliza AlfCoeffL[ filtIdx ][6] = 128 -, con k = 0..5. Para el filtrado, también se realizan cambios similares en los parámetros de recorte en el filtrado.
[0561] En otra variante, utilizando una forma de rombo de 7x7 para el filtro, pero utilizando el patrón de recorte1601de lafigura 16-apara los filtros de Luma, y el patrón de recorte1605de lafigura 16-bpara el filtro de Croma, una sintaxis de datos de ALF no lineal de la Tabla 4 se modifica de la siguiente manera (los cambios realizados en la sintaxis de datos de ALF de la Tabla 4 presentada anteriormente se encuentran tanto subrayados como en negrita, y las partes repetidas se omiten siempre que sea posible):
[0564]
[0566] Tabla 6 – una parte modificada de una sintaxis de datos de ALF no lineal AlfClipPatL[ ] es una tabla de patrón de recorte constante para filtros de Luma y se establece de la siguiente manera: AlfClipPatL[ ] = { 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 1 }
[0567] AlfClipPatC[ ] es una tabla de patrón de recorte constante para el filtro de Croma y se establece de la siguiente manera: AlfClipPatC[ ] = { 1, 1, 0, 1, 1, 0 }
[0568] Partes de la semántica se modifican de la siguiente manera:
[0569] - La variable sum en el “Proceso de filtrado de bloque de árbol de codificación para muestras de luma” se deriva de la siguiente manera:
[0570]
[0572] - La variable sum en el “Proceso de filtrado de bloque de árbol de codificación para muestras de croma” se deriva de la siguiente manera:
[0573]
[0574] Se comprende que otras variantes que utilizan otros patrones de recorte pueden derivarse fácilmente de la variante mencionada anteriormente, así como otras variantes que utilizan un menor número de recortes (es decir, un menor número de posiciones recortadas, por ejemplo, para la componente de Luma no se aplica ningún recorte al valor de la muestra (central) actual “curr” de modo que no haya “f[12]”, no haya “c[12]”, no haya “filterCoeff[12]”, y “sum = curr ( (sum+64)>>7)” como en la Ecuación (17) y la figura 7) y/o que no utilizan la diferencia entre las muestras vecinas y la muestra central.
[0576] Lafigura 8es un diagrama de bloques del filtro lineal obtenido cuando la parte no lineal del filtro en lafigura 7se deshabilita según una realización de la invención. Según una realización, cuando el ALF está activo y el ALF no lineal está inactivo, entonces se utiliza el ALF lineal para el filtrado. En una variante de dicha realización, se utiliza el ALF no lineal tal como se define con la ecuación (7) y se muestra en lafigura 7; en lugar de utilizar el ALF lineal tal como se define con la ecuación (4) y se muestra en lafigura 6, el filtrado lineal se realiza tal como se define con la ecuación (6) y se muestra en lafigura 8. En un diseño de hardware, esto permite compartir una parte de circuito común entre los filtros no lineales y lineales. Cuando se compara lafigura 7y lafigura 8, las operaciones mín/máx simplemente se omiten, procediendo directamente al valor de la muestra. Otra ventaja de utilizar este enfoque es que cuando un codificador diseña sus filtros, no tiene que garantizar que la suma de todos los coeficientes de filtro de cada filtro sea uno. El resultado de este diseño es que se añade una sustracción por cada coeficiente, excepto para la muestra actual, y se elimina una multiplicación para la muestra actual.
[0578] El diseño de lafigura 7también tiene ventajas en el ahorro de bits de hardware para implementar multiplicaciones, cuando el valor máximo que puede tomar el parámetro de recorte es suficientemente bajo.
[0579] Según una realización, los elementos de sintaxis de ALF señalizados en la cabecera del fragmento en lafigura 5ya no se señalizan más en la cabecera del fragmento, sino que, por el contrario, se señalizan a nivel de cuadro, en una cabecera de imagen, por ejemplo. Por lo tanto, en la cabecera del fragmento existen uno o varios indicadores/elementos de sintaxis para señalizar que los parámetros proporcionados a nivel de cuadro se utilizan directamente en el fragmento; o que los parámetros proporcionados a nivel de cuadro tienen que ser “refrescados” (es decir, actualizados) a nivel de fragmento. La actualización a nivel de fragmento se realiza en la cabecera del fragmento. La actualización de los coeficientes de filtro y/o de los parámetros de recorte se realiza codificando la diferencia entre los valores indicados a nivel de cuadro y los valores a utilizar en el fragmento. Según una realización, un elemento de sintaxis adicional en la cabecera del fragmento indica si los valores de los coeficientes de filtro y/o los parámetros de recorte se codifican en la cabecera del fragmento como una diferencia, o si se codifican sus valores.
[0581] Según una realización, los coeficientes de filtro y/o los parámetros de recorte definidos a nivel de fragmento (en la cabecera del fragmento), se pueden actualizar a un nivel de granularidad más fino (para cada CTU, por ejemplo). Un elemento de sintaxis que indica si la actualización debe ser realizada es codificado por entropía en los datos del fragmento, así como los datos de actualización cuando el elemento de sintaxis indica que la actualización debe ser realizada. En una realización, en el flujo de bits codificado, para cada CTU, los datos del fragmento codificados incluyen un indicador codificado por entropía que indica si los filtros de Luma/parámetros de recorte tienen que ser actualizados. Si el indicador indica que la actualización debe ser realizada, para cada tabla de coeficientes de filtro un indicador codificado por entropía indica si el filtro tiene que ser actualizado. Si el filtro tiene que ser actualizado, se codifican por entropía los desfases (diferencia con valores de referencia en el fragmento o, alternativamente, diferencia con valores de referencia en una CTU codificada previamente, perteneciente al mismo fragmento) para los coeficientes y/o los desfases para los parámetros de recorte.
[0583] Según una realización, desde el punto de vista del codificador, se mantienen las principales etapas lógicas del proceso de codificación de ALF de VTM-3.0 descrito haciendo referencia a lafigura 9. Los cambios principales son la naturaleza de las estadísticas que se extraen para construir filtros, y el modo en que se determina el filtro. En lugar de un simple cálculo de Filtro de Wiener, los parámetros de recorte se optimizan iterativamente para encontrar los mejores parámetros de recorte y los coeficientes del Filtro de Wiener no lineal asociados.
[0585] Según una realización, se defineNK, un límite en el número de valores que un parámetro de recorte puede tomar.NKpuede ser pequeño, por ejemploNK= 12 o incluso menos. Entonces, en lugar de calcular estadísticas de matrices de covarianza y covarianza cruzada, en la etapa902el codificador construye una tabla E de dos entradas de estadísticas de matrices de covarianza-recorte deNKxNKy una tablaγde una entrada de estadísticas de matrices de covarianza cruzada-recorte deNK(en lugar de una estadística de matriz de covarianza y una estadística de matriz de covarianza cruzada).
[0587]
[0588] La matriz de covarianza-recorte Ec[a][b] es una matriz de covarianza estimada a partir de , dondeXm
contiene lasNrealizaciones (valores observados) de las entradas cuando se utiliza el C<m>-ésimo valor de
recorte. Por ejemplo, utilizando las formas de lafigura 4-b,
es la i-ésima columna deXm
obtenida para una posición de muestra determinada, y contiene: para i <Nc(Nc= 12 para un filtro de Luma de lafigura 4-bes el número de coeficientes de filtro menos uno), la suma de los resultados del recorte de la diferencia entre la muestra vecina (de laj-ésima muestra filtrada) y laj-ésima muestra filtrada utilizando el mésimo valor de recorte, para los dos vecinos simétricos con índice i en la forma; y para i = 12, laj-ésima muestra filtrada; donde
es el valor en la filaiy la columnajde la matrizXm
.
[0590] La matriz de covarianza cruzada-recorte es una matriz de covarianza cruzada entre las realizaciones de la salida del filtro deseada (es decir, muestras originales) y las realizaciones deXc.
[0591] Por lo tanto, cuando se necesita construir/probar un filtro utilizando parámetros de recorte iguales a , se define para un filtro de Luma, por ejemplo, es el número de coeficientes de filtro menos uno, el último valor igual a cero es conveniente; se podría utilizar otro valor y tendría los mismos resultados, puesto que el coeficiente central 12 no se recorta). Se calcula la matriz de covarianzaEy la matriz de covarianza cruzada y para estos parámetros de recorte de tal manera que para cada i <Nc, j <Nce
para cada k <Nc. A continuación, se construye un filtro de Wiener utilizando estas dos matrices, tal como se explicó anteriormente para el ALF lineal.
[0592] En la etapa904, en lugar de combinar las estadísticas de las matrices de covarianza y covarianza cruzada, el codificador combina las estadísticas de cada matriz de covarianza-recorte y covarianza cruzada-recorte (en este caso, también, la combinación se realiza sumando las estadísticas).
[0593] En la etapa905, el modo utilizado para encontrar los grupos optimizados de filtros (es decir, el filtro fusionado optimizado) es similar al anterior. La diferencia principal es que para cada filtro probado/comparado, en lugar de calcular solo un filtro de Wiener, los parámetros de recorte se optimizan iterativamente, calculando en cada etapa un filtro de Wiener para parámetros de recorte específicos, para minimizar el error de salida del filtro (calculado sobre matrices de estadísticas). Un algoritmo de optimización simple consiste en comenzar con todos los valores de parámetros de recorte (c<i>) establecidos en cero (o alternativamente, en el valor de recorte medio o en cualquier valor por defecto), a continuación seguir las siguientes etapas en bucles mientras mejore el filtro (es decir, reduzca el error de salida): para cada valor de parámetro de recorte, tomar el siguiente valor de parámetro de recorte, si está disponible/permitido (es decir, índice < valor de índice máximo); si el filtro de Wiener calculado con este valor de parámetro de recorte es mejor, o tomar el valor de parámetro de recorte anterior, si está disponible/permitido (es decir, índice > 0), si el filtro de Wiener calculado con este valor de parámetro de recorte es mejor. Cuando se agrupan dos filtros, una estrategia podría ser comenzar la optimización con cada valor de parámetro de recorte establecido en el promedio de cada valor de parámetro de recorte de los dos filtros.
[0594] No hay un cambio real en las etapas906, 907, 908, 909, 910y911.
[0595] En la etapa912, un cambio en las estadísticas combinadas es el mismo que se describió para la etapa904. La determinación sobre el filtro de Croma en la etapa913corresponde a la optimización del filtro descrita para la etapa905. Las otras etapas no cambian, excepto la etapa918, en la que los parámetros de ALF incluyen los parámetros de recorte determinados para cada filtro.
[0596] Cabe señalar que en VTM-3.0 con el ALF “normal”, cuando el codificador deriva coeficientes de filtro enteros a partir de valores de punto flotante, primero realiza una cuantificación del valor de punto flotante a valores de punto fijo: para cada coeficiente de filtro, redondea la multiplicación del coeficiente de filtro por la precisión de punto fijo al valor entero más cercano. A continuación intenta mejorar la eficiencia del filtro ajustando iterativamente los coeficientes del filtro (para compensar el error de redondeo). El codificador también debe garantizar que la suma de todos los coeficientes de filtro sea igual a uno (multiplicada por la precisión de punto fijo), y que el coeficiente de filtro para la muestra central no exceda un valor máximo (para garantizar que su utilización en la multiplicación no termine utilizando demasiados bits).
[0597] Con realizaciones de la invención en las que la diferencia con las muestras vecinas se utiliza como entrada para el filtro, puesto que el coeficiente central es siempre uno, no hay necesidad de garantizar que no exceda el valor máximo. Además, no hay necesidad de rastrear a menudo el valor de la suma de todos los coeficientes del filtro.
[0598] La ventaja de estas realizaciones es una mejora en la eficiencia de la codificación.
[0599] Las descripciones de estas realizaciones mencionan la componente de luma y de croma, pero pueden ser adaptadas fácilmente a otras componentes como una sola componente de luma o componentes de RGB. En una realización o variante anterior, la invención resulta en modificar el filtrado en304y407en lafigura 3-ayfigura 4-apara utilizar funciones no lineales en las entradas del filtro para obtener un efecto de filtrado no lineal. Lafigura 2también se modifica para añadir nuevos elementos de sintaxis para señalizar parámetros adicionales para las funciones no lineales (un ejemplo de realización fue descrito haciendo referencia a lafigura 5). Implícitamente, los parámetros de filtrado de entrada en302y402se modifican para incluir además los parámetros adicionales para las funciones no lineales. Finalmente, la derivación del filtro en303y406se modifica para derivar las funciones no lineales para los filtros (es decir, para derivar los “filtros no lineales”). Por lo tanto, en la mayoría de las situaciones, las partes de imagen de salida305y408no son las mismas que las producidas en VTM-3.0 y tienen una calidad superior para muestras de entrada equivalentes/comparables y/o consiguen un mejor compromiso entre la calidad de la imagen de salida y la eficiencia de codificación. Se comprende que en otra realización/variante, el propio ALF se modifica de modo que funcione para filtrar utilizando cualquiera de las funciones no lineales mencionadas anteriormente.
[0600] Implementación de realizaciones de la invención
[0601] Una o varias de las realizaciones anteriores se pueden implementar en forma de un codificador o un decodificador, que realizan las etapas del procedimiento de una o varias de las realizaciones anteriores. Las siguientes realizaciones muestran dichas implementaciones.
[0602] Por ejemplo, un filtro de bucle adaptativo según cualquiera de las realizaciones anteriores puede ser utilizado en un post-filtrado 9415 realizado por un codificador en lafigura 10o un post-filtrado 9567 realizado por un decodificador en lafigura 11.
[0603] Lafigura 10muestra un diagrama de bloques de un codificador, según una realización de la invención. El codificador está representado por módulos conectados, estando adaptado cada módulo para implementar, por ejemplo en forma de instrucciones de programación para ser ejecutadas por una unidad central de procesamiento (Central Processing Unit, CPU) de un dispositivo, como mínimo una etapa correspondiente de un procedimiento que implementa, como mínimo, una realización de codificación de una imagen de una secuencia de imágenes, según una o varias realizaciones de la invención.
[0604] Una secuencia original de imágenes digitalesi0 ain 9401 es recibida como entrada por el codificador 9400. Cada imagen digital está representada por un conjunto de muestras, a veces también denominadas píxeles (a continuación, en el presente documento, se denominan píxeles). Un flujo de bits 9410 es emitido por el codificador 9400 tras la implementación del proceso de codificación. El flujo de bits 9410 comprende datos para una pluralidad de unidades de codificación o partes de imagen tales como fragmentos, comprendiendo cada fragmento una cabecera de fragmento para transmitir valores de codificación de parámetros de codificación utilizados para codificar el fragmento y un cuerpo de fragmento, que comprende los datos de vídeo codificados.
[0605] Las imágenes digitales de entradai0 ain 9401 son divididas en bloques de píxeles por un módulo 9402. Los bloques corresponden a partes de imagen y pueden ser de tamaños variables (por ejemplo, 4x4, 8x8, 16x16, 32x32, 64x64, 128x128 píxeles, y también se pueden considerar varios tamaños de bloques rectangulares). Se selecciona un modo de codificación para cada bloque de entrada. Se proporcionan dos familias de modos de codificación: modos de codificación basados en codificación de predicción espacial (predicción Intra), y modos de codificación basados en predicción temporal (codificación Inter, FUSIONAR, SALTAR). Los posibles modos de codificación son probados.
[0606] El módulo 9403 implementa un proceso de predicción Intra, en el cual el bloque determinado a ser codificado es predicho por un predictor calculado a partir de píxeles de la vecindad de dicho bloque a ser codificado. Una indicación del predictor Intra seleccionado y la diferencia entre el bloque determinado y su predictor es codificada para proporcionar un residuo si se selecciona la codificación Intra.
[0607] Una predicción temporal es implementada por un módulo de estimación de movimiento 9404 y un módulo de compensación de movimiento 9405. En primer lugar, se selecciona una imagen de referencia de entre un conjunto de imágenes de referencia 9416, y una parte de la imagen de referencia, también denominada zona de referencia o parte de imagen, que es la zona más cercana (más cercana en términos de similitud de valor de píxel) al bloque determinado a ser codificado, es seleccionada por el módulo de estimación de movimiento 9404. El módulo de compensación de movimiento 9405 predice entonces el bloque a ser codificado utilizando la zona seleccionada. La diferencia entre la zona de referencia seleccionada y el bloque determinado, también denominada bloque/datos residuales, es calculada por el módulo de compensación de movimiento 9405. La zona de referencia seleccionada se indica utilizando una información de movimiento (por ejemplo, un vector de movimiento).
[0608] Por lo tanto, en ambos casos (predicción espacial y temporal), se calcula un residuo restando el predictor del bloque original cuando no está en el modo SALTAR.
[0609] En la predicción INTRA implementada por el módulo 9403, se codifica una dirección de predicción. En la predicción Inter implementada por los módulos 9404, 9405, 9416, 9418, 9417, como mínimo un vector de movimiento o información (datos) para identificar dicho vector de movimiento se codifica para la predicción temporal. La información relevante para el vector de movimiento y al bloque residual se codifica si se selecciona la predicción Inter. Para reducir aún más la tasa de bits, suponiendo que el movimiento es homogéneo, el vector de movimiento se codifica por diferencia con respecto a un predictor de vector de movimiento. Los predictores de vector de movimiento de un conjunto de candidatos predictores de información de movimiento se obtienen del campo de vectores de movimiento 9418 mediante un módulo de codificación y predicción de vectores de movimiento 9417.
[0610] El codificador 9400 comprende además un módulo de selección 9406, para seleccionar un modo de codificación aplicando un criterio de coste de codificación, tal como un criterio de tasa-distorsión. Con el fin de reducir aún más las redundancias, una transformada (tal como una DCT) es aplicada por un módulo de transformada 9407 al bloque residual, y los datos transformados obtenidos son entonces cuantificados por un módulo de cuantificación 9408 y codificados por entropía por un módulo de codificación por entropía 9409. Finalmente, el bloque residual codificado del bloque actual que está siendo codificado se inserta en el flujo de bits 9410 cuando no está en el modo SALTAR y el modo de codificación seleccionado requiere la codificación del bloque residual.
[0611] El codificador 9400 también realiza la decodificación de la imagen codificada para producir una imagen de referencia (por ejemplo, aquellas en las imágenes de referencia 9416) para la estimación de movimiento de las imágenes subsiguientes. Esto permite que el codificador y un decodificador que reciben el flujo de bits tengan los mismos cuadros de referencia (por ejemplo, se utilizan imágenes reconstruidas o partes de imágenes reconstruidas). Un módulo de cuantificación inversa (“descuantificación”) 9411 realiza una cuantificación inversa (“descuantificación”) de los datos cuantificados, que es seguida por una transformación inversa realizada por un módulo de transformada inversa 9412. Un módulo de predicción intra 9413 utiliza información de predicción para determinar qué predictor utilizar para un bloque determinado y un módulo de compensación de movimiento 9414 añade realmente el residuo obtenido por el módulo 9412 a la zona de referencia obtenida del conjunto de imágenes de referencia 9416. A continuación, un post-filtrado es aplicado por un módulo 9415 para filtrar el cuadro reconstruido (imagen o partes de imagen) de píxeles para obtener otra imagen de referencia para el conjunto de imágenes de referencia 9416.
[0612] Lafigura 11muestra un diagrama de bloques de un decodificador 9560 que puede ser utilizado para recibir datos de un codificador, según un ejemplo de realización de la invención. El decodificador está representado por módulos conectados, estando adaptado cada módulo para implementar, por ejemplo en forma de instrucciones de programación para ser ejecutadas por una CPU de un dispositivo, una etapa correspondiente de un procedimiento implementado por el decodificador 9560.
[0613] El decodificador 9560 recibe un flujo de bits 9561 que comprende unidades codificadas (por ejemplo, datos que corresponden a una parte de imagen, un bloque o una unidad de codificación), estando cada una compuesta por una cabecera que contiene información sobre parámetros de codificación y un cuerpo que contiene los datos de vídeo codificados. Tal como se explicó con respecto a lafigura 10, los datos de vídeo codificados son codificados por entropía, y la información de movimiento (por ejemplo, índices de predictores de vectores de movimiento) son codificados, para una parte de imagen determinada (por ejemplo, un bloque o una CU), en un número predeterminado de bits. Los datos de vídeo codificados recibidos son decodificados por entropía por un módulo 9562. Los datos residuales son entonces descuantificados por el módulo 9563 y, a continuación, una transformada inversa es aplicada por un módulo 9564 para obtener valores de píxel. Los datos de modo que indican el modo de codificación también son decodificados por entropía y, basándose en el modo, se realiza una decodificación de tipo INTRA o una decodificación de tipo INTER en los bloques (unidades/conjuntos/grupos) codificados de datos de imagen. En el caso del modo INTRA, un predictor INTRA es determinado por un módulo de predicción intra 9565 basándose en el modo de predicción intra especificado en el flujo de bits (por ejemplo, el modo de predicción intra es determinable utilizando datos proporcionados en el flujo de bits). Si el modo es el modo INTER, la información de predicción de movimiento es extraída/obtenida del flujo de bits para encontrar (identificar) la zona de referencia utilizada por el codificador. La información de predicción de movimiento comprende el índice de cuadro de referencia y el residuo del vector de movimiento, por ejemplo. El predictor del vector de movimiento es añadido al residuo del vector de movimiento por un módulo de decodificación de vectores de movimiento 9570 para obtener el vector de movimiento.
[0614] El módulo de decodificación de vectores de movimiento 9570 aplica decodificación de vectores de movimiento para cada parte de imagen (por ejemplo, bloque actual o CU) codificada por predicción de movimiento. Una vez que se ha obtenido un índice del predictor del vector de movimiento para el bloque
actual, el valor real del vector de movimiento asociado con la parte de imagen (por ejemplo, bloque actual o CU) puede ser decodificado y utilizado para aplicar compensación de movimiento por un módulo 9566. La parte de imagen de referencia indicada por el vector de movimiento decodificado es extraída/obtenida de un conjunto de imágenes de referencia 9568 de modo que el módulo 9566 puede realizar la compensación de movimiento. Los datos de campo de vectores de movimiento 9571 se actualizan con el vector de movimiento decodificado para ser utilizados para la predicción de vectores de movimiento decodificados posteriormente. Finalmente, se obtiene un bloque decodificado. Donde sea apropiado, un post-filtrado es aplicado por un módulo de post-filtrado 9567. Una señal de vídeo decodificada 9569 es finalmente obtenida y proporcionada por el decodificador 9560.
[0615] Lafigura 12muestra un sistema de comunicación de datos en el que una o varias realizaciones de la invención pueden ser implementadas. El sistema de comunicación de datos comprende un dispositivo de transmisión, en este caso un servidor 9201, que puede funcionar para transmitir paquetes de datos de un flujo de datos 9204, a un dispositivo de recepción, en este caso un terminal cliente 9202, a través de una red 9200 de comunicación de datos. La red 9200 de comunicación de datos puede ser una red de área amplia (Wide Area Network, WAN) o una red de área local (Local Area Network, LAN). Dicha red puede ser, por ejemplo, una red inalámbrica (Wifi / 802.11a o b o g), una red Ethernet, una red Internet o una red mixta compuesta de varias redes diferentes. En una realización concreta de la invención, el sistema de comunicación de datos puede ser un sistema de difusión de televisión digital en el que el servidor 9201 envía el mismo contenido de datos a múltiples clientes.
[0616] El flujo de datos 9204 proporcionado por el servidor 9201 puede estar compuesto de datos multimedia que representan datos de vídeo y audio. Los flujos de datos de audio y vídeo pueden, en algunas realizaciones de la invención, ser capturados por el servidor 9201 utilizando un micrófono y una cámara, respectivamente. En algunas realizaciones, los flujos de datos pueden ser almacenados en el servidor 9201 o recibidos por el servidor 9201 desde otro proveedor de datos, o generados en el servidor 9201. El servidor 9201 está provisto de un codificador para codificar flujos de vídeo y audio, en concreto, para proporcionar un flujo de bits comprimido para la transmisión que es una representación más compacta de los datos presentados como entrada al codificador. Con el fin de obtener una mejor relación entre la calidad de los datos transmitidos y la cantidad de datos transmitidos, la compresión de los datos de vídeo puede ser, por ejemplo, según el formato de codificación de vídeo de alta eficiencia (High Efficiency Video Coding, HEVC) o el formato H.264/codificación de vídeo avanzada (Advanced Video Coding, AVC) o el formato de codificación de vídeo versátil (Versatile Video Coding, VVC). El cliente 9202 recibe el flujo de bits transmitido y decodifica el flujo de bits reconstruido para reproducir imágenes de vídeo en un dispositivo de visualización y los datos de audio mediante un altavoz.
[0617] Aunque en esta realización se considera un escenario de transmisión en tiempo real, se apreciará que en algunas realizaciones de la invención la comunicación de datos entre un codificador y un decodificador puede ser realizada utilizando, por ejemplo, un dispositivo de almacenamiento de medios tal como un disco óptico. En una o varias realizaciones de la invención, una imagen de vídeo puede ser transmitida con datos representativos de desfases de compensación para su aplicación a píxeles reconstruidos de la imagen para proporcionar píxeles filtrados en una imagen final.
[0618] Lafigura 13muestra esquemáticamente un dispositivo de procesamiento 9300 configurado para implementar, como mínimo, una realización de la invención. El dispositivo de procesamiento 9300 puede ser un dispositivo tal como un microordenador, una estación de trabajo, un terminal de usuario o un dispositivo portátil ligero. El dispositivo/aparato 9300 comprende un bus de comunicación 9313, conectado a:
[0619] - una unidad central de procesamiento 9311, tal como un microprocesador, denotado por CPU;
[0620] - una memoria de solo lectura 9307, denotada por ROM, para almacenar instrucciones/programas informáticos para accionar el dispositivo 9300 y/o implementar la invención;
[0621] - una memoria de acceso aleatorio 9312, denotada por RAM, para almacenar el código ejecutable del procedimiento de las realizaciones de la invención, así como los registros adaptados para registrar variables y parámetros necesarios para implementar el procedimiento de codificación de una secuencia de imágenes digitales y/o el procedimiento de decodificación de un flujo de bits, según las realizaciones de la invención; y - una interfaz de comunicación 9302 conectada a una red de comunicación 9303 a través de la cual se transmiten o reciben datos digitales a ser procesados.
[0622] Opcionalmente, el aparato 9300 también puede incluir los siguientes componentes:
[0623] - un medio 9304 de almacenamiento de datos, tal como un disco duro, para almacenar programas informáticos para implementar procedimientos de una o varias realizaciones de la invención y datos utilizados o producidos durante la implementación de una o varias realizaciones de la invención;
[0624] - una unidad 9305 de disco para un disco 9306 (por ejemplo, un medio de almacenamiento), estando la unidad 9305 de disco adaptada para leer datos del disco 9306 o para escribir datos en dicho disco 9306; o
- una pantalla 9309 para mostrar datos y/o servir como una interfaz gráfica con un usuario, por medio de un teclado 9310, una pantalla táctil o cualquier otro medio de puntero/entrada.
[0625] El aparato 9300 puede estar conectado a diversos periféricos, tales como, por ejemplo, una cámara digital 9320 o un micrófono 9308, estando conectado cada uno a una tarjeta de entrada/salida (no mostrada) para suministrar datos multimedia al aparato 9300.
[0626] El bus de comunicación 9313 proporciona comunicación e interoperabilidad entre los diversos elementos incluidos en el aparato 9300 o conectados a él. La representación del bus no es limitativa y, en concreto, la unidad central de procesamiento 9311 puede funcionar para comunicar instrucciones a cualquier elemento del aparato 9300 directamente o por medio de otro elemento del aparato 9300.
[0627] El disco 9306 puede ser reemplazado por cualquier medio de información tal como, por ejemplo, un disco compacto (CD-ROM), regrabable o no, un disco ZIP o una tarjeta de memoria y, en términos generales, por un medio de almacenamiento de información que pueda ser leído por un microordenador o por un procesador, integrado o no en el aparato, posiblemente extraíble y adaptado para almacenar uno o varios programas cuya ejecución permite que el procedimiento de codificación de una secuencia de imágenes digitales y/o el procedimiento de decodificación de un flujo de bits según la invención, sean implementados. El código ejecutable puede ser almacenado ya sea en la memoria de solo lectura 9307, en el disco duro 9304 o en un medio digital extraíble tal como, por ejemplo, un disco 9306 tal como se describió anteriormente. Según una variante, el código ejecutable de los programas puede ser recibido por medio de la red de comunicación 9303, a través de la interfaz 9302, con el fin de ser almacenado en uno de los medios de almacenamiento del aparato 9300 antes de ser ejecutado, por ejemplo en el disco duro 9304.
[0628] La unidad central de procesamiento 9311 está adaptada para controlar y dirigir la ejecución de las instrucciones o partes de código de software del programa o programas según la invención, instrucciones que están almacenadas en uno de los medios de almacenamiento mencionados anteriormente. Con el arranque, el programa o programas que están almacenados en una memoria no volátil, por ejemplo en el disco duro 9304, el disco 9306 o en la memoria de solo lectura 9307, son transferidos a la memoria de acceso aleatorio 9312, que contiene entonces el código ejecutable del programa o programas, así como registros para almacenar las variables y parámetros necesarios para implementar la invención.
[0629] En esta realización, el aparato es un aparato programable que utiliza software para implementar la invención. No obstante, alternativamente, la presente invención puede ser implementada en hardware (por ejemplo, en la forma de un circuito integrado de aplicación específica o ASIC (Application Specific Integrated Circuit). Implementación de realizaciones de la invención
[0630] También se comprende que, según otras realizaciones de la presente invención, se da a conocer un decodificador, según una realización mencionada anteriormente, en un terminal de usuario tal como un ordenador, un teléfono móvil (un teléfono celular), una tableta o cualquier otro tipo de dispositivo (por ejemplo, un aparato de visualización) capaz de proporcionar/mostrar un contenido a un usuario. Según otra realización más, se da a conocer un codificador según una realización mencionada anteriormente en un aparato de captura de imágenes que también comprende una cámara, una videocámara o una cámara de red (por ejemplo, una televisión de circuito cerrado o cámara de videovigilancia) que captura y proporciona el contenido para que el codificador lo codifique. A continuación se dan a conocer dos de dichas realizaciones haciendo referencia a las figuras 14 y 15.
[0631] Lafigura 14es un diagrama que muestra un sistema 9450 de cámara de red que comprende una cámara 9452 de red y un aparato cliente 9454.
[0632] La cámara 9452 de red comprende una unidad 9456 de formación de imágenes, una unidad de codificación 9458, una unidad de comunicación 9460 y una unidad de control 9462. La cámara 9452 de red y el aparato cliente 9454 están mutuamente conectados para poder comunicarse entre sí a través de la red 9200. La unidad 9456 de formación de imágenes comprende una lente y un sensor de imagen (por ejemplo, un dispositivo de carga acoplada (Charge Coupled Device, CCD) o un semiconductor de óxido metálico complementario (Complementary Metal Oxide Semiconductor, CMOS)), y captura una imagen de un objeto y genera datos de imagen basados en la imagen. Esta imagen puede ser una imagen fija o una imagen de vídeo. La unidad de formación de imágenes también puede comprender medios de zum y/o medios de movimiento panorámico que están adaptados para realizar zum o movimiento panorámico (ya sea óptica o digitalmente) respectivamente. La unidad de codificación 9458 codifica los datos de imagen utilizando dichos procedimientos de codificación explicados en una o varias de las realizaciones anteriores. La unidad de codificación 9458 utiliza, como mínimo, uno de los procedimientos de codificación explicados en las realizaciones anteriores. Como otro ejemplo, la unidad de codificación 9458 puede utilizar una combinación de procedimientos de codificación explicados en las realizaciones anteriores.
[0633] La unidad de comunicación 9460 de la cámara 9452 de red transmite los datos de imagen codificados por la unidad de codificación 9458 al aparato cliente 9454. Además, la unidad de comunicación 9460 también puede recibir comandos desde el aparato cliente 9454. Los comandos comprenden comandos para establecer parámetros para la codificación por parte de la unidad de codificación 9458. La unidad de control 9462 controla otras unidades en la cámara 9452 de red, según los comandos recibidos por la unidad de comunicación 9460 o la entrada del usuario.
[0635] El aparato cliente 9454 comprende una unidad de comunicación 9464, una unidad de decodificación 9466 y una unidad de control 9468. La unidad de comunicación 9464 del aparato cliente 9454 puede transmitir comandos a la cámara 9452 de red. Además, la unidad de comunicación 9464 del aparato cliente 9454 recibe los datos de imagen codificados de la cámara 9452 de red. La unidad de decodificación 9466 decodifica los datos de imagen codificados utilizando dichos procedimientos de decodificación explicados en una o varias de las realizaciones anteriores. Como otro ejemplo, la unidad de decodificación 9466 puede utilizar una combinación de procedimientos de decodificación explicados en las realizaciones anteriores. La unidad de control 9468 del aparato cliente 9454 controla otras unidades en el aparato cliente 9454 según una operación del usuario o los comandos recibidos por la unidad de comunicación 9464. La unidad de control 9468 del aparato cliente 9454 también puede controlar un aparato de visualización 9470 de modo que muestre una imagen decodificada por la unidad de decodificación 9466.
[0637] La unidad de control 9468 del aparato cliente 9454 también puede controlar el aparato de visualización 9470 para mostrar una GUI (Graphical User Interface, Interfaz Gráfica de Usuario) para designar valores de los parámetros para la cámara 9452 de red, por ejemplo, de los parámetros para la codificación, por la unidad de codificación 9458. La unidad de control 9468 del aparato cliente 9454 también puede controlar otras unidades en el aparato cliente 9454, según la entrada de operación del usuario en la GUI mostrada por el aparato de visualización 9470. La unidad de control 9468 del aparato cliente 9454 también puede controlar la unidad de comunicación 9464 del aparato cliente 9454 para transmitir comandos a la cámara 9452 de red que designan valores de los parámetros para la cámara 9452 de red, según la entrada de operación del usuario en la GUI mostrada por el aparato de visualización 9470.
[0639] Lafigura 15es un diagrama que muestra un teléfono inteligente 9500. El teléfono inteligente 9500 comprende una unidad de comunicación 9502, una unidad de decodificación/codificación 9504, una unidad de control 9506 y una unidad de visualización 9508.
[0641] La unidad de comunicación 9502 recibe los datos de imagen codificados a través de la red 9200. La unidad de decodificación/codificación 9504 decodifica los datos de imagen codificados recibidos por la unidad de comunicación 9502. La unidad de decodificación/codificación 9504 decodifica los datos de imagen codificados utilizando dichos procedimientos de decodificación explicados en una o varias de las realizaciones anteriores. La unidad de decodificación/codificación 9504 también puede utilizar, como mínimo, uno de los procedimientos de codificación o decodificación explicados en las realizaciones anteriores. Como otro ejemplo, la unidad de decodificación/codificación 9504 puede utilizar una combinación de procedimientos de decodificación o codificación explicados en las realizaciones anteriores. La unidad de control 9506 controla otras unidades en el teléfono inteligente 9500, según una operación del usuario o según comandos recibidos por la unidad de comunicación 9502. Por ejemplo, la unidad de control 9506 controla una unidad de visualización 9508 para que muestre una imagen decodificada por la unidad de decodificación/codificación 9504.
[0643] El teléfono inteligente puede comprender además un dispositivo de grabación de imágenes 9510 (por ejemplo, una cámara digital y una circuitería asociada) para grabar imágenes o vídeos. Dichas imágenes o vídeos grabados pueden ser codificados por la unidad de decodificación/codificación 9504 bajo instrucciones de la unidad de control 9506. El teléfono inteligente puede comprender además sensores 9512 adaptados para detectar la orientación del dispositivo móvil. Dichos sensores podrían incluir un acelerómetro, giroscopio, brújula, unidad de posicionamiento global (Global Positioning System, GPS) o sensores de posición similares. Dichos sensores 9512 pueden determinar si el teléfono inteligente cambia de orientación, y dicha información puede ser utilizada cuando se codifica un flujo de vídeo.
[0645] Si bien la presente invención se ha descrito haciendo referencia a realizaciones, se debe comprender que la invención no está limitada a las realizaciones dadas a conocer. Los expertos en la materia apreciarán que se podrían realizar diversos cambios y modificaciones sin apartarse del alcance de la invención, tal como está definida en las reivindicaciones adjuntas. Todas las características dadas a conocer en esta memoria descriptiva (incluyendo cualquier reivindicación adjunta, resumen y dibujos), y/o todas las etapas de cualquier procedimiento o proceso dado a conocer de este modo, pueden ser combinadas en cualquier combinación, excepto aquellas combinaciones en las que, como mínimo, algunas de dichas características y/o etapas sean mutuamente excluyentes y, por supuesto, solo en la medida en que la combinación caiga bajo el alcance de una o varias de las reivindicaciones adjuntas.
[0646] También se comprende que cualquier resultado de comparación, determinación, evaluación, selección, ejecución, realización o consideración descritos anteriormente, por ejemplo, una selección realizada durante un proceso de codificación o filtrado, puede ser indicada en o ser determinable/inferible a partir de datos en un flujo de bits, por ejemplo, un indicador o información indicativa del resultado, de modo que el resultado indicado o determinado/inferido se puede utilizar en el procesamiento, en lugar de realizar realmente la comparación, determinación, evaluación, selección, ejecución, realización o consideración, por ejemplo, durante un proceso de decodificación.
[0648] En las reivindicaciones, la expresión “que comprende” no excluye otros elementos o etapas, y el artículo indefinido “un” o “una” no excluye una pluralidad. El mero hecho de que se enumeren diferentes características en reivindicaciones dependientes diferentes entre sí no indica que una combinación de dichas características no pueda ser utilizada de manera ventajosa. Los números de referencia que aparecen en las reivindicaciones son solo a modo de ilustración, y no tendrán ningún efecto limitativo sobre el alcance de las reivindicaciones.
[0650] En las realizaciones anteriores, las funciones descritas pueden ser implementadas en hardware, software, firmware o cualquier combinación de los mismos. Si se implementan en software, las funciones pueden ser almacenadas o transmitidas como una o varias instrucciones o código, en un medio legible por ordenador, y ser ejecutadas por una unidad de procesamiento basada en hardware.
[0652] Los medios legibles por ordenador pueden incluir medios de almacenamiento legibles por ordenador, que corresponden a un medio tangible tal como medios de almacenamiento de datos, o medios de comunicación que incluyen cualquier medio que facilite la transferencia de un programa informático de un lugar a otro, por ejemplo, según un protocolo de comunicación. De esta manera, los medios legibles por ordenador pueden corresponder, en general, a (1) medios de almacenamiento tangibles legibles por ordenador que 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 cualquier medio disponible al que puedan acceder uno o varios ordenadores o uno o varios procesadores para recuperar instrucciones, código y/o estructuras de datos para la implementación de las técnicas descritas en esta invención. Un producto de programa informático puede incluir un medio legible por ordenador. A modo de ejemplo, y no de limitación, dichos medios de almacenamiento legibles por ordenador pueden comprender RAM, ROM, EEPROM, CD-ROM u otro almacenamiento de disco óptico, almacenamiento de disco magnético u otros dispositivos de almacenamiento magnético, memoria flash o cualquier otro medio que pueda ser utilizado para almacenar el código de programa deseado en forma de instrucciones o estructuras de datos y al que pueda acceder un ordenador. Asimismo, cualquier conexión se denomina adecuadamente medio legible por ordenador. Por ejemplo, si las instrucciones se transmiten desde un sitio web, servidor u otra fuente remota utilizando un cable coaxial, cable de fibra óptica, par trenzado, línea de abonado digital (Digital Subscriber Line, DSL) o tecnologías inalámbricas tales como infrarrojos, radio y microondas, entonces el cable coaxial, el cable de fibra óptica, el par trenzado, la DSL o las tecnologías inalámbricas tales como infrarrojos, radio y microondas se incluyen en la definición de medio. Se debe comprender, sin embargo, que los medios de almacenamiento legibles por ordenador y los medios de almacenamiento de datos no incluyen conexiones, ondas portadoras, señales u otros medios transitorios, sino que se dirigen a medios de almacenamiento tangibles no transitorios. El término disco, tal como se utiliza en el presente documento, incluye el disco compacto (Compact Disc, CD), el disco láser, el disco óptico, el disco versátil digital (Digital Versatile Disc, DVD), el disquete y el disco Blu-ray, donde los discos (disks) normalmente reproducen datos magnéticamente, mientras que los discos (discs) reproducen datos ópticamente con láseres. Las combinaciones de lo anterior también se deben incluir dentro del alcance de los medios legibles por ordenador.
[0654] Las instrucciones pueden ser ejecutadas por uno o varios procesadores, tales como uno o varios procesadores de señales digitales (Digital Signal Processor, DSP), microprocesadores de propósito general, circuitos integrados de aplicación específica (ASIC), matrices de puertas lógicas programables en campo (Field Programmable Gate Arrays, FPGA) u otra circuitería lógica integrada o discreta equivalente. En consecuencia, el término “procesador”, tal como se utiliza en el presente documento, puede referirse a cualquiera de las estructuras anteriores o a cualquier otra estructura adecuada para la implementación de las técnicas descritas en el presente documento. Además, en algunos aspectos, la funcionalidad descrita en el presente documento se puede proporcionar dentro de módulos de hardware y/o software dedicados configurados para codificación y decodificación, o ser incorporados en un códec combinado. Asimismo, las técnicas podrían implementarse completamente en uno o varios circuitos o elementos lógicos.
[0656] Si bien la presente invención se ha descrito haciendo referencia a realizaciones, se debe comprender que la invención no está limitada a las realizaciones dadas a conocer. El alcance de la invención está definido por las reivindicaciones adjuntas.
Claims (11)
1. REIVINDICACIONES
1. Procedimiento de filtrado de bucle adaptativo, comprendiendo el procedimiento:
filtrar una muestra actual de una parte de imagen de una imagen basándose en uno o varios valores de una muestra vecina de la muestra actual,
en el que el filtrado está dispuesto para utilizar una ecuación no lineal caracterizada por que la ecuación no lineal comprende, como mínimo, una función de recorte para recortar un valor de diferencia entre un valor de la muestra vecina y un valor de la muestra actual, y por que el filtrado está dispuesto para utilizar un índice para determinar un valor de parámetro de recorte de entre una pluralidad de valores de parámetros de recorte disponibles para ser utilizados por la, como mínimo, una función de recorte.
2. Procedimiento, según la reivindicación 1, en el que:
la función de recorte devuelve uno de: máx (-b, mín (b, d)), mín (b, máx (-b, d)), máx (c-b, mín (c+b, n)), o mín (c+b, máx (c-b, n)); y
c es el valor de la muestra actual, n es el valor de la muestra vecina, d = n - c, y b es el parámetro de recorte.
3. Procedimiento de codificación de una o varias imágenes en un flujo de bits, comprendiendo el procedimiento realizar un filtrado de bucle adaptativo, según cualquiera de las reivindicaciones 1 o 2.
4. Procedimiento de decodificación de una o varias imágenes, comprendiendo el procedimiento realizar un filtrado de bucle adaptativo, según cualquiera de las reivindicaciones 1 o 2.
5. Procedimiento, según la reivindicación 4, que comprende, además:
recibir un flujo de bits;
decodificar información del flujo de bits recibido para obtener la imagen.
6. Dispositivo que comprende medios configurados para realizar el procedimiento según cualquiera de las reivindicaciones 1 a 5.
7. Codificador para codificar una imagen, estando configurado el codificador para realizar el procedimiento según cualquiera de las reivindicaciones 1 a 3.
8. Decodificador para decodificar una imagen, estando configurado el decodificador para realizar el procedimiento según la reivindicación 4 o 5.
9. Programa que, cuando se ejecuta en un ordenador o procesador, hace que el ordenador o procesador lleve a cabo el procedimiento según cualquiera de las reivindicaciones 1 a 5.
10. Medio de almacenamiento legible por ordenador, que almacena un programa informático según la reivindicación 9.
11. Señal que porta un conjunto de datos de información para una imagen codificada utilizando el procedimiento según la reivindicación 3 y representada por un flujo de bits, comprendiendo la imagen un conjunto de muestras reconstruibles, teniendo cada muestra reconstruible un valor de muestra, en la que el conjunto de datos de información comprende datos de control necesarios para controlar el filtrado, según cualquiera de las reivindicaciones 1 o 2, en una primera muestra reconstruible basándose en valores de muestra de muestras vecinas de la primera muestra reconstruible, en la que los datos de control incluyen el índice para determinar un valor de parámetro de recorte, según se define en la reivindicación 1.
Applications Claiming Priority (3)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| GB1821156.5A GB2580173B (en) | 2018-12-21 | 2018-12-21 | A filter |
| GB1901775.5A GB2580190B (en) | 2018-12-21 | 2019-02-08 | Adaptive loop filter using a nonlinear function |
| PCT/EP2019/083066 WO2020126411A1 (en) | 2018-12-21 | 2019-11-29 | Adaptive loop filtering (alf) with non-linear clipping |
Publications (1)
| Publication Number | Publication Date |
|---|---|
| ES3060652T3 true ES3060652T3 (en) | 2026-03-27 |
Family
ID=65364473
Family Applications (1)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| ES19813297T Active ES3060652T3 (en) | 2018-12-21 | 2019-11-29 | Adaptive loop filtering (alf) with non-linear clipping |
Country Status (10)
| Country | Link |
|---|---|
| US (7) | US11750804B2 (es) |
| EP (6) | EP4708871A2 (es) |
| JP (2) | JP7308946B2 (es) |
| KR (1) | KR102764983B1 (es) |
| CN (6) | CN113228646B (es) |
| BR (1) | BR112021012035A2 (es) |
| ES (1) | ES3060652T3 (es) |
| GB (2) | GB2580173B (es) |
| TW (1) | TWI834773B (es) |
| WO (1) | WO2020126411A1 (es) |
Families Citing this family (38)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| GB2580173B (en) * | 2018-12-21 | 2022-07-27 | Canon Kk | A filter |
| CN117956148A (zh) * | 2019-03-08 | 2024-04-30 | 佳能株式会社 | 自适应环路滤波器 |
| KR20230165888A (ko) * | 2019-04-02 | 2023-12-05 | 베이징 바이트댄스 네트워크 테크놀로지 컴퍼니, 리미티드 | 양방향 광학 흐름 기반 비디오 코딩 및 디코딩 |
| WO2020211867A1 (en) | 2019-04-19 | 2020-10-22 | Beijing Bytedance Network Technology Co., Ltd. | Delta motion vector in prediction refinement with optical flow process |
| CN118540470A (zh) | 2019-04-19 | 2024-08-23 | 北京字节跳动网络技术有限公司 | 不同运动矢量细化中的基于区域的梯度计算 |
| US11368684B2 (en) * | 2019-04-23 | 2022-06-21 | Qualcomm Incorporated | Adaptation parameter sets (APS) for adaptive loop filter (ALF) parameters |
| US11284114B2 (en) * | 2019-04-23 | 2022-03-22 | Qualcomm Incorporated | Adaptive loop filter set index signaling |
| US11356662B2 (en) * | 2019-05-21 | 2022-06-07 | Qualcomm Incorporated | Simplification of clipping value calculation for adaptive loop filters |
| JP6811931B2 (ja) * | 2019-06-20 | 2021-01-13 | Kddi株式会社 | 画像復号装置、画像復号方法及びプログラム |
| JP6912642B2 (ja) | 2019-06-20 | 2021-08-04 | Kddi株式会社 | 画像復号装置、画像復号方法及びプログラム |
| CN113766248B (zh) * | 2019-06-25 | 2022-10-18 | 北京大学 | 环路滤波的方法与装置 |
| WO2021025167A1 (en) * | 2019-08-08 | 2021-02-11 | Panasonic Intellectual Property Corporation Of America | System and method for video coding |
| US12200206B2 (en) | 2019-12-17 | 2025-01-14 | Telefonaktiebolaget Lm Ericsson (Publ) | Low complexity image filter |
| CN115462071B (zh) * | 2020-03-11 | 2025-03-25 | 抖音视界有限公司 | 处理视频数据的方法及装置、介质、存储比特流的方法 |
| WO2021244419A1 (en) | 2020-05-31 | 2021-12-09 | Beijing Bytedance Network Technology Co., Ltd. | Constraint signaling using general constraint information syntax element |
| US12120301B2 (en) * | 2020-09-30 | 2024-10-15 | Qualcomm Incorporated | Constraining operational bit depth of adaptive loop filtering for coding of video data at different bit depth |
| JP6941752B1 (ja) * | 2020-11-18 | 2021-09-29 | Kddi株式会社 | 画像復号装置、画像復号方法及びプログラム |
| JP7320573B2 (ja) * | 2020-11-18 | 2023-08-03 | Kddi株式会社 | 画像復号装置、画像復号方法及びプログラム |
| US11546638B2 (en) * | 2020-12-08 | 2023-01-03 | Tencent America LLC | Method and apparatus for video filtering |
| CN116746152A (zh) * | 2021-01-22 | 2023-09-12 | Oppo广东移动通信有限公司 | 视频编解码方法与系统、及视频编码器与视频解码器 |
| CN113852831B (zh) * | 2021-03-05 | 2023-03-28 | 杭州海康威视数字技术股份有限公司 | 滤波方法、装置、设备及机器可读存储介质 |
| US11785213B2 (en) * | 2021-03-12 | 2023-10-10 | Tencent America LLC | Method and apparatus for video filtering |
| US11750846B2 (en) * | 2021-03-22 | 2023-09-05 | Tencent America LLC | Method and apparatus for video filtering |
| CN117813823A (zh) * | 2021-08-14 | 2024-04-02 | 抖音视界有限公司 | 视频编解码中自适应环路滤波器的改进融合模式 |
| WO2023020309A1 (en) * | 2021-08-14 | 2023-02-23 | Beijing Bytedance Network Technology Co., Ltd. | Advanced fusion mode for adaptive loop filter in video coding |
| CN117882371A (zh) * | 2021-08-14 | 2024-04-12 | 抖音视界有限公司 | 视频编解码中的自适应环路滤波器的融合模式 |
| WO2024012167A1 (en) * | 2022-07-15 | 2024-01-18 | Mediatek Inc. | Method and apparatus for adaptive loop filter with non-local or high degree taps for video coding |
| WO2024017200A1 (en) * | 2022-07-18 | 2024-01-25 | Mediatek Inc. | Method and apparatus for adaptive loop filter with tap constraints for video coding |
| WO2024082899A1 (en) * | 2022-10-18 | 2024-04-25 | Mediatek Inc. | Method and apparatus of adaptive loop filter selection for positional taps in video coding |
| US20240357095A1 (en) * | 2023-04-13 | 2024-10-24 | Qualcomm Incorporated | Adaptive video filter |
| US12445623B2 (en) * | 2023-08-14 | 2025-10-14 | Tencent America LLC | Adaptive range for clipping processes for video and image compression |
| CN117221556A (zh) * | 2023-08-22 | 2023-12-12 | 星宸科技股份有限公司 | 色度帧内预测模式的决定方法及图像编码装置 |
| CN120281910A (zh) * | 2024-01-08 | 2025-07-08 | 腾讯科技(深圳)有限公司 | 解码方法、编码方法、电子设备及存储介质 |
| WO2025185711A1 (en) * | 2024-03-07 | 2025-09-12 | Mediatek Inc. | Method and device of alternative clipping in adaptive loop filter |
| WO2026000233A1 (zh) * | 2024-06-26 | 2026-01-02 | Oppo广东移动通信有限公司 | 编解码方法、编解码器、码流以及存储介质 |
| WO2026010342A1 (ko) * | 2024-07-02 | 2026-01-08 | 삼성전자 주식회사 | 영상의 필터링 장치 및 방법 |
| WO2026007113A1 (zh) * | 2024-07-05 | 2026-01-08 | Oppo广东移动通信有限公司 | 编解码方法、码流、编码器、解码器以及存储介质 |
| WO2026021541A1 (en) * | 2024-07-24 | 2026-01-29 | Douyin Vision Co., Ltd. | Method, apparatus, and medium for video processing |
Family Cites Families (28)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| CN101754010A (zh) * | 2008-12-18 | 2010-06-23 | 北京中星微电子有限公司 | 视频数据编码的环路滤波方法和滤波器 |
| KR101647376B1 (ko) * | 2009-03-30 | 2016-08-10 | 엘지전자 주식회사 | 비디오 신호 처리 방법 및 장치 |
| US8259819B2 (en) * | 2009-12-10 | 2012-09-04 | Hong Kong Applied Science and Technology Research Institute Company Limited | Method and apparatus for improving video quality by utilizing a unified loop filter |
| US9094658B2 (en) | 2010-05-10 | 2015-07-28 | Mediatek Inc. | Method and apparatus of adaptive loop filtering |
| US20120183078A1 (en) * | 2011-01-14 | 2012-07-19 | Samsung Electronics Co., Ltd. | Filter adaptation with directional features for video/image coding |
| JP2012213128A (ja) * | 2011-03-24 | 2012-11-01 | Sony Corp | 画像処理装置および方法 |
| US9641866B2 (en) | 2011-08-18 | 2017-05-02 | Qualcomm Incorporated | Applying partition-based filters |
| CN103891292B (zh) | 2011-10-24 | 2018-02-02 | 寰发股份有限公司 | 视频数据环路滤波处理方法及其装置 |
| EP2774371B1 (en) * | 2011-11-03 | 2020-08-26 | Sun Patent Trust | Efficient rounding for deblocking |
| GB201119206D0 (en) | 2011-11-07 | 2011-12-21 | Canon Kk | Method and device for providing compensation offsets for a set of reconstructed samples of an image |
| WO2013103893A1 (en) * | 2012-01-05 | 2013-07-11 | General Instrument Corporation | Devices and methods for multipass sample adaptive offset coding |
| TWI569625B (zh) * | 2012-04-06 | 2017-02-01 | Sony Corp | Image processing apparatus and method, program, and recording medium |
| EP3069511A4 (en) * | 2013-11-15 | 2017-09-27 | MediaTek Inc. | Method of block-based adaptive loop filtering |
| KR102276854B1 (ko) * | 2014-07-31 | 2021-07-13 | 삼성전자주식회사 | 인루프 필터 파라미터 예측을 사용하는 비디오 부호화 방법 및 그 장치, 비디오 복호화 방법 및 그 장치 |
| MX368598B (es) * | 2015-05-20 | 2019-10-08 | Ericsson Telefon Ab L M | Procesamiento y codificacion de pixeles. |
| CN107736027B (zh) * | 2015-06-12 | 2021-06-01 | 松下知识产权经营株式会社 | 图像编码方法、图像解码方法、图像编码装置及图像解码装置 |
| WO2016204374A1 (ko) | 2015-06-18 | 2016-12-22 | 엘지전자 주식회사 | 영상 코딩 시스템에서 영상 필터링 방법 및 장치 |
| JP2019521571A (ja) * | 2016-05-13 | 2019-07-25 | インターデジタル ヴイシー ホールディングス, インコーポレイテッド | 適応クリッピングを用いた映像コード化の方法および装置 |
| EP3244611A1 (en) * | 2016-05-13 | 2017-11-15 | Thomson Licensing | Method and apparatus for video coding with adaptive clipping of pixel values |
| EP3297282A1 (en) * | 2016-09-15 | 2018-03-21 | Thomson Licensing | Method and apparatus for video coding with adaptive clipping |
| TWI833248B (zh) * | 2017-04-06 | 2024-02-21 | 美商松下電器(美國)知識產權公司 | 解碼方法及編碼方法 |
| WO2019078686A1 (ko) * | 2017-10-20 | 2019-04-25 | 한국전자통신연구원 | 영상 부호화/복호화 방법, 장치 및 비트스트림을 저장한 기록 매체 |
| GB2580173B (en) * | 2018-12-21 | 2022-07-27 | Canon Kk | A filter |
| US11356662B2 (en) * | 2019-05-21 | 2022-06-07 | Qualcomm Incorporated | Simplification of clipping value calculation for adaptive loop filters |
| US11973948B2 (en) * | 2019-06-19 | 2024-04-30 | Sony Group Corporation | Image processing device and method |
| MX2022000992A (es) * | 2019-07-26 | 2022-05-03 | Hfi Innovation Inc | Metodo y aparato de filtracion de bucle adaptativo de componentes cruzados para codificacion de video. |
| JP2021034848A (ja) * | 2019-08-22 | 2021-03-01 | シャープ株式会社 | 画像復号装置 |
| US11284115B2 (en) * | 2020-03-31 | 2022-03-22 | Sharp Kabushiki Kaisha | Systems and methods for applying adaptive loop filters in video coding |
-
2018
- 2018-12-21 GB GB1821156.5A patent/GB2580173B/en active Active
-
2019
- 2019-02-08 GB GB1901775.5A patent/GB2580190B/en active Active
- 2019-11-29 CN CN201980085269.5A patent/CN113228646B/zh active Active
- 2019-11-29 CN CN202410366016.8A patent/CN118354071A/zh active Pending
- 2019-11-29 EP EP25226911.3A patent/EP4708871A2/en active Pending
- 2019-11-29 TW TW108143684A patent/TWI834773B/zh active
- 2019-11-29 EP EP19813297.9A patent/EP3900334B1/en active Active
- 2019-11-29 JP JP2021528450A patent/JP7308946B2/ja active Active
- 2019-11-29 CN CN202410366021.9A patent/CN118354072A/zh active Pending
- 2019-11-29 EP EP25226914.7A patent/EP4708872A2/en active Pending
- 2019-11-29 EP EP25226925.3A patent/EP4708875A2/en active Pending
- 2019-11-29 CN CN202410366031.2A patent/CN118413643A/zh active Pending
- 2019-11-29 EP EP25226922.0A patent/EP4708874A2/en active Pending
- 2019-11-29 KR KR1020217021789A patent/KR102764983B1/ko active Active
- 2019-11-29 EP EP25226919.6A patent/EP4708873A2/en active Pending
- 2019-11-29 WO PCT/EP2019/083066 patent/WO2020126411A1/en not_active Ceased
- 2019-11-29 CN CN202410366023.8A patent/CN118354073A/zh active Pending
- 2019-11-29 ES ES19813297T patent/ES3060652T3/es active Active
- 2019-11-29 BR BR112021012035-1A patent/BR112021012035A2/pt unknown
- 2019-11-29 US US17/415,654 patent/US11750804B2/en active Active
- 2019-11-29 CN CN202410366025.7A patent/CN118354074A/zh active Pending
-
2023
- 2023-07-03 JP JP2023109613A patent/JP7549709B2/ja active Active
- 2023-07-20 US US18/356,063 patent/US12250374B2/en active Active
- 2023-07-20 US US18/356,007 patent/US12250373B2/en active Active
- 2023-07-20 US US18/355,933 patent/US12052416B2/en active Active
- 2023-07-20 US US18/356,112 patent/US12250375B2/en active Active
- 2023-07-20 US US18/356,072 patent/US12284343B2/en active Active
-
2025
- 2025-01-17 US US19/030,190 patent/US20250168334A1/en active Pending
Also Published As
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| ES3060652T3 (en) | Adaptive loop filtering (alf) with non-linear clipping | |
| KR102784937B1 (ko) | 적응 루프 필터 | |
| HK40114579A (zh) | 对图像的一个或多个部分进行编码和解码的方法和装置以及存储介质 | |
| HK40113972A (zh) | 对图像的一个或多个部分进行编码和解码的方法和装置以及存储介质 | |
| HK40113638A (zh) | 对图像的一个或多个部分进行编码和解码的方法和装置以及存储介质 | |
| HK40113973A (zh) | 对图像的一个或多个部分进行编码和解码的方法和装置以及存储介质 | |
| HK40113981A (zh) | 对图像的一个或多个部分进行编码和解码的方法和装置以及存储介质 | |
| HK40110125A (zh) | 自适应环路滤波器 | |
| HK40109426A (zh) | 自适应环路滤波器 | |
| HK40109424A (zh) | 自适应环路滤波器 | |
| HK40109122A (zh) | 自适应环路滤波器 | |
| HK40108171A (zh) | 自适应环路滤波器 |