Publicado por Monty (monty@xiph.org, cmontgomery@mozilla.com). Publicado el 28 de junio de 2018.
Si alguien no ha leído el
artículo anterior ... AV1 es un nuevo códec de video universal desarrollado
por Alliance for Open Media. La alianza tomó como base el códec VPX de Google, Thor de Cisco y Daala de Mozilla / Xiph.Org. El códec AV1 es superior en rendimiento a VP9 y HEVC, lo que lo convierte en un códec no mañana, sino pasado mañana. El formato AV1 está libre de regalías y lo seguirá siendo siempre con una licencia de licencia.
Este artículo fue concebido como el segundo de una serie de artículos que describen en detalle la funcionalidad de AV1 y las nuevas tecnologías que subyacen y se utilizan por primera vez en la producción. Un artículo anterior en Xiph.org explicó la función de predicción de brillo de Chroma de Luma (CfL) . Hoy vamos a hablar sobre un filtro de corrección direccional limitado (Filtro de mejora direccional restringido). Si siempre se preguntó qué se necesita para escribir un códec, ¡abróchense los cinturones y prepárense para la educación!Filtros en AV1
En casi todos los códecs de video, se utilizan filtros correctivos para mejorar la calidad subjetiva del material de salida.
Por "filtros correctivos" me refiero a los métodos que no necesariamente codifican la información de la imagen o mejoran la eficiencia de codificación objetiva, pero mejoran el resultado de alguna manera. Los filtros correctivos deben usarse con cuidado porque generalmente pierden algo de información, y por esta razón a veces se consideran un método inaceptable de hacer trampa para que el resultado se vea mejor de lo que realmente es.
Pero esto no es justo. Los filtros de corrección están diseñados para evadir o eliminar artefactos específicos que son invisibles para las métricas objetivas, pero evidentes para el ojo humano. E incluso si consideramos los filtros como una forma de engaño, un buen códec de video todavía necesita todos los "trucos" prácticos y efectivos que puede usar.
Los filtros se dividen en varias categorías. Primero, pueden ser
normativos o
no normativos . El filtro normativo es una parte requerida del códec; sin él, es imposible decodificar el video correctamente. El filtro no estándar es opcional.
En segundo lugar, los filtros difieren en el lugar de aplicación. Hay filtros de preprocesamiento (preprocesamiento) aplicados a los datos de entrada antes de la codificación, filtros de postprocesamiento (postprocesamiento) aplicados a los datos de salida después de completar la decodificación, así como filtros en bucle (filtros de bucle) integrados en el proceso de codificación. Los filtros de preprocesamiento y posprocesamiento generalmente no son estándar y no se incluirán en el códec. Y los filtros de bucle son normativos por definición. Esto es parte del códec; se utilizan en el proceso de optimización de codificación y se aplican a marcos de referencia o para codificación entre cuadros.

AV1 utiliza tres filtros correctivos regulatorios. El primero es un filtro de desbloqueo para eliminar el "bloqueo", artefactos obvios a lo largo de los bordes de los bloques codificados. Aunque DCT es relativamente adecuado para comprimir energía en imágenes naturales, todavía tiende a acumular errores en los bordes de los bloques. Si recuerdas, la eliminación de estos artefactos fue la
razón principal por la que Daala usó la transformación solapada. Pero AV1 es un códec más tradicional con límites de bloque estrechos. Como resultado, aquí se requiere un filtro de desbloqueo tradicional para suavizar los artefactos en los bordes de los bloques.
Un ejemplo de artefactos en los límites de bloque en el códec de bloque DCT tradicional. Estos errores son especialmente notables.El último de los tres filtros es el filtro de restauración de bucle. Se compone de dos filtros configurables y reemplazables: el
filtro Wiener y el filtro autoguiado. Estos son dos filtros convolucionales que intentan construir un núcleo para restaurar parcialmente la calidad perdida de la imagen de entrada original. Por lo general, se usan para la reducción y / o corrección de ruido en los bordes de los bloques. En el caso de AV1, realizan una tarea general de reducción de ruido, eliminando el ruido DCT base a través del desenfoque ajustable.
Entre ellos hay un
filtro de corrección direccional limitado (Filtro de mejora
direccional restringido , CDEF), del que hablaremos. Al igual que el filtro de bucle invertido, elimina los artefactos y el ruido base en las uniones, pero a diferencia del filtro de bucle invertido, es un filtro direccional. A diferencia de la mayoría de los filtros, no se aplica a todo en una fila, pero específicamente encuentra límites de bloque. Por lo tanto, CDEF es especialmente interesante: es el primer filtro direccional práctico y útil que se utiliza en la codificación de video.
Largo y sinuoso camino
La historia de CDEF no se ha desarrollado fácilmente. Este es un camino largo con curvas, caminos laterales y callejones sin salida. CDEF reúne varios trabajos de investigación, cada uno de los cuales proporcionó una idea o inspiración para el filtro final en AV1.
El objetivo de transformar bloques de datos de píxeles utilizando DCT y transformaciones similares a DCT es representar un bloque de píxeles con el menor número posible. DCT comprime la energía bastante bien en la mayoría de las imágenes, lo que significa que tiende a recopilar patrones de píxeles dispersos en solo unos pocos factores de salida importantes.
Pero hay excepciones a la eficiencia de compresión DCT. Por ejemplo, DCT no traduce bordes direccionales o patrones muy bien. Si observa la salida DCT de un borde diagonal agudo, entonces los coeficientes de salida también forman ... ¡una diagonal aguda! Difiere después de la conversión, pero todavía está presente en la imagen, aunque generalmente en una forma más compleja que al principio. ¡La compresión está baja!
Los límites agudos son un problema tradicional para los códecs basados en DCT, ya que no se comprimen muy bien, si es que lo hacen. Aquí vemos un borde afilado (izquierda) y coeficientes de transformación DCT (derecha). La energía del límite inicial se propaga a través de DCT en el patrón de ondas direccionales.En las últimas dos décadas, la investigación de códecs de video ha analizado cada vez más las transformaciones, los filtros y los métodos de predicción, que son esencialmente direccionales. Los investigadores han estado buscando una forma de manejar mejor estos bordes y patrones para corregir esta limitación fundamental de DCT.
Predictores direccionales clásicos
La predicción intradireccional es probablemente uno de los métodos más famosos de acción direccional en los códecs de video modernos. Todos están familiarizados con los modos de predicción direccional h.264 y VP9, donde el códec transfiere el pronóstico de un patrón específico a un nuevo bloque basado en píxeles circundantes de bloques ya decodificados. El objetivo es eliminar (o reducir significativamente) la energía en los bordes duros y dirigidos
antes de convertir el bloque. Al predecir y eliminar características que no se pueden comprimir, aumentamos la eficiencia general del códec.
Ilustración de modos de predicción direccional en AVC / H.264 para bloques 4x4. El predictor expande los valores de las tiras de un solo píxel de los píxeles vecinos, transfiriéndolos al bloque predicho en una de las ocho direcciones, más un modo de promedio para la predicción DC simple.Una idea aún más antigua es la compensación de movimiento. Esta también es una forma de pronóstico direccional, aunque rara vez pensamos de esa manera. Este modo desplaza los bloques en ciertas direcciones, nuevamente para predecir y extraer energía antes de que DCT funcione. Este desplazamiento de bloque es direccional y se filtra. Al igual que la predicción intradireccional, aplica filtros de sobremuestreo cuidadosamente construidos si el desplazamiento no es un número entero de píxeles.
Filtros direccionales
Como se señaló anteriormente, los códecs de video aplican filtros activamente para eliminar artefactos de bloque y ruido. Aunque los filtros se aplican en el plano 2D, los filtros mismos generalmente funcionan en 1D, es decir, se realizan horizontal y verticalmente por separado.
El filtrado direccional desencadena filtros en direcciones distintas a la horizontal y vertical. Tal método ya es común en el procesamiento de imágenes estáticas, donde los filtros de reducción de ruido y las superposiciones de efectos especiales a menudo tienen en cuenta los límites y las direcciones. Pero estos filtros direccionales a menudo se basan en el filtrado de la salida de las transformaciones direccionales. Por ejemplo, los
filtros de reducción de ruido [ligeramente obsoletos] sobre
los que escribí se basan en un
árbol doble de wavelets complejas .
Pero para la codificación de video, estamos más interesados en los filtros direccionales, que se aplican directamente en píxeles en una determinada dirección, en lugar de filtrar el dominio de frecuencia en la salida de una conversión direccional. Tan pronto como intente crear una bestia así, la Gran Pregunta surgirá rápidamente: ¿Cómo formalizar una determinada dirección que no sea horizontal y vertical, cuando las posiciones del filtro ya no están vinculadas a los píxeles en la cuadrícula?
Una opción es utilizar el enfoque clásico utilizado en el procesamiento de imágenes de alta calidad: transformar el núcleo del filtro y volver a muestrear (volver a muestrear) el espacio de píxeles según sea necesario. Incluso podría argumentar que esta es la única respuesta "correcta" o "completa". Se utiliza para compensar el movimiento de subpíxeles, donde es imposible obtener un buen resultado sin un buen muestreo, así como en el pronóstico direccional, donde generalmente se usa una aproximación rápida.
Sin embargo, incluso una aproximación rápida es costosa en términos de recursos computacionales, si se aplica universalmente, por lo que es aconsejable evitar volver a muestrear, si es posible. El precio costoso de la velocidad es una de las razones por las cuales los filtros direccionales aún no se han aplicado en la codificación de video.
Transformaciones direccionales
Las conversiones direccionales intentan solucionar los problemas de DCT con la compactación de borde de bloque al nivel de la transformación misma.
Los experimentos en esta área se dividen en dos categorías. Hay transformaciones que usan bases esencialmente direccionales, como las wavelets direccionales. Como regla general, son propensos a una conversión excesiva / exceso de integridad, es decir, producen más salida de la que reciben en la entrada: generalmente mucho más. Es como trabajar en la dirección opuesta, porque queremos
reducir la cantidad de datos, ¡no aumentarla! Pero estas conversiones aún comprimen energía, y el codificador todavía selecciona un pequeño subconjunto de la salida para la codificación, por lo que en realidad hay algunas diferencias con la codificación DCT con pérdida habitual. Sin embargo, las conversiones "excesivamente completas" generalmente requieren una cantidad excesiva de memoria y recursos informáticos y, por lo tanto, no se usan en códecs de video populares.
La segunda categoría de conversiones direccionales toma transformaciones regulares no dirigidas como DCT, y las modifica, afectando la entrada o la salida. Los cambios pueden llevarse a cabo en forma de muestreo repetido, multiplicación de matrices (que puede considerarse como una forma especializada de muestreo repetido) o haciendo malabarismos con el orden de los datos de entrada.
Esta última idea es la más fuerte, porque el método funciona rápidamente. Una permutación simple de números no requiere ningún cálculo matemático.
Dos ejemplos de transformaciones en diferentes direcciones reorganizando píxeles y coeficientes, en lugar de volver a filtrar. Se toma un ejemplo de la Encuesta de transformaciones direccionales en la codificación de imágenes , Jicheng Xu, Bing Zeng, Feng WuLa implementación se complica por varias dificultades prácticas. La reorientación del cuadrado da un borde diagonal con líneas predominantemente verticales u horizontales, lo que conduce a una matriz de números no cuadrados como entrada. Conceptualmente, esto no es un problema. Como puede comenzar a transformar filas y columnas de forma independiente, simplemente usamos diferentes tamaños de DCT 1D para cada fila y columna, como se muestra en la figura anterior. Pero en la práctica, esto significa que necesitaremos una factorización DCT diferente para cada longitud de columna posible, y tan pronto como el departamento de desarrollo de hardware comprenda esto, lo echarán por la ventana.
Hay otras formas de procesar áreas no cuadradas después de la reorganización. Puede crear esquemas de remuestreo que guarden el cuadrado de entrada o funcionen solo en la salida. La mayoría de
los artículos sobre conversión direccional enumerados a continuación ofrecen diferentes esquemas para esto.
Y aquí es donde termina esencialmente la historia de las transformaciones dirigidas. Tan pronto como eluda varias complicaciones de las conversiones direccionales y cree un filtro real, normalmente no funciona en un códec moderno por una razón inesperada: debido a la competencia con un tamaño de bloque variable. Es decir, en un códec con un tamaño de bloque fijo, la adición de transformaciones direccionales proporciona un aumento impresionante en la eficiencia. Y un tamaño de bloque variable en sí mismo proporciona beneficios aún mayores. Pero combinar un tamaño de bloque variable y transformaciones direccionales conduce a un resultado peor que usar cada uno de estos métodos individualmente. El tamaño de bloque variable ya ha eliminado las redundancias que utilizan las transformaciones direccionales, e incluso lo ha hecho más eficiente.
Nathan Egge y yo experimentamos mucho con transformaciones direccionales al desarrollar Daala. Examiné el problema tanto en el lado de entrada como en el lado de salida, usando multiplicaciones de matriz dispersas para convertir bordes diagonales en posición vertical / horizontal en la salida. Nathan probó enfoques conocidos para las transformaciones direccionales mediante la reconstrucción de datos de entrada. Llegamos a una conclusión: la complejidad adicional no brinda beneficios objetivos ni subjetivos.
El uso de transformaciones direccionales en Daala (y otros códecs) podría ser un error, pero la investigación planteó una pregunta que se mencionó anteriormente: ¿cómo filtrar rápidamente a lo largo de las fronteras sin volver a tomar muestras costosas? Respuesta: no es necesario volver a muestrear. Amplíe moviéndose a lo largo del píxel completo más cercano. Amplíe el núcleo transformado reorganizando literal o conceptualmente los píxeles. Este enfoque conduce a cierta distorsión (alias), pero funciona
bastante bien y
lo suficientemente rápido .
Predictores direccionales, Parte 2: Daala Chronicles
La historia de CDEF en el códec Daala comenzó con intentos de hacer algo completamente diferente: la aburrida intra-predicción direccional habitual. O al menos algo normal para el códec Daala.
Escribí sobre el esquema de
predicción interna de Daala en el dominio de la frecuencia cuando recién comenzábamos a trabajar en él. Las matemáticas aquí están funcionando bastante; No hay razón para preocuparse. Sin embargo, la implementación ingenua requirió una gran cantidad de multiplicaciones de matrices, lo que era demasiado costoso para el códec en producción. Esperábamos que la carga computacional pudiera reducirse en un orden de magnitud debido a la rarefacción: la eliminación de elementos de la matriz que no contribuyeron mucho al pronóstico.
Pero el adelgazamiento no funciona como nos gustaría. Al menos cuando lo implementamos, perdió demasiada información, haciendo que la técnica no sea adecuada en la práctica.
Por supuesto, Daala todavía necesitaba alguna forma de predicción interna, y Jean-Marc Valin tuvo la idea: un códec de predicción autónomo que funciona en el dominio espacial paralelo al códec Daala en el dominio de la frecuencia. Como una especie de simbionte, que trabaja en tándem, pero no depende de Daala, no se limita a los requisitos de Daala para el dominio de la frecuencia. Así surgió
Intra Paint .
Un ejemplo de algoritmo de predicción Intra Paint en una fotografía del puerto de Sydney . La salida visual es claramente direccional, se ajusta bien con los límites de los bloques y las características de la imagen original, creando un resultado agradable (quizás un poco extraño) con límites clarosEl filtro Intra Paint funcionó de una manera nueva: codificó vectores unidimensionales solo a lo largo de los límites de los bloques y luego ejecutó la plantilla en la dirección seleccionada. Es como rociar pintura y luego esparcirla en diferentes direcciones en áreas abiertas.
Intra Paint parecía prometedor y en sí mismo produjo resultados asombrosamente hermosos, pero nuevamente resultó ser insuficientemente efectivo para funcionar como un predictor interno estándar. Simplemente no obtuvo suficientes bits para codificar su propia información.
La diferencia entre la fotografía original del puerto de Sydney y el resultado de Intra Paint. A pesar de la emisión visualmente agradable de Intra Paint, objetivamente, no puede llamarse un predictor altamente preciso. La diferencia es bastante significativa incluso a lo largo de muchas fronteras que parecían bien diseñadasEl "fracaso" de Intra Paint nos llevó a otra idea. Aunque este "dibujo" objetivamente no es un buen predictor, pero subjetivamente en su mayor parte se ve bien. ¿Quizás utilizar el método de "mancha de pintura" como filtro de postprocesamiento para mejorar la calidad visual subjetiva? Intra Paint sigue muy bien a lo largo de los bordes afilados y, por lo tanto, debería eliminar el ruido que se acumula a lo largo de los bordes más afilados.
De esta idea, nació el filtro Paint-Dering original en Daala, que finalmente condujo al CDEF.Hay otra cosa interesante en el pronóstico direccional, aunque actualmente es un callejón sin salida en la codificación de video. David Shlif implementa un interesante filtro de re-búsqueda de borde / dirección llamado Interpolación dirigida por borde(EDI) Otros códecs (como la serie VPx y, en algún momento, AV1) experimentaron con marcos de referencia reducidos para guardar bits de codificación y luego aumentar la resolución. Esperamos que con una mayor resolución, una interpolación EDI significativamente mejorada mejore la técnica hasta el punto de que sea útil. También esperábamos usar EDI como un filtro de interpolación de subpíxeles mejorado para compensar el movimiento. Desafortunadamente, estas ideas han seguido siendo un sueño incumplido.Llenando agujeros, fusionando ramas
Por el momento, he descrito todos los requisitos previos básicos necesarios para acercarnos a CDEF, pero en realidad continuamos deambulando por el desierto. Intra Paint generó el filtro Daala Paint-Dering original, que utilizó el algoritmo Intra-Paint como un filtro posterior para eliminar artefactos. Resultó ser demasiado lento para usar en un códec real.Como resultado, tomamos en cuenta las lecciones de Intra Paint y los experimentos abandonados en esta dirección. Daala tomó prestado CLPF de Thor por un tiempo, y luego Jean-Marc creó otro filtro Deringing mucho más rápido para Daala, basado en la búsqueda de direcciones de límites Intra-Paint (funcionó rápido y bien), así como el filtro de reemplazo condicional, filtro de reemplazo condicional. El CRF se creó de alguna manera sobre las ideas de un filtro mediano y produjo resultados similares a un filtro bilateral, pero funcionó esencialmente en vectores y, por lo tanto, mucho más rápido. Comparación de un filtro lineal de 7 tomas con un filtro de reemplazo condicional en una señal unidimensional ruidosa, donde el ruido imita los efectos de la cuantización en la señal original El filtro de ruido Daala final utiliza dos filtros CRF unidimensionales, un filtro de 7 tomas en la dirección de los límites y un filtro débil de 5 tomas. Ambos filtros solo funcionan en píxeles completos sin volver a muestrear. Aquí, el filtro de reducción de ruido Daala se vuelve muy similar a lo que ahora conocemos como CDEF.
Recientemente propusimos Daala como el códec AOM, y este filtro intermedio se convirtió en un experimento AV1 daala_dering. Cisco también presentó su filtro de reducción de ruido, el filtro de paso bajo restringido (CLPF) del códec Thor. Durante un tiempo, ambos filtros existieron en paralelo en el ensamblaje experimental AV1: podían incluirse individualmente o incluso juntos. Gracias a esto, en su trabajo fue posible notar sinergias útiles, así como similitudes adicionales de filtros en diferentes etapas de trabajo.Entonces, finalmente llegamos al CDEF : el filtro CLPF de Cisco y la segunda versión del filtro de reducción de ruido Daala se fusionaron en un filtro de reducción de ruido de alto rendimiento teniendo en cuenta la dirección de los límites.CDEF moderno
El filtro CDEF es simple y muy similar a nuestros filtros anteriores. Consiste en tres partes (búsqueda direccional, sustitución limitada / filtro de paso bajo, y la colocación de las marcas de co-píxeles) que usamos antes. Dado el largo historial, mirando el CDEF terminado, puede preguntar: “¿Eso es todo? ¿Dónde está el resto? CDEF es un ejemplo de cómo obtener un efecto útil debido a la implementación correcta de las partes, y no debido a la complejidad. Un filtro simple y efectivo es lo que debería ser.Dirección de búsqueda
CDEF funciona en una determinada dirección, por lo que debe definirlo. El algoritmo es el mismo que el de Intra Paint y Paint-Dering. Hay ocho direcciones posibles. Ocho direcciones posibles para un filtro CDEF. Las líneas numeradas en cada bloque de dirección corresponden al parámetro 'k' en la búsqueda de dirección
Determinamos la dirección del filtro haciendo variantes "direccionales" del bloque de entrada, una para cada dirección, donde todos los píxeles a lo largo de la línea en la dirección seleccionada se llevan al mismo valor. Luego elegimos la dirección donde el resultado coincide más con el bloque fuente. Es decir, para cada dirección d, primero encontramos el valor de píxel promedio en cada fila k, y luego a lo largo de cada fila resumimos el error cuadrático entre el valor de píxel dado y el valor promedio de esta línea de píxel.
d, . k . k . , , . /Entonces obtenemos el error cuadrático total, y el error cuadrático común más pequeño es la dirección que elegiremos. Aunque el ejemplo anterior hace exactamente eso, en realidad no es necesario convertir el error cuadrático en dispersión: en cada dirección, el mismo número de píxeles, por lo que ambos elegirán la misma respuesta. ¡Menos cómputo!Esta es una forma intuitiva y larga de calcular errores direccionales. El mecanizado se puede simplificar mediante la siguiente ecuación:En esta formula E es un errorp es el píxelx p es el valor de píxel,k es una de las líneas numeradas en el diagrama de dirección anterior, yN d , k es la potencia del conjunto (la cantidad de píxeles que contiene) de la líneak para direcciónd .
Esta ecuación se puede simplificar en la práctica. Por ejemplo, el primer término es el mismo para cadad .
En última instancia, la implementación de AV1 CDEF actualmente requiere 5.875 adiciones y 1.9375 multiplicaciones por píxel y está profundamente vectorizada, lo que resulta en un costo total de menos de 8 × 8 DCT.Grifos de filtro
El filtro CDEF funciona píxel por píxel en un bloque completo. Direcciónd selecciona uno de los filtros de dirección, cada uno de los cuales consiste en un conjunto de etiquetas de filtro (es decir, ubicaciones de píxeles de entrada) y pesos. Conceptualmente, CDEF construye un filtro direccional a partir de dos unidimensionales. El filtro principal funciona en la dirección seleccionada, como en el filtro de ruido Daala. El filtro secundario se activa dos veces en un ángulo de 45 ° con respecto al primario, como en CLPF Thor.La dirección de los filtros unidimensionales primario y secundario con respecto a la dirección seleccionada d. El filtro principal comienza en la dirección seleccionada, los secundarios funcionan en un ángulo de 45 ° con respecto a la dirección principal. Cada píxel en el bloque se filtra por igual. Losfiltros funcionan en ángulos tales que las marcas ideales a menudo caen entre píxeles. En lugar de volver a muestrear, seleccionamos la ubicación exacta del píxel más cercano, teniendo en cuenta el núcleo simétrico del filtro.Cada etiqueta en el filtro también tiene el mismo peso. Durante el filtrado, su valor de entrada se suministra a la entrada, luego se aplica la función de restricción, luego el resultado se multiplica por el peso fijo de la etiqueta y este valor de salida se agrega al píxel filtrado.
Las ubicaciones de las marcas primarias y secundarias (grifos) y los pesos fijos (w) en las direcciones del filtro. Para las marcas primarias y los valores pares de fuerza a = 2 yb = 4, mientras que para las marcas impares a = 3 yb = 3. El píxel filtrado se muestra en gris.En la práctica, los filtros primario y secundario no funcionan por separado, sino que se combinan en un núcleo de filtro, que se lleva a cabo en un solo paso.Función de restricción
CDEF utiliza un filtro de paso bajo limitado en el que el valor de cada etiqueta se procesa primero por la función de restricción con el parámetro de diferencia entre el valor de la etiqueta y el píxel filtradod , fuerza del filtroS y parámetro de amortiguaciónD :
La función de restricciones está diseñada para reducir o abandonar por completo el procesamiento de píxeles que no son muy diferentes de los píxeles filtrados. En el rango definido, las diferencias en los valores de las marcas desde el píxel central se tienen completamente en cuenta (lo cual está determinado por el parámetro de fuerzaS ) Si la diferencia de valores cae dentro del rango entre los parámetrosS y
D , entonces el valor se debilita. Finalmente, etiqueta los valores fueraD completamente ignorado. Ilustración de la función de restricciones. En ambas figuras, la diferencia (d) entre el píxel central y el píxel de marca se representa a lo largo del eje x. El valor de salida de la función de restricción se muestra a lo largo del eje y. La figura de la izquierda muestra el efecto de cambiar el parámetro de fuerza (S). La figura de la derecha muestra el efecto de cambiar el parámetro de amortiguación (D). El valor de salida de la función de restricción se multiplica por un peso fijo asociado con cada posición de la etiqueta con respecto al píxel central. Finalmente, los valores resultantes (uno para cada etiqueta) se agregan al píxel filtrado central, lo que da el valor final de píxel filtrado. Todo esto se expresa en la siguiente fórmula:... donde
( p ) y
( s ) corresponden a los valores de losconjuntos de etiquetasprimariosysecundarios. Hay algunos detalles adicionales de implementación relacionados con el redondeo y el recorte. Pero no son tan importantes para la comprensión. Si tiene la intención de implementar CDEF, por supuesto, puede encontrarlos en ladescripción completa de CDEF.Resultados
CDEF está diseñado para eliminar o reducir el ruido básico y los artefactos de llamada en los bordes afilados de una imagen sin desenfoque ni daño. El filtro ahora se usa en AV1 y proporciona un efecto sutil pero consistente. Quizás en el futuro sea posible confiar aún más en CDEF.
Un ejemplo de reducción de ruido y artefactos al codificar imágenes de Frutas . El primer recuadro muestra el área sin procesamiento de CDEF, el segundo muestra la misma área después del procesamiento de CDEFEl valor cuantitativo de cualquier filtro correctivo
debe determinarse mediante pruebas subjetivas. Las métricas objetivas no deben descartarse, pero CDEF está diseñado para proporcionar un resultado que va más allá de las capacidades de las herramientas de prueba objetivas primitivas como PSNR y SSIM.
Por lo tanto, realizamos varias rondas de pruebas subjetivas, primero durante el desarrollo de CDEF (cuando Daala Dering y Thor CLPF todavía eran técnicamente competidores), y luego realizamos pruebas más exhaustivas del filtro CDEF combinado. Dado que este es un filtro nuevo que está completamente ausente en generaciones anteriores de códecs, las pruebas consistieron principalmente en AV1 con CDEF habilitado y AV1 sin CDEF.
Resultados subjetivos de la prueba AV1 A / B con CDEF y AV1 sin CDEF para configuración de alta latenciaLos resultados subjetivos muestran una mejora estadísticamente significativa (p <.05) en tres de los seis clips. Como regla, esto corresponde a un aumento en la eficiencia de codificación en un 5-10%. Esta es una gran victoria para una herramienta agregada a un códec completamente maduro.
Como se esperaba, las pruebas objetivas mostraron un aumento más modesto de alrededor del 1%. Sin embargo, las pruebas objetivas solo son útiles en la medida en que sean consistentes con los resultados subjetivos. La prueba subjetiva es el estándar de oro, y los resultados subjetivos son bastante claros.
Las pruebas también mostraron que CDEF funciona mejor si se deshabilitan herramientas de códec adicionales durante la codificación. Al igual que las transformaciones direccionales, CDEF compite por los beneficios con otros métodos AV1 más complejos. Dado que CDEF es un filtro simple, pequeño y rápido, puede ser útil en el futuro para reducir la complejidad de los codificadores AV1. En términos de complejidad del decodificador, CDEF representa del 3% al 10% del decodificador AV1, dependiendo de la configuración.
Recursos Adicionales
- Conjuntos de pruebas derf estándar Xiph.Org en media.xiph.org
- Sistema automatizado de pruebas y métricas utilizadas en el desarrollo de Daala y AV1: "¿Ya estamos comprimidos?"
- Filtro de mejora direccional restringido (CDEF) en AV1 . Steinar Midtskogen, Jean-Marc Valin, octubre de 2017
- Diapositivas de presentación de CDEF para ICASSP 2018 , Steinar Midtskogen, Jean-Marc Valin
- Filtro de Deringing para Daala y desarrollo posterior . Jean-Marc Valin. El filtro de reducción de ruido anterior creado al desarrollar el códec Daala, que se utilizó para crear el CDEF en AV1.
- Daala: Dibujos para colorear por diversión y bien . Jean-Marc Valin. Un filtro de corrección aún más antiguo para la base Intra-Paint, que condujo a la creación de un filtro de reducción de ruido en Daala, que a su vez condujo a CDEF
- Filtro de pintura de pintura interna . Jean-Marc Valin, 2015. Notas sobre el filtro de corrección de reducción de ruido que surgió del experimento Intra Paint en Daala
- Filtrado guiado de imágenes . Caiming Hye, Jian San, Xiaou Tang, 2013
- Transformada direccional adaptativa wavelet discreta para la compresión de imágenes . Chuo-Ling Chang, Bernd Girod, IEEE Transactions on Image Processing, Volumen 16, Número 5, mayo de 2007
- Transformaciones adaptativas direccionales para compartir imágenes . Chuo-Ling Chang, tesis doctoral en la Universidad de Stanford, 2009. Esta disertación proporciona una buena visión general del área de las transformaciones direccionales a partir de 2009; Desafortunadamente, no había copias disponibles en línea.
- Conversión direccional de bloqueo adaptativo para codificar una imagen en color . Chuo-Ling Chang, Mina Makar, Sam S. Tsai, Bernd Girod, IEEE Transactions on Image Processing, Volumen 19, Número 7, julio de 2010
- DCT basado en circuitos con predicción DC y codificación adaptativa . Zhibo Chen, Xiaozhong Xu. El artículo detrás del IEEE
- Transformaciones adaptativas direccionales para la predicción de codificación residual . Robert Cohen, Sven Klomp, Anthony Vetro, Huifan Sun. Actas de la 17a Conferencia Internacional IEEE 2010 sobre Procesamiento de Imágenes, 26-29 de septiembre de 2010, Hong Kong
- Transformación ortogonal selectiva de orientación con superposición . Dietmar Kunz, 2008. Artículo de IEEE
- Análisis de distorsión de velocidad de wavelets direccionales . Arian Maleki, Boshra Rajay, Hamid Reza Purreza. Transacciones IEEE sobre procesamiento de imágenes, volumen 21, número 2, febrero de 2012
- Análisis teórico de las tendencias en tendencias en transformaciones ortogonales direccionales . Shogo Murumatsu, Dandan Khan, Tomoya Kobayashi, Hisakazu Kikuchi. Un artículo detrás del muro de pago IEEE. Sin embargo, una versión corta está disponible gratuitamente.
- Una visión general de las transformaciones direccionales en la codificación de imágenes . Jicheng Xu, Bing Zeng, Feng Wu.
- Conversión con filtrado direccional para compresión de imágenes e información entre cuadros . Xulian Peng, Jicheng Xu, Feng Wu, IEEE Transaction in Image Processing, Volumen 19, Número 11, noviembre de 2010. Artículo de Firewall IEEE
- Aproximación y compresión utilizando transformaciones ortonormales dispersas . O. G. Sezer, O. G. Guleruz, Yusel Altunbasak, 2008
- Estudio confiable de transformaciones compartidas bidimensionales para códecs de video de próxima generación . O. G. Cezer, R. Cohen, A. Vetro, marzo de 2011
- Optimización conjunta basada en la escasez de un conjunto de transformaciones de bloques compartidos bidimensionales ortonormales . Joel Sole, Peng Yin, Yunfei Zheng, Christina Gomila, 2009. Artículo de IEEE
- Transformaciones direccionales superpuestas para codificación de imágenes . Jicheng Xu, Feng Wu, Jie Liang, Wenjun Zhang, IEEE Transactions on Image Processing, abril de 2008
- Las transformaciones direccionales discretas del coseno son un nuevo marco para la codificación de imágenes . Bing Zeng, Jingjing Fu, IEEE Transactions on Circuits and Systems for Video Technology, April 2008
- Doble árbol de transformaciones complejas de wavelets . Ivan Seleznik, Richard Baranyuk, Nick Kingsbury, IEEE Signal Processing Magazine, noviembre de 2005