La codificación de entropía en la compresión de video tiene un papel fundamental al reducir la cantidad de datos necesarios para representar una secuencia de video, maximizando así la eficiencia de la compresión. En su núcleo, la codificación de entropía aprovecha las estadísticas y patrones de los datos para representar los símbolos que componen el flujo de bits de manera más compacta, asignando menos bits a los valores que ocurren con mayor frecuencia y más bits a los que son menos comunes. Este proceso permite un almacenamiento y transmisión más eficientes de los videos, cruciales tanto para su distribución como para la decodificación en tiempo real.

En los códecs de video modernos, como el HEVC/H.265, la codificación de entropía se lleva a cabo mediante diversas técnicas, entre las que se incluyen códigos de longitud fija, códigos de longitud variable y la codificación aritmética binaria (BAC). La eficiencia de la codificación de entropía se puede mejorar de diversas maneras. Por ejemplo, un códec de video puede preprocesar ciertos valores antes de aplicar la codificación de entropía. Esto incluye, por ejemplo, escanear o procesar los coeficientes cuantizados de una imagen en un orden específico para aprovechar las relaciones estadísticas esperadas entre los coeficientes en un bloque. Además, los códecs pueden predecir ciertos parámetros, como los vectores de movimiento o el parámetro de cuantización, a partir de valores previamente codificados, y luego codificar la diferencia entre el valor real y el valor predicho.

Otra técnica común es la creación de una lista de valores probable y la selección de un valor de dicha lista. Este enfoque reduce la necesidad de codificar valores aleatorios, lo que a su vez optimiza la eficiencia de la codificación. Además, la estimación de la probabilidad de que un elemento de la sintaxis tenga un valor particular, basándose en estadísticas pasadas o en el contexto reciente de la secuencia de video, mejora la predicción y la codificación del flujo de datos.

Los ejemplos del codificador de video HEVC ilustran cómo la codificación de entropía se aplica en la práctica. En el caso del encabezado del segmento de una imagen (slice segment header), diversos elementos de la sintaxis, como las banderas y los identificadores de parámetros, se codifican usando códigos de longitud fija o variable. Por ejemplo, la bandera first_slice_segment_in_pic_flag, que indica si se trata del primer segmento de una imagen codificada, se representa con un solo bit (un código de longitud fija). Elementos como slice_segment_address utilizan códigos de longitud variable, mientras que otros como slice_pic_parameter_set_id emplean códigos de longitud variable exp-Golomb, que se profundizarán más adelante.

Un segundo ejemplo es la codificación de las diferencias de los vectores de movimiento (motion vector difference, MVD). En HEVC, la diferencia de un vector de movimiento se puede enviar varias veces por cada componente de movimiento, representando la variación de la posición entre el cuadro actual y el cuadro anterior. Los componentes de cada vector de movimiento se representan mediante una serie de banderas y valores que indican la magnitud y el signo del vector, los cuales son codificados utilizando la técnica de codificación aritmética binaria (BAC). Este proceso permite transmitir información detallada sobre el movimiento sin necesidad de enviar cada valor de vector de forma independiente y redundante.

El desafío de la codificación de entropía radica en encontrar un equilibrio entre varios factores. Primero, se busca maximizar la eficiencia de compresión, utilizando el menor número de bits posible para representar la secuencia completa de video. Esto se logra aprovechando al máximo las características estadísticas de los datos y empleando técnicas como la predicción de valores y la codificación de diferencias. Además, se debe minimizar la complejidad computacional, lo cual es clave para asegurar que los procesos de codificación y decodificación puedan ejecutarse dentro de los límites de tiempo y recursos de los dispositivos prácticos. Esto incluye el diseño de algoritmos que puedan beneficiarse de los procesadores paralelos para un procesamiento más rápido y eficiente.

Por último, la codificación de entropía también debe proporcionar una eficiente asignación de los datos codificados a métodos de almacenamiento o transmisión, como la asignación de bloques de datos codificados a paquetes de red. Este aspecto es particularmente importante para la transmisión de video en tiempo real, donde la latencia y el uso eficiente del ancho de banda son cruciales.

La clave de la codificación de entropía radica en su capacidad para ajustar dinámicamente la representación de los datos a las estadísticas del contenido. Esta adaptabilidad, junto con la eficiencia que proporciona, hace que la codificación de entropía sea esencial en los sistemas modernos de compresión de video. Además, es importante que el lector comprenda que, aunque la codificación de entropía mejora la eficiencia de compresión, el proceso no está exento de desafíos. La optimización de estos métodos requiere un profundo conocimiento de los datos y su estructura, lo que implica un constante refinamiento de los algoritmos y las técnicas utilizadas.

¿Cómo afectan los filtros en bucle a la calidad de la compresión de video?

Los filtros en bucle, también conocidos como filtros de bucle o de filtrado en bucle, son herramientas esenciales dentro del proceso de codificación y decodificación de video. El objetivo principal de estos filtros es mejorar el rendimiento del propio códec de video, optimizando la fuente de predicción y, como resultado, mejorando el rendimiento de la predicción misma. Como se ilustra en las figuras del material técnico, los cuadros de referencia en un codificador pueden ser filtrados antes de generar una predicción para un bloque a codificar. El decodificador, por su parte, debe generar una predicción idéntica, por lo que aplica el mismo filtro a los cuadros de referencia durante la decodificación.

Dos ejemplos prominentes de filtros en bucle son los filtros de des-bloqueo y los filtros de reducción de anillos (deringing). El filtro de des-bloqueo se utiliza para reducir la distorsión en los límites de los bloques, una característica comúnmente asociada con los artefactos de compresión en videos y imágenes. Los artefactos de bloque, aquellos bloques cuadrados o rectangulares visibles que suelen aparecer en videos demasiado comprimidos, son una manifestación de este tipo de distorsión. Por otro lado, el filtro de reducción de anillos está diseñado para minimizar las ondas visibles cerca de los bordes fuertes en una imagen de video.

La calidad visual es un concepto inherentemente subjetivo. Esto implica que la efectividad de los filtros en bucle en cuanto a la mejora de la imagen es una cuestión de opinión personal. Sin embargo, cuando un filtro en bucle realiza correctamente su función de mejorar la predicción y el rendimiento de compresión, permite la codificación de video de alta calidad con un ancho de banda determinado. La compresión con pérdida, aunque eficiente en términos de reducción de tamaño de archivo, introduce distorsiones conocidas como ruido de cuantificación en la imagen decodificada. Estos ruidos se manifiestan en formas de artefactos característicos de la codificación, como las distorsiones de bloque, que han sido un sello distintivo desde los primeros estándares como H.261 y JPEG.

En la práctica, los filtros en bucle se emplean para distinguir los artefactos de codificación de las características genuinas de la imagen y corregir o reducir estos artefactos mientras se mantienen las características originales intactas. Por ejemplo, los artefactos de bloque suelen ocurrir en los límites de los bloques de codificación, y la magnitud de la distorsión está estrechamente relacionada con el parámetro de cuantificación (QP). Un decodificador puede detectar un artefacto de bloque gracias a su conocimiento de los límites del bloque y el valor actual de QP.

Los filtros en bucle pueden considerarse una forma de reducir el ruido, como los artefactos de codificación en la señal de video decodificada, aprovechando el conocimiento sobre las características de dicho ruido, como la forma en que se codificó el video. Estos filtros no solo se limitan al proceso de decodificación, sino que también se aplican durante la codificación, lo que hace que tanto el codificador como el decodificador sigan un proceso idéntico para garantizar que la predicción se realice correctamente.

En cuanto a los lugares de implementación de los filtros dentro de un códec de video, se pueden ubicar en tres fases diferentes: antes de la codificación (prefiltro), dentro del proceso de codificación y decodificación (filtro en bucle) o después de la decodificación (posfiltro). Un prefiltro se utiliza principalmente para reducir el ruido de la cámara o variaciones no deseadas en la señal de video antes de que se codifique. Capturar video en situaciones de poca luz, por ejemplo, puede generar ruido en forma de grano o variaciones inesperadas entre los fotogramas, lo cual aumenta el bitrate después de la compresión. En este caso, un prefiltro que reduzca el ruido espacial (como el grano) o las variaciones temporales (como el movimiento impredecible de la cámara) puede resultar en una compresión más eficiente. Un posfiltro, por su parte, se utiliza después de la decodificación y antes de la visualización o procesamiento adicional para reducir artefactos de compresión, como los artefactos de bloque o los anillos.

Es fundamental comprender que un filtro en bucle tiene como propósito mejorar el rendimiento de la compresión reduciendo los artefactos en los cuadros de referencia decodificados o reconstruidos. Este tipo de filtro se define en los estándares de codificación de video, ya que tanto el codificador como el decodificador deben aplicar el mismo proceso de filtrado. En la decodificación, cuando el cuadro de referencia está distorsionado debido a la cuantificación, la predicción ideal se vuelve imprecisa, lo que provoca que el bloque de referencia ya no sea idéntico al bloque actual. Esto complica la tarea de realizar una predicción precisa, incluso cuando se compensa el movimiento de manera perfecta. La residual, o diferencia entre el bloque actual y el de referencia, tendrá más información debido a la distorsión adicional en el bloque de referencia, lo que aumenta la complejidad del proceso de codificación.

Es importante notar que, si bien los filtros en bucle tienen un impacto positivo en la calidad visual y en la eficiencia de la compresión, su efectividad depende de una implementación adecuada dentro del marco de la codificación. No solo mejoran la apariencia de la imagen final, sino que también son cruciales para que se pueda alcanzar una alta calidad de video con un bitrate relativamente bajo.