En los códecs de video, la codificación de imágenes es un proceso fundamental que permite la compresión y la posterior decodificación de secuencias visuales. Este proceso se lleva a cabo mediante diferentes estructuras de imágenes codificadas que varían dependiendo del tipo de predicción utilizada, el número de imágenes de referencia y el modo en que los parámetros de codificación se gestionan para asegurar una decodificación eficiente. Las imágenes pueden ser codificadas de distintas maneras, lo que determina cómo se almacenan y se transmiten los datos de video.
Existen varios tipos de imágenes que se codifican dentro de una secuencia de video. Las imágenes intracuadros, o I-pictures, son aquellas que se codifican utilizando únicamente predicción intra, es decir, cada bloque de la imagen se predice a partir de los píxeles que ya existen dentro de la misma imagen. Este tipo de codificación no depende de imágenes previas y, por lo tanto, puede ser decodificado de manera independiente. Las imágenes intercuadros, por otro lado, dependen de imágenes previamente codificadas para realizar la predicción. Las imágenes P, o imágenes predichas, utilizan una imagen anterior para realizar la predicción, mientras que las imágenes B, o imágenes bi-direccionales, utilizan dos imágenes previas como referencia para una predicción más eficiente.
Las estructuras más modernas de codificación, como las utilizadas en los estándares H.264, HEVC y VVC, permiten una flexibilidad considerable en la organización de las secuencias de imágenes. Estas estructuras pueden tener diversos propósitos, como mejorar la eficiencia de compresión, limitar el retraso en la decodificación, y proporcionar puntos de resincronización. En una estructura conocida como "Grupo de Imágenes" (GoP, por sus siglas en inglés), las imágenes se organizan en secuencias que comienzan con una I-picture, seguida de varias P- y B-pictures, tal como se muestra en el ejemplo de la Figura 4.6. Este tipo de organización permite que la codificación sea más eficiente, ya que las imágenes de referencia, como las P y B, son más eficientes en términos de compresión que las imágenes I. La estructura GoP también permite puntos de acceso aleatorio: cuando una I-picture aparece después de un grupo de imágenes, puede utilizarse para reiniciar el proceso de decodificación, lo que facilita la edición o el acceso directo a partes específicas del video.
Un aspecto importante de la codificación de imágenes es el uso de unidades básicas de codificación, que son las pequeñas regiones de la imagen que se procesan para realizar la codificación. Estas unidades pueden variar en tamaño dependiendo del códec utilizado. Los macrobloques, por ejemplo, son unidades de 16x16 píxeles utilizadas en estándares como H.264. Por otro lado, códecs más recientes como AV1 y VP9 emplean supermacroblocs, unidades más grandes que permiten una codificación más eficiente en resoluciones más altas, como UHD y 4K. El tamaño de estas unidades básicas es crucial, ya que un tamaño mayor puede mejorar la eficiencia de compresión, pero requiere más recursos de procesamiento y memoria.
Además de las unidades básicas, las imágenes codificadas se dividen a menudo en "slices" (rebanadas) o "tiles" (losas). Un slice es una serie continua de unidades básicas dispuestas en un patrón de exploración rasterizada, lo que permite dividir las imágenes en bloques de datos que se pueden procesar y transmitir de manera independiente. Esto tiene varias ventajas: por ejemplo, la transmisión de cada slice en un paquete separado facilita el manejo de errores, ya que si un paquete se pierde, se puede reiniciar la decodificación en el siguiente slice. También permite una mayor paralelización, ya que diferentes slices pueden ser procesados simultáneamente, lo que acelera la codificación y la decodificación.
Los slices tienen un tamaño variable y pueden ser ajustados para optimizar la codificación. Si se utiliza un tamaño de slice fijo, puede haber una variación significativa en la cantidad de datos codificados por cada slice, dependiendo de si la región contiene áreas de fondo estáticas o elementos en movimiento rápido. Esto puede generar slices con tamaños desiguales, lo cual no es ideal en algunos casos. Por lo tanto, los encoders modernos intentan equilibrar el tamaño de los slices para mantener la cantidad de datos de cada uno lo más constante posible, lo que mejora la eficiencia de la codificación y la estabilidad de la transmisión.
Además, es importante considerar que las estructuras de imágenes y las unidades de codificación son esenciales no solo para la compresión y el almacenamiento eficiente de los videos, sino también para su procesamiento en tiempo real y su adaptación a diferentes dispositivos. El uso de estructuras como GoP, la predicción inter e intra-cuadro, y la segmentación en slices o tiles, son estrategias clave que permiten a los códecs modernos ofrecer una calidad de video superior con un uso eficiente del ancho de banda y los recursos de procesamiento.
¿Cómo impacta la predicción intra en la compresión y la eficiencia del codificado de vídeo en VVC?
La predicción intra es una herramienta esencial en los estándares de codificación de vídeo modernos, ya que permite la compresión eficiente de cuadros estáticos o intra-codificados dentro de una secuencia de vídeo. En el contexto de VVC (Versatile Video Coding), la predicción intra se amplía considerablemente respecto a las versiones anteriores como HEVC, con la adición de modos de predicción direccional modificados para bloques rectangulares y cuadrados, lo que mejora la eficiencia de compresión.
Uno de los aspectos más notables de la predicción intra en VVC es la ampliación de los modos de predicción. Mientras que HEVC solo soporta la predicción intra para bloques cuadrados, VVC permite la predicción de bloques rectangulares con proporciones de aspecto que van desde 1:1 hasta 1:4 o más. Esta capacidad de manejar bloques rectangulares se complementa con la introducción de modos de predicción direccional modificados, que son fundamentales cuando se predicen bloques con una relación de aspecto diferente. Por ejemplo, los bloques de aspecto 2:1 (N×(N/2)) requieren un conjunto especial de modos, que son modificados para cubrir con mayor eficacia los ángulos direccionales más probables. Así, los modos 2 y 66 en VVC son reconfigurados para permitir una predicción más precisa, lo que contribuye a una mayor eficiencia de compresión.
Además de los modos direccionales, VVC introduce filtros de interpolación más avanzados. En comparación con HEVC, donde se utilizaban filtros de dos taps, VVC emplea filtros de cuatro taps, lo que mejora la precisión de la predicción intra. Estos filtros se aplican dependiendo del modo de predicción direccional y ayudan a lograr una reconstrucción de bloques más precisa. De hecho, el uso de estos filtros más complejos es uno de los aspectos clave para lograr la reducción del tamaño de los bitstreams sin sacrificar la calidad visual.
Otro avance significativo en VVC es la predicción cruzada entre componentes de luminancia y crominancia. Mientras que en HEVC se utilizaban las muestras reconstruidas de la luminancia para predecir los bloques cromáticos, VVC introduce modos de predicción que permiten predecir los bloques cromáticos utilizando la información reconstruida de la luminancia de manera más eficiente. Esto se logra mediante la submuestreo de los bloques de luminancia y el uso de las muestras de borde para generar una predicción de la crominancia, lo que mejora la calidad del vídeo y reduce el tamaño del archivo.
Una característica adicional que VVC introduce son las líneas de referencia adicionales para la predicción intra. A diferencia de HEVC, que solo utiliza muestras reconstruidas de la línea 0 (la línea inmediatamente adyacente al bloque actual), VVC soporta hasta tres líneas de referencia: Línea 1 (una muestra más alejada del bloque), Línea 3 (tres muestras más alejadas) y la Línea 0. Esta flexibilidad permite una mayor precisión en la predicción intra al seleccionar la línea de referencia más adecuada para cada situación, optimizando así el proceso de codificación.
La predicción intra también puede beneficiarse de la subdivisión de bloques en sub-particiones en VVC. Cuando se trabaja con bloques grandes, estos pueden dividirse en sub-bloques más pequeños, lo que facilita la paralelización de las operaciones de predicción y mejora la eficiencia del proceso de codificación. Por ejemplo, un bloque de luma de tamaño 8×4 puede dividirse en sub-bloques 4×4, lo que permite que se procese de forma más eficiente y se reconstruya usando muestras de los sub-bloques previamente procesados.
A pesar de la complejidad añadida de estas técnicas avanzadas, los resultados en términos de eficiencia de codificación son impresionantes. Según estudios realizados, el modelo de prueba VVC (VTM 6.1) supera a HEVC en un promedio del 25% en términos de tamaño de bitstream para una calidad visual equivalente. No obstante, esta mejora de la eficiencia viene acompañada de una mayor complejidad en el proceso de decodificación: el tiempo de decodificación intra en VVC es aproximadamente el doble del de HEVC, lo que implica una mayor carga computacional.
La capacidad de VVC para predecir bloques de manera más precisa, utilizando una variedad de modos y líneas de referencia, junto con la integración de técnicas como la predicción cruzada entre luminancia y crominancia, permite que este estándar ofrezca una mejora sustancial en la compresión de vídeo, especialmente para aplicaciones que requieren una codificación intra eficiente, como la compresión de fotografías en dispositivos como los de Apple iOS. Sin embargo, a pesar de sus ventajas, la complejidad computacional añadida de VVC puede representar un desafío para las implementaciones que requieren una alta velocidad de decodificación.
En resumen, la predicción intra en VVC juega un papel crucial en la mejora de la eficiencia de la compresión, al ofrecer una gama más amplia de modos de predicción y técnicas avanzadas de interpolación, lo que resulta en bitstreams más pequeños sin perder calidad visual. A medida que se profundiza en el análisis de la predicción y la codificación de vídeo, es esencial reconocer la importancia de la optimización de estos procesos para maximizar los beneficios de VVC y adaptarlo a las necesidades de diversas aplicaciones.
¿Cómo funciona la predicción inter-cuadro en la compresión de vídeo?
En el proceso de compresión de vídeo, uno de los métodos más utilizados es la predicción inter-cuadro. Este método se basa en predecir bloques de píxeles en el cuadro actual utilizando bloques de píxeles de cuadros anteriores. De esta manera, se puede reducir la cantidad de información que necesita ser codificada y transmitida, ya que se aprovecha la redundancia temporal entre los cuadros sucesivos de un vídeo.
Cuando un bloque de píxeles en un cuadro es procesado, el codificador selecciona una región correspondiente en el cuadro anterior que sirva como predicción. Por ejemplo, si tenemos un bloque de píxeles en el cuadro actual y queremos predecirlo a partir de un bloque similar en un cuadro previo, buscamos una región que se asemeje lo más posible al bloque actual. Esta búsqueda no se realiza de manera estática, sino que se ajusta dinámicamente para encontrar la mejor correspondencia, lo que puede implicar un desplazamiento en las coordenadas espaciales entre los bloques. Este desplazamiento se describe mediante un vector de movimiento.
Una vez encontrado el bloque de predicción, el codificador calcula la diferencia entre el bloque actual y el bloque predicho. Esta diferencia, conocida como "residual", es la que se codifica y se envía al decodificador. Además del residual, se envía también el vector de movimiento, que indica cómo se ha desplazado la región de predicción desde su posición original en el cuadro anterior. El decodificador, al recibir estos datos, utiliza el vector de movimiento para localizar la región correspondiente en el cuadro anterior, luego decodifica el residual y suma el valor decodificado con el bloque predicho para obtener el bloque final.
Sin embargo, es importante tener en cuenta que si el proceso de compresión es con pérdida (lossy), el bloque decodificado no será idéntico al bloque original debido a la aproximación de los valores de los píxeles. Este tipo de compresión es común en los códecs de vídeo modernos, donde la reducción del tamaño del archivo se logra sacrificando una mínima pérdida de calidad visual.
Un aspecto fundamental en la predicción inter-cuadro es el concepto de "vector de movimiento", que puede resultar confuso. El vector de movimiento describe el desplazamiento de un bloque de un cuadro a otro, pero este desplazamiento no siempre corresponde con el movimiento real de los objetos en la escena. Es decir, aunque el vector de movimiento indica hacia dónde se mueve un bloque de píxeles, no siempre refleja el movimiento real de los objetos dentro del vídeo.
Por ejemplo, si un objeto se mueve de izquierda a derecha entre dos cuadros, el vector de movimiento puede señalar un desplazamiento que parece ser hacia la izquierda o hacia la derecha, dependiendo de la posición relativa de los bloques de predicción y de la forma en que se codifican los cambios en la imagen. En algunos casos, el desplazamiento real de un objeto puede no coincidir con el movimiento calculado, lo que puede generar distorsiones cuando se reconstruyen las imágenes a partir de la predicción.
Además, el proceso de codificación y predicción no siempre es perfecto, y la elección de los bloques de predicción puede tener un impacto significativo en la calidad de la compresión. Los codificadores suelen intentar minimizar el tamaño de los residuos, pero esta optimización también puede depender de factores como el tiempo de cómputo y el uso eficiente de los bits para codificar la diferencia entre bloques.
Por último, cabe destacar que el proceso de predicción inter-cuadro es un componente esencial en la compresión de vídeos, ya que permite reducir significativamente la cantidad de datos necesarios para representar los cuadros sucesivos de un vídeo. Sin embargo, la calidad de la predicción y la exactitud de los vectores de movimiento influyen directamente en la eficiencia de la compresión y en la calidad visual del vídeo final.
Es crucial que el lector entienda que la predicción inter-cuadro es una herramienta poderosa para la compresión de vídeos, pero no está exenta de limitaciones. Aunque reduce el tamaño de los archivos de vídeo, también introduce distorsiones que pueden volverse evidentes en escenas con movimientos rápidos o cambios complejos en la imagen. Estos artefactos pueden no ser visibles a simple vista en la mayoría de los casos, pero son una consecuencia inherente de la compresión con pérdida. Para lograr una compresión eficaz, es fundamental optimizar tanto la elección de los bloques de predicción como los vectores de movimiento, de modo que el proceso de codificación y decodificación sea lo más preciso y eficiente posible.
¿Cómo se realiza la codificación de bloques de transformada (TSB) en HEVC?
En el contexto de la codificación de video, uno de los elementos más fundamentales es la representación eficiente de los coeficientes no nulos dentro de los bloques de transformada (TSB). En el estándar HEVC (High Efficiency Video Coding), los TSB son secciones de datos dentro de un bloque de transformada (TB) que contienen información relevante sobre la frecuencia espacial de los píxeles. Estos bloques se utilizan para representar la variación de los valores dentro de una imagen, optimizando la cantidad de datos necesarios para codificar una secuencia de video.
Para entender cómo se codifican los TSB, es esencial conocer los diferentes procesos involucrados en la manipulación de los coeficientes no nulos dentro de estos bloques. Cada TSB que contiene coeficientes no nulos se codifica mediante una serie de cinco pasos secuenciales, donde se evalúa la magnitud, el signo y otros parámetros clave de los coeficientes presentes.
-
Coeficientes significativos: El proceso comienza con la identificación de los coeficientes significativos. A partir de una posición determinada, que puede ser el coeficiente 15 (en la esquina inferior derecha) o el primer coeficiente posterior al último coeficiente significativo en el TSB, se codifica un
sig_coeff_flagpara cada posición de coeficiente. Si el valor del coeficiente es no nulo, se marca con un "1"; si es nulo, se marca con un "0". Este proceso es crucial para indicar qué coeficientes son relevantes para la reconstrucción del bloque de imagen. -
Coeficientes con magnitud mayor que 1: Una vez identificados los coeficientes significativos, se evalúa si alguno tiene una magnitud mayor a 1. Para ello, se utiliza el
coeff_abs_level_greater_1_flag, que señala si un coeficiente tiene una magnitud superior a 1. Este paso es importante, ya que la codificación de la magnitud de los coeficientes se realiza de manera más eficiente si se puede reducir la cantidad de valores posibles que necesitan ser representados. -
Coeficientes con magnitud mayor que 2: Similar al paso anterior, pero en este caso, se verifica si alguno de los coeficientes tiene una magnitud superior a 2. Para estos coeficientes, se utiliza el
coeff_abs_level_greater_2_flag. Esta verificación es importante para ajustar aún más la codificación de los coeficientes y permitir una compresión más eficaz. -
Signo del coeficiente: A continuación, se codifica el signo de cada coeficiente no nulo. Este proceso es necesario para diferenciar entre los coeficientes positivos y negativos, lo que afecta directamente la calidad visual y la precisión de la reconstrucción de la imagen. Para ello, se emplea el
coeff_sign_flag, que indica si el coeficiente es positivo (0) o negativo (1). -
Nivel absoluto restante: Finalmente, se codifica el valor absoluto restante de cada coeficiente, después de que se hayan identificado las magnitudes mayores a 1 y 2. Esto se realiza mediante el
coeff_abs_level_remaining, que representa el valor de los coeficientes no procesados en los pasos anteriores.
Los TSB pueden ser escaneados en diferentes órdenes: diagonal, horizontal o vertical. La elección del orden de escaneo tiene un impacto en la eficiencia de la codificación. En la práctica, este escaneo se realiza para asegurar que los coeficientes más significativos se procesen primero, lo que optimiza el proceso de codificación y decodificación.
Por ejemplo, en un bloque de 16×16, si el último coeficiente significativo está en la posición (12, 0) y se utiliza un escaneo diagonal, los elementos coded_sub_block_flags se codifican en el orden correspondiente a esa secuencia de escaneo. Este tipo de organización también se refleja en el comportamiento del Last Significant Coefficient, el cual es crucial para determinar el punto de corte en la secuencia de coeficientes, ayudando a los decodificadores a entender qué partes del bloque son relevantes.
En la codificación de los TSB, se realizan varias iteraciones a través de los coeficientes. Cada iteración captura y codifica una "ola" sucesiva de información, refinando la representación del bloque. Este proceso es iterativo y, por lo tanto, asegura que se maximice la compresión sin perder información crucial para la reconstrucción de la imagen original.
Cuando los coeficientes se codifican con estos pasos, se reducen significativamente los datos necesarios para almacenar y transmitir la información de la imagen, mientras que se mantiene una calidad visual que resulta adecuada para la mayoría de las aplicaciones de video. Sin embargo, para que el proceso de codificación sea efectivo, es esencial comprender que la eficiencia depende de la correcta identificación de los coeficientes significativos y de la optimización de las etapas de codificación, basadas en la magnitud y el signo de los coeficientes.
Además, el orden de escaneo tiene una influencia significativa en la cantidad de información que debe procesarse y en la eficiencia global del algoritmo. La elección del escaneo diagonal, horizontal o vertical no es arbitraria, sino que responde a la distribución espacial de los coeficientes dentro del TSB, lo cual, si se maneja correctamente, puede reducir considerablemente la cantidad de datos que necesitan ser transmitidos.
¿Por qué la violación de normas se convierte en una expresión atractiva de poder en la política contemporánea?
¿Cómo se Construye una Narrativa en el Periodismo?
¿Cómo funciona la predicción intra en HEVC y cómo se optimiza la codificación de bloques?
¿Cómo entender los determinantes en álgebra lineal y su aplicación en sistemas de ecuaciones?

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