El proceso de transformación puede considerarse como una técnica que encuentra el peso de cada patrón base necesario para formar un bloque de imagen. En el caso de una transformada discreta del coseno (DCT) de 4×4, cada bloque de imagen de 4×4 contiene 16 muestras, y por lo tanto, tiene 16 coeficientes transformados, cada uno de los cuales corresponde a un patrón base específico. Los patrones base son fundamentales, ya que permiten representar una imagen en términos de frecuencias espaciales.

En un bloque de 4×4, los patrones base se disponen en un formato específico: el patrón superior izquierdo es un bloque plano, correspondiente a la frecuencia cero o ‘DC’. A medida que nos movemos hacia la derecha, cada patrón aumenta en frecuencia en la dirección horizontal. Si nos desplazamos hacia abajo, cada patrón aumenta en frecuencia en la dirección vertical. El patrón en la esquina inferior derecha es un tablero de ajedrez, que representa una mezcla de frecuencias horizontales y verticales.

Estos patrones base se pueden combinar mediante diferentes coeficientes (pesos), que modifican la contribución de cada patrón a la imagen. Por ejemplo, un coeficiente de −41 indica que el patrón correspondiente se escala en 41 y se invierte debido al signo negativo. A medida que avanzamos hacia la derecha y hacia abajo, los coeficientes de la transformada generalmente tienden a reducirse. Este comportamiento es típico de los bloques de imágenes naturales, donde la mayoría de las frecuencias espaciales más altas tienen valores más bajos.

El proceso de transformación no tiene como objetivo comprimir los datos directamente, sino representar la información del bloque original de una manera que sea más fácil de comprimir. La importancia de este paso radica en que transforma una distribución de valores en la que cada muestra tiene una magnitud similar, a una representación en la que solo unos pocos coeficientes tienen magnitudes significativas, y el resto es relativamente insignificante. Esta transformación hace que los datos sean más susceptibles a la compresión, ya que se pueden descartar los coeficientes de menor magnitud sin perder mucha información visual relevante.

En este contexto, la cuantización juega un papel crucial. La cuantización es un proceso que reduce la precisión de los coeficientes transformados, lo que conlleva la eliminación de coeficientes de baja magnitud. En el caso de un bloque 4×4 de coeficientes transformados, la cuantización puede convertir muchos de estos coeficientes en cero. Esto se logra mediante un parámetro llamado "parámetro de cuantización" (QP). Un valor más alto de QP produce una mayor cuantización, lo que implica una mayor pérdida de precisión y, por lo tanto, mayor compresión, pero a costa de la calidad. Este equilibrio entre compresión y calidad se puede ver en la diferencia entre dos versiones decodificadas de una misma imagen, codificada con diferentes valores de QP. Un QP bajo resulta en mejor calidad de video pero menor compresión, mientras que un QP alto mejora la compresión pero disminuye la calidad visual.

Es importante comprender que la cuantización es un proceso irreversible o ‘con pérdida’, lo que significa que la información eliminada no puede ser restaurada. Esta característica es fundamental cuando se analizan los métodos de compresión de video, ya que la eficiencia de la compresión depende de la capacidad de eliminar datos sin perder demasiada calidad visual.

Una vez cuantificados los coeficientes, se pasa al proceso de codificación del bitstream, donde toda la información necesaria para decodificar el video debe ser empaquetada de manera eficiente. Esto incluye los coeficientes transformados y cuantizados, parámetros de predicción como vectores de movimiento, modos de predicción, y otros datos relacionados con la secuencia de video. La codificación de este bitstream debe ser adecuada para transmisión, compresión y decodificación efectiva.

Es esencial notar que la disposición de los coeficientes transformados sigue patrones específicos. En general, los valores más grandes tienden a agruparse alrededor del patrón de DC en la parte superior izquierda, mientras que los valores más pequeños se encuentran hacia las frecuencias más altas en la parte inferior derecha. La reordenación de estos coeficientes, a menudo mediante un escaneo en zig-zag, asegura que los coeficientes más significativos se agrupen, lo que mejora la eficiencia de la compresión.

La codificación predictiva también desempeña un papel vital en la eficiencia de la compresión. Esta técnica aprovecha la alta correlación entre bloques de video vecinos, lo que permite predecir partes de una imagen basándose en la información de bloques anteriores. La combinación de técnicas como la transformación, la cuantización, y la codificación predictiva hace que los sistemas de compresión de video sean capaces de reducir significativamente el tamaño de los archivos sin perder una cantidad considerable de calidad visual.

Es fundamental para los lectores entender que la combinación de estos procesos —transformación, cuantización, codificación de bitstream y predicción— es lo que permite que la compresión de video sea tan eficiente. Cada paso tiene un impacto directo en la calidad final del video y en la cantidad de compresión alcanzada.

¿Cómo se comparan los codificadores HEVC HM y x265 en términos de rendimiento?

Al comparar el rendimiento de los codificadores HEVC HM y x265, ambos se evaluaron con la misma secuencia de video, "Pedestrian Area". Ambos codificadores fueron utilizados en modo basado en archivos, con un archivo de video sin comprimir como entrada y un archivo de flujo de bits como salida. Se codificaron 10 fotogramas de este clip en 1080p en una computadora iMac equipada con cuatro núcleos de procesador Intel i5 a 3.4 GHz, 32 GB de memoria y una unidad de estado sólido (SSD). Los parámetros de cuantificación (QP) de cada codificador se ajustaron para generar tamaños de archivo similares. El x265 se probó con sus preajustes "Medium" y "Very Slow".

El VMAF (Video Multimethod Assessment Fusion) es una métrica de calidad visual de referencia total desarrollada por Netflix. Un mayor puntaje de VMAF indica una mejor calidad visual. De las tres pruebas realizadas, el codificador HM generó el mejor rendimiento de compresión, con un tamaño de archivo de 70 kbytes y un puntaje de VMAF de 84.4. Sin embargo, esto vino a expensas de un tiempo de codificación extremadamente lento, alrededor de 150 segundos, o 2.5 minutos por fotograma de video. En cambio, el preajuste "Very Slow" de x265 toma alrededor de 3 segundos por fotograma y produce un tamaño de archivo similar al de HM, pero con un puntaje de VMAF ligeramente inferior (81.9).

Utilizando el preajuste "Medium" o predeterminado, x265 codifica 10 fotogramas en menos de 2 segundos, con un archivo ligeramente más grande y un puntaje de VMAF también ligeramente inferior. Este ejemplo ilustra el equilibrio entre la complejidad computacional y el rendimiento de compresión al codificar video. En este caso, el mejor rendimiento de compresión se logra a costa de una alta complejidad computacional, que, en este caso, implica 2.5 minutos para codificar cada fotograma.

El preajuste "Very Slow" de x265 ofrece un tiempo de codificación más realista, pero a costa de una ligera caída en el rendimiento de la compresión en comparación con el codificador HM. El preajuste "Medium" es más rápido, pero aún se encuentra por debajo del rendimiento en tiempo real en la computadora de prueba. El preajuste más rápido, "Very Fast", codifica alrededor de 30 fotogramas por segundo, lo que representa un rendimiento casi en tiempo real para video a 30 fps. En este sentido, los preajustes más lentos de x265 podrían ser adecuados para codificación en tiempo real cuando la reducción del tamaño del archivo y una mejor calidad visual son más importantes que la velocidad de codificación, mientras que el preajuste "Very Fast" podría ser adecuado para codificación en tiempo real, como en transmisiones en vivo o videoconferencias.

En muchos dispositivos electrónicos de consumo, la codificación y decodificación de video se implementan en hardware dedicado. Por ejemplo, los modelos iPhone 13 y 14 de Apple incluyen el chip A15, que tiene soporte dedicado para la codificación y decodificación H.265 y H.264. Algunos dispositivos móviles de Samsung incluyen procesadores Exynos, como el Exynos 2200, que pueden codificar y decodificar varios formatos de video en hardware, incluyendo H.264, H.265 y AV1. Los procesadores Intel de séptima generación o posteriores, que están disponibles desde 2017, incluyen procesadores gráficos integrados con soporte para codificación y decodificación de video en hardware, incluyendo H.264 y H.265.

El uso de códecs de video en hardware tiene ciertas ventajas sobre los códecs de software, siendo una de las más importantes la capacidad de codificar y/o decodificar en tiempo real con un consumo de energía significativamente menor que la implementación equivalente en software. Cuando se diseña un servicio de video para consumidores, como un sistema de videoconferencia o transmisión de video, es preferible usar códecs de video en hardware en los dispositivos de los consumidores cuando sea posible, para hacer un uso eficiente de los recursos computacionales y el consumo de energía.

Además, es común que los chipsets de dispositivos más nuevos incluyan soporte de hardware para múltiples estándares de codificación de video. Por ejemplo, los proveedores de servicios de transmisión de video pueden ofrecer versiones de contenido en alta resolución utilizando un estándar de codificación más eficiente, como H.265, y también proporcionar versiones de menor resolución utilizando un estándar más antiguo, como H.264. De esta manera, el video de mayor calidad se puede entregar de manera eficiente si el dispositivo del consumidor tiene soporte de hardware para H.265, mientras que los dispositivos más antiguos siempre pueden acceder a versiones de resolución más baja utilizando un códec H.264.

¿Cómo se comunica la predicción inter en la codificación de video y qué parámetros son esenciales para su eficiencia?

En la codificación de video, la predicción inter juega un papel fundamental para reducir la cantidad de información necesaria para representar una secuencia. La comunicación eficaz de los parámetros de predicción entre el codificador y el decodificador es clave para mantener una alta eficiencia sin sacrificar la calidad. En este contexto, se utilizan estructuras de referencia de imágenes que determinan qué imágenes anteriores o futuras pueden servir como base para predecir la imagen actual.

Los conjuntos de imágenes de referencia (RPS) son la herramienta mediante la cual el codificador comunica al decodificador qué imágenes están disponibles para la predicción inter. Esto es especialmente importante cuando se emplean distintos esquemas de referencia, como el retraso bajo o el acceso aleatorio, que organizan de manera diferente la secuencia y la jerarquía de imágenes de referencia.

Para cada bloque de la imagen actual que se predice inter, el decodificador necesita conocer ciertos parámetros esenciales: los vectores de movimiento que indican la posición relativa del bloque de referencia en la imagen o imágenes de referencia, y los índices que identifican qué imágenes de referencia se están utilizando. En el caso de una predicción simple (P), se necesita solo un vector de movimiento y un índice de referencia. En la predicción bipredicha (B), que combina información de dos imágenes de referencia, se requieren dos vectores y dos índices.

La transmisión eficiente de estos parámetros es un reto, ya que se busca minimizar el número de bits necesarios para codificarlos. Para lograr esto, los parámetros se dividen en dos grupos: parámetros base y parámetros delta. Los parámetros base pueden ser inferidos automáticamente por el decodificador usando la información de bloques previamente decodificados, o seleccionados de una lista de candidatos generados también a partir de bloques anteriores, enviando solo un índice para identificar la elección. Los parámetros delta representan la diferencia entre el parámetro base y el real, y se codifican solo si es necesario.

El ejemplo clásico para entender este sistema es el cálculo del vector de movimiento base para un bloque actual, utilizando los vectores de sus bloques vecinos ya codificados. Entre los métodos para calcular el vector base se encuentran: el uso de la mediana de los vectores vecinos, la selección del vector más común o la elección directa de un candidato óptimo. Este vector base, por ejemplo (+3, +2), puede diferir ligeramente del vector de movimiento real (+3, +1.5). Si se codifica el parámetro delta (en este caso, (0, -0.5)), el decodificador puede corregir el vector base para obtener el vector real, reduciendo el error de predicción. Sin embargo, codificar estos deltas requiere más bits.

Por tanto, existe un balance entre codificar o no el parámetro delta: omitirlo reduce la cantidad de bits usados para la predicción, pero puede aumentar el residual al usar un vector subóptimo. Codificarlo mejora la precisión, disminuyendo el residual pero incrementando la cantidad de bits para transmitir la corrección.

La generación automática o la selección inteligente de los vectores base a partir de información previamente decodificada, junto con una adecuada señalización de deltas solo cuando es necesario, son estrategias que permiten optimizar la eficiencia en la codificación inter. Estos mecanismos se fundamentan en una fuerte dependencia del orden y del contexto de codificación, como el escaneo en raster y el uso de la información vecina, lo cual maximiza la reutilización de información y minimiza la redundancia.

Entender este proceso es vital para apreciar cómo los estándares modernos, como HEVC, consiguen altas tasas de compresión manteniendo una calidad visual elevada. La elección y señalización correcta de los parámetros de predicción determinan en gran medida el balance entre calidad y tasa de bits, fundamental para aplicaciones desde streaming hasta almacenamiento en medios limitados.

Además, es importante considerar que la implementación práctica de estos métodos debe adaptarse a las condiciones del contenido, al tipo de movimiento presente y a las necesidades de latencia y complejidad computacional. La interacción entre la estructura de referencia, la predicción y la codificación delta forma el núcleo de la optimización en la codificación inter, y su estudio permite avanzar hacia algoritmos más eficientes y adaptativos en el futuro.

¿Cómo funciona la codificación inter-PU en HEVC?

En el marco de la codificación de video HEVC, uno de los aspectos fundamentales es la predicción inter-PU, la cual optimiza el proceso de compresión al aprovechar la redundancia espacial y temporal en las secuencias de video. La técnica central en este contexto es el uso de la codificación en modo Skip o Merge, que permite a los bloques de predicción (PU, por sus siglas en inglés) compartir parámetros de movimiento entre regiones adyacentes, lo que reduce significativamente la cantidad de datos a enviar.

El proceso comienza con la selección de un candidato de una lista de predictores disponibles, donde la codificación Skip o Merge se utiliza para determinar si un bloque puede heredar sus parámetros de movimiento de un bloque vecino. La codificación inter-PU en HEVC es eficiente, ya que permite que un único conjunto de parámetros de predicción, como el vector de movimiento y la elección de la imagen de referencia, se aplique a múltiples bloques adyacentes. De esta manera, se reduce la necesidad de enviar los mismos parámetros repetidamente para cada bloque individual. En lugar de enviar los parámetros de movimiento para cada bloque en una región combinada, el codificador señala que cada PU hereda sus parámetros de un PU adyacente.

El bloque codificado en modo Skip o Merge toma prestados estos parámetros de los bloques vecinos en términos espaciales o temporales. Por ejemplo, los parámetros de movimiento y la elección de la imagen de referencia se envían solo una vez para cada región combinada, y no se vuelven a transmitir para los bloques subsecuentes dentro de esa región. Esto se ilustra de manera visual en la Figura 6.87, que muestra cómo las regiones combinadas pueden tener formas irregulares y cruzar los límites de las unidades de codificación de transformaciones (CTU).

La lista de candidatos de fusión, también conocida como "Merge candidates", se construye a partir de hasta cinco bloques vecinos. Estos candidatos se seleccionan en función de su proximidad espacial y la disponibilidad de bloques ya codificados. La lista resultante contiene hasta cuatro candidatos espaciales, los cuales se eligen de los bloques adyacentes disponibles, siempre y cuando no estén codificados en modo intra y no tengan parámetros de movimiento idénticos a un candidato anterior. Si todos los bloques vecinos están disponibles, solo se seleccionan los primeros cuatro, ya que no se pueden usar más de cuatro candidatos espaciales.

En algunos casos, la lista también puede incluir candidatos temporales o co-localizados. Por ejemplo, se puede elegir un bloque ubicado en la misma posición en una imagen de referencia, ya sea en la misma posición o en una posición diferente si el bloque de referencia inmediato no está disponible. La selección de estos candidatos se realiza siguiendo criterios específicos, y el número total de candidatos posibles se indica en el encabezado del slice.

La codificación inter-PU en HEVC también se complementa con la predicción avanzada de vectores de movimiento (AMVP, por sus siglas en inglés), en la cual el codificador genera dos posibles predictores para cada vector de movimiento. Estos predictores se seleccionan de un conjunto de opciones que pueden incluir bloques de la misma región espacial o de un marco temporal adyacente. Los predictores disponibles pueden ser de varios tipos, y el codificador selecciona el que mejor se adapte a la situación, enviando luego el índice de referencia y la diferencia entre el vector de movimiento real y el predictor.

El proceso de señalización de la elección del predictor es crucial, ya que implica comunicar al decodificador qué parámetro de movimiento debe aplicar. De la misma manera, la diferencia entre el vector de movimiento real y el predictor (MVD) también se señala en el flujo de bits. Esto permite que el decodificador aplique correctamente los parámetros de movimiento para reconstruir la imagen de manera precisa.

Una de las ventajas más significativas de este enfoque es la eficiencia de la compresión. Al no tener que enviar parámetros redundantes para cada bloque individual, se reduce el tamaño del flujo de bits, lo que mejora la tasa de compresión sin comprometer la calidad de la imagen reconstruida. La clave aquí es el uso inteligente de los parámetros heredados y el aprovechamiento de la redundancia espacial y temporal.

Para los lectores interesados en comprender a fondo estos procesos, es esencial recordar que la eficiencia de la predicción inter-PU depende en gran medida de cómo se seleccionan los candidatos de fusión y cómo se aplican las predicciones de movimiento. Además, la habilidad del codificador para manejar diferentes tipos de bloques y patrones de movimiento es crucial para lograr una compresión óptima. La comprensión detallada de estos mecanismos permite a los ingenieros y desarrolladores mejorar las técnicas de codificación y optimizar las implementaciones de HEVC en sistemas de video modernos.