En la codificación de vídeo basada en HEVC, la secuencia de imágenes se organiza en grupos de imágenes (GoP) que, en este caso, tienen un tamaño de 64 cuadros. Cada GoP comienza con una imagen I, codificada únicamente mediante predicción intra, que requiere un número significativamente mayor de bits en comparación con las imágenes intercodificadas. Entre estas imágenes intercodificadas, cada octava es una imagen P, que usa predicción inter a partir de una imagen I o P previa, mientras que el resto son imágenes B, las cuales emplean predicción inter utilizando dos o más referencias. A un ritmo de 60 cuadros por segundo, esto implica que una imagen intra aparece poco menos de una vez por segundo, marcando puntos clave para la reconstrucción del vídeo.
Cada imagen se divide en unidades llamadas CTUs (Coding Tree Units) de 64×64 píxeles, que pueden subdividirse en unidades más pequeñas denominadas CUs (Coding Units), con tamaños que van desde 32×32, 16×16 hasta 8×8 píxeles. Estas particiones permiten adaptarse a la complejidad local de la imagen, como por ejemplo en áreas con movimiento detallado, donde una CTU puede dividirse en numerosas CUs para capturar variaciones precisas. A su vez, cada CU se divide en unidades de predicción (PUs), que pueden emplear predicción intra o inter, y en unidades de transformación (TUs), que pueden subdividirse para lograr un modelado óptimo de la señal residual.
El mecanismo de predicción inter en las CUs implica vectores de movimiento que describen cómo se relaciona un bloque con su referencia en imágenes anteriores o posteriores, optimizando así la compresión al reducir redundancias temporales. La ausencia o presencia de coeficientes de transformación en las TUs refleja la cantidad de información residual necesaria para reconstruir la imagen con precisión. Algunos TUs carecen de coeficientes no nulos, lo que indica una predicción eficiente, mientras que otros contienen coeficientes en los componentes de luminancia (Y) o crominancia (Cb, Cr), dependiendo de la complejidad local.
Por otro lado, el estándar más reciente VVC (Versatile Video Coding), aunque no compatible hacia atrás con HEVC, retoma muchos conceptos fundamentales de su predecesor, mejorándolos y simplificándolos en ciertos aspectos. VVC continúa usando estructuras jerárquicas similares como VPS, SPS y PPS, pero introduce un parámetro adicional, el APS, para señales que pueden cambiar frecuentemente a nivel de slice o imagen, como los filtros de bucle, permitiendo así una señalización más eficiente y flexible.
En VVC, la estructura de GOP también se mantiene, aunque con un mecanismo más sencillo para indicar la disposición de imágenes de referencia. Se añade el concepto de Gradual Decoding Refresh, que posibilita iniciar la decodificación desde una imagen intercodificada, construyendo gradualmente una imagen decodificada correcta sin necesidad de esperar a la siguiente imagen intra, mejorando la eficiencia en la transmisión y recuperación rápida.
En cuanto a la partición de la imagen, VVC redefine el concepto de slice, permitiendo divisiones rectangulares o por raster de tiles completos, además de introducir subimágenes que agrupan regiones rectangulares con una o más slices. Las CTUs en VVC aumentan hasta 128×128 píxeles, con una máxima transformada de 64×64, y su partición en CUs se realiza mediante un quadtree seguido de divisiones binarias o ternarias, permitiendo bloques cuadrados o rectangulares, con un tamaño mínimo de 4×4 píxeles. Esta flexibilidad se extiende también a los tamaños de transformación y predicción, que generalmente coinciden con el tamaño de CU, eliminando la necesidad de divisiones adicionales para PU o TU.
Además, VVC permite la partición independiente de los componentes de luminancia y crominancia dentro de un mismo CTU, lo que permite un tratamiento diferenciado según las características de cada componente, optimizando aún más la compresión y calidad visual.
Es importante entender que estas estructuras jerárquicas y métodos de partición no solo responden a una búsqueda de eficiencia en la compresión, sino que también representan un equilibrio delicado entre complejidad computacional y calidad visual. Cada decisión en la partición y codificación influye en el tamaño del archivo resultante y la capacidad para reconstruir fielmente el contenido visual original. Los avances en VVC reflejan una evolución que mantiene este equilibrio, incorporando nuevas estrategias para manejar una diversidad creciente de contenidos y resoluciones, desde vídeos tradicionales hasta aplicaciones en 4K y superiores.
En la práctica, comprender estas estructuras es esencial para quienes trabajan en desarrollo de códecs o análisis de vídeo, ya que condicionan el flujo de bits, la latencia y la robustez frente a errores. Además, la coexistencia de predicciones intra e inter, junto con la granularidad de partición, ofrece al encoder una amplia variedad de opciones para adaptarse a diferentes tipos de contenido y condiciones de transmisión.
¿Cómo se realiza la partición y codificación de Unidades de Predicción Inter (Inter-PU) en HEVC?
En el proceso de codificación de vídeo, uno de los métodos clave para mejorar la eficiencia en la compresión de imágenes es la predicción inter (Inter-PU), que se utiliza en el estándar HEVC (High Efficiency Video Coding). Este proceso se basa en predecir el contenido de bloques o unidades de codificación (CU) mediante el uso de datos de imágenes anteriores (referencias) para reducir la cantidad de información que debe enviarse, optimizando así el ancho de banda necesario para la transmisión.
Cuando se trabaja con predicción inter en HEVC, la partición de los CUs juega un papel crucial en la forma en que se subdividen los bloques de imagen para su análisis y codificación. Un CU puede dividirse en diversas configuraciones dependiendo de su tamaño y características. Por ejemplo, una CU de tamaño 16×16, que es el tamaño mínimo disponible, puede subdividirse en cuatro unidades de predicción (PUs) de 8×8, lo cual es una partición simétrica. Sin embargo, si el CU es más grande y el tamaño mínimo de CU es de 8×8, entonces una partición de 4 PUs de 8×8 no es válida, pues la codificación sería más eficiente al seleccionar directamente un CU de 8×8.
El estándar HEVC también permite configuraciones de partición asimétrica de los PUs, lo que proporciona mayor flexibilidad para ajustar la forma y el tamaño de las unidades de predicción según las características del contenido del vídeo. Estas particiones asimétricas pueden incluir configuraciones como N/2×2N, donde una parte del CU es más estrecha que la otra, o 2N×N/2, que permite un ajuste más fino en las áreas del CU. Aunque estas particiones ofrecen ventajas en cuanto a la capacidad de modelar mejor las áreas con objetos en movimiento, también traen consigo algunas desventajas. Por un lado, aumentan los costos computacionales, ya que el codificador debe buscar más opciones de partición para encontrar la más adecuada. Por otro lado, los costos de señalización también aumentan, ya que se deben transmitir más tipos de partición.
Es importante tener en cuenta que no todas las particiones de PU asimétricas están disponibles para todos los tamaños de CU. La elección de la partición depende de la configuración del codificador, que se puede ajustar a través de una bandera en el conjunto de parámetros de secuencia.
En cuanto a la codificación de los PUs, este proceso puede llevarse a cabo de varias maneras. La más sencilla es la codificación "Skip", que simplemente indica que no es necesario enviar más información. Si se utilizan particiones que no pueden ser saltadas, entonces se emplean otras técnicas como "Merge" o "AMVP" (Predicción de Movimiento de Bloques Aditiva). En el modo "Merge", el codificador busca candidatos de PUs adyacentes en la imagen o en la imagen de referencia para predecir el movimiento y, de ser posible, minimizar la cantidad de información que debe enviarse. El proceso incluye la transmisión de un índice de candidato y la información residual, que es la diferencia entre la predicción y el valor real.
En el modo AMVP, el codificador también selecciona candidatos, pero además envía un vector de movimiento delta (que es una pequeña variación respecto al movimiento previamente codificado) y un índice de referencia de la imagen. Este modo permite un ajuste más preciso al considerar las pequeñas variaciones entre los bloques adyacentes, mejorando así la precisión de la predicción.
Los ejemplos de particiones inter-PU y sus correspondientes vectores de movimiento son cruciales para entender cómo se optimiza el proceso de codificación. Un ejemplo podría ser la partición de una CU de 32×32 en dos PUs de 24×32 y 8×32, o la partición de una CU de 16×16 en cuatro PUs de 8×8. En cada uno de estos casos, el codificador debe elegir el tipo de partición que mejor se ajusta a las características del movimiento en la escena del vídeo.
Para ilustrar cómo se realiza la codificación en la práctica, se pueden observar casos específicos como los de las secuencias de la competencia de jinetes. En estos ejemplos, la imagen completa se divide en CTUs (Unidades de Árbol de Codificación) de tamaño 64×64, pero dentro de estas, las áreas con movimientos complejos, como las del jinete y el caballo, suelen ser representadas mediante particiones más pequeñas, como bloques de 8×4, para mejorar la precisión en la predicción del movimiento.
Este enfoque permite una codificación eficiente que se adapta a la naturaleza dinámica del vídeo, mejorando tanto la calidad de la imagen como la compresión, todo mientras se minimiza la cantidad de información que debe transmitirse.
Al analizar el proceso de partición y codificación de los PUs en HEVC, es fundamental comprender que la elección de la partición depende en gran medida de las características del vídeo a codificar, así como de los requisitos de eficiencia de compresión. Además, el balance entre la complejidad computacional y los costos de señalización es un factor crucial que influye en la decisión del codificador para habilitar o no las particiones asimétricas. Este equilibrio es clave para lograr una codificación eficiente sin comprometer la calidad visual del vídeo.
¿Cómo los modelos de probabilidad y la adaptación al contexto afectan la codificación de entropía?
Los codificadores de entropía pueden estimar o modelar la probabilidad de que un símbolo, , tenga un valor particular, . Por ejemplo, si es binario, un modelo de probabilidad estima la probabilidad de que sea 0 o 1, es decir, o . Este modelo es fundamental en muchos esquemas de codificación, donde la adaptación al contexto es clave para la eficiencia.
El modelo de probabilidad o modelo de contexto mantiene una estimación de . Naturalmente, . Durante la codificación, el codificador de entropía utiliza esta estimación para codificar el valor actual de . Si el valor de es 0, la probabilidad de que aumenta ligeramente, ya que hemos codificado un valor más de . Si el valor de es 1, la probabilidad disminuye. Este proceso de actualización del modelo de probabilidad es continuo y se ajusta en función de las estadísticas de codificación reales. Así, el modelo de probabilidad es adaptativo, ajustándose de manera dinámica en función de los valores que se codifican.
La pregunta clave es, ¿qué modelo debemos elegir para codificar ? Una opción es mantener un modelo para cada elemento de la sintaxis. Por ejemplo, un modelo para y otro para . Otra opción es mantener varios modelos para ciertos elementos de la sintaxis y seleccionar un modelo basado en el contexto. Si todos los bloques recientemente codificados tienen un positivo (es decir, ), esto podría aumentar la probabilidad de que el actual también sea positivo. Este proceso es ilustrado en la figura 8.7, que muestra cómo funciona la adaptación de probabilidad de contexto en un símbolo binario . El codificador utiliza las estadísticas codificadas recientemente, el contexto, para seleccionar un modelo de probabilidad entre varios modelos posibles. Este modelo seleccionado proporciona una estimación de , que el codificador utiliza para codificar el símbolo actual. Después de codificar el símbolo, dependiendo de su valor (0 o 1), el codificador actualiza el modelo de contexto.
El número de modelos de probabilidad que debemos mantener es una cuestión de equilibrio entre varios factores. Si tenemos más modelos de probabilidad, podemos, en teoría, seguir con mayor precisión la probabilidad de un valor particular del símbolo. Sin embargo, tener más modelos implica que cada modelo individual se adapta más lentamente, ya que la codificación de un símbolo con ese modelo ocurre con menos frecuencia. Además, cada modelo de probabilidad requiere almacenar y actualizar variables, lo que puede aumentar la complejidad computacional y de almacenamiento.
En la codificación aritmética binaria adaptativa por contexto (CABAC), que se abordará más adelante, se examinan modelos de probabilidad y adaptación al contexto en detalle, lo que permite una codificación más eficiente y flexible.
Además de estos aspectos técnicos, es fundamental entender cómo la adaptación al contexto permite que el proceso de codificación sea más eficiente en comparación con un modelo estático. La capacidad de modificar las probabilidades en función del contexto local mejora la precisión de la codificación, haciendo que el sistema sea más sensible a las variaciones en los datos y optimizando el uso del espacio de almacenamiento.
La codificación de longitud variable (VLC), por otro lado, mapea cada valor de símbolo a una palabra de código binaria con un número variable de bits. Es preferible que los valores de símbolo más probables se mapeen a palabras de código más cortas, mientras que los valores menos comunes se asignen a palabras de código más largas. En un esquema de VLC, cada palabra de código debe ser única y decodificable de manera unívoca. Por ejemplo, en una tabla de codificación, los valores más pequeños de símbolo podrían estar asociados con códigos binarios más cortos, mientras que los valores más grandes se asignan a códigos más largos. Esto permite una codificación más eficiente, donde el número de bits utilizados para codificar un símbolo depende de la probabilidad de que ese símbolo ocurra.
Sin embargo, es importante tener en cuenta que el diseño de una tabla de VLC no siempre es trivial. Si las palabras de código en una tabla no son unívocamente decodificables (por ejemplo, si una palabra es un prefijo de otra), el esquema de VLC no funcionará correctamente. Por esta razón, se deben evitar tablas donde los códigos sean prefijos de otros códigos dentro de la misma tabla. Un ejemplo de esto es la tabla de VLC del tipo (c), que no sería válida debido a las ambigüedades en la decodificación.
Existen diferentes tipos de esquemas VLC, como la codificación unaria, que consiste en una cadena de 1s terminada en un 0, o la codificación Exponencial-Golomb (Exp-Golomb), que sigue un patrón regular para mapear valores de símbolo a palabras de código. Estos métodos son útiles en diferentes contextos, dependiendo de la distribución de los símbolos que se deseen codificar. La codificación unaria es adecuada cuando los valores más pequeños son más probables que los grandes, mientras que la codificación Exp-Golomb ofrece una solución más eficiente para ciertos rangos de valores.
Es importante destacar que aunque estas técnicas de codificación son fundamentales en la compresión de datos, también están vinculadas a la idea de adaptabilidad. Cuanto más pueda adaptarse el sistema a las características del flujo de datos, mayor será la eficiencia de la compresión. Por lo tanto, tanto los modelos de probabilidad como las técnicas de codificación de longitud variable se utilizan para ajustar dinámicamente el proceso de codificación a las variaciones en los datos y mejorar la compresión.
¿Cómo hacer que tu primer contacto sea memorable?
¿Cómo gestionar el shock hemorrágico traumático? Protocolos y recomendaciones en la resucitación
¿Cómo funcionan los amplificadores operacionales de salida diferencial?
¿Cómo explorar la costa norte de Cornualles y sus paisajes históricos?

Deutsch
Francais
Nederlands
Svenska
Norsk
Dansk
Suomi
Espanol
Italiano
Portugues
Magyar
Polski
Cestina
Русский