Deblocking filter
# Deblocking filter

El deblocking filter es un filtro utilizado en los nuevos estándares de codificación de video, como por ejemplo el H.264/MPEG-4 AVC, diseñado para combatir el indeseado efecto bloque.

# Deblocking filter
## Introducción

Los codificadores de video basados en bloques tiene como objetivo principal la reducción de la redundancia espacial y temporal a partir de dos técnicas principales: la transformada discreta del coseno (DCT) y la compensación de movimiento. Sin embargo, estas técnicas producen un molesto efecto de bloques en la imagen comprimida especialmente cuando son utilizadas para una codificación con un bajo bit rate.

# Deblocking filter
## Tipos de implementaciones

En función del estándar hay distintas implementaciones para este filtro. Existen dos propuestas principales: post filters y loop filters.
El estándar H.264/MPEG-4 AVC utiliza el Adaptive in-loop deblocking filter, ya que tiene importantes ventajas respecto a los post filters.
Primeramente, el loop filter garantiza un cierto nivel de calidad. Este hecho es especialmente importante en los sistemas de comunicaciones modernos ya que los decodificadores de la mayoría de fabricantes son utilizados para decodificar toda clase de archivos de video distribuidos. Con el loop filter en el diseño del codificador, los proveedores pueden asumir que sus codificadores procesarán la información haciendo uso del deblocking filter garantizando el nivel de calidad esperado.
Segundo, no hay la necesidad de utilizar un buffer adicional en el decodificador. En el post filter, los frames son decodificados en un buffer de referencia. Por tanto es necesario un buffer adicional para almacenar los frames filtrados. En cambio, en el loop filter el filtrado puede ser separado fuera del macro bloque durante el proceso de decodificación, y los datos filtrados almacenados directamente al buffer de referencia.
En tercer lugar, distintos estudios muestran que el loop filter mejora la calidad de los streams de video de manera tanto objetiva como subjetiva con una reducción significativa de la complejidad de la decodificación comparándolo con el post filter.
La desventaja principal es que los loop filters son mucho más complejos que los post filters, el hecho de filtrar dentro del bucle implica un mayor consumo computacional de procesado.

# Deblocking filter
## Adaptive in-loop deblocking filter

Este filtro es utilizado por el H.264/MPEG-4 AVC, trabaja con bloques 4x4 (a diferencia de estándares como el H.263 o el MPEG-4/H.263 que operan con bloques 8x8), esta innovación reduce sustancialmente el efecto bloque. Aun así, es imprescindible la utilización del deblocking filter.
Análisis de los bordes
Sabemos que al realizar la transformada DCT de los bloques, los errores de codificación son mayores en los bordes que en el medio de los bloques. Esto se debe a que una muestra interior tiene más muestras alrededor que proporcionan una mejor reconstrucción, por el contrario la reconstrucción de una muestra en el borde es mucho más pobre. El deblocking filter del H.264/MPEG-4 AVC es adaptativo a múltiplos niveles:
* Edge Level Adaptivity of the Filter: Para cada borde entre dos bloques adjuntos 4x4 se le asigna un parámetro llamado Bs (Boundarie strengh) con un valor entero entre 0 y 4 en función de la siguiente tabla:
| Condiciones y modos de bloque | Bs |
| Uno de los bloques es Intra y el borde es un borde de macro bloque | 4 |
| Uno de los bloques es Intra | 3 |
| Uno de los bloques ha codificado residuos | 2 |
| Diferencia de movimiento de bloque > 1 | 1 |
| Compensación de movimiento para diferentes frames de referencia | 1 |
| Otros | 0 |
El valor de Bs determina la potencia del nivel de filtrado que se le va a aplicar al borde analizado. El valor 0 indica que no realizamos ningún tipo de filtrado, los valores 1,2 y 3 indican modo estándar de filtrado y por último el valor 4 indica filtrado especial.
* Sample-Level Adaptivity of the Filter: En el Deblocking filter es muy importante que el algoritmo sea capaz de distinguir entre los bordes reales que pueda tener una imagen y los bordes creados debido a la cuantificación de los coeficientes de la DCT. Por tanto, el proceso de filtrado ha de ser capaz de no filtrar los bloques reales para preservar la imagen original y filtrar los bloques artificiales para reducir su visibilidad. En la figura 2, vemos un ejemplo de las muestras de dos bloques 4x4 vecinos con la frontera entre ellos. Si Bs=0 no se filtra. Si Bs>0 entonces se mide la diferencia entre muestras de chroma y luminancia a partir de estas condiciones:
donde alfa y beta son parámetros establecidos del algoritmo de filtrado.
* Slice-Level Adaptivity of the Filter: La utilización de offsets para controlar las propiedades del Deblocking filter proporciona al codificador la habilidad de optimizar la calidad objetiva del video codificado. Por ejemplo, reducir la cantidad de filtrado con la utilización de offset negativo puede ayudar a mantener la nitidez en los detalles pequeños de la imagen, particularmente en contenidos de alta resolución. Por otra parte, la utilización de offset positivo para incrementar la cantidad de filtrado puede mejorar la calidad sujetiva de contenidos en los cuales, el visible efecto bloque permanece aún utilizando los valores por defecto del filtro.

# Deblocking filter
## Conclusiones

El deblocking filter consigue a través de un simple algoritmo mejoras en la calidad objetiva y subjetiva de los streams de video. La buena realización de este proceso se basa en la detección de los bordes creados tanto reales como artificiales de los bloques de datos y el eficiente filtrado de estos últimos. Además, el deblocking filter produce un ahorro del bit rate junto a una mejora de la calidad visual de la imagen.