El macrobloque es una unidad de procesamiento en formatos de compresión de imágenes y vídeo basada en transformadas de bloques lineales, típicamente la transformada de coseno discreta (DCT). Un macrobloque normalmente consta de 16×16 muestras, y se subdivide a su vez en bloques de transformación, y puede subdividirse a su vez en bloques de predicción. Los formatos que se basan en macrobloques incluyen JPEG , donde se denominan bloques MCU , H.261 , MPEG-1 Parte 2 , H.262/MPEG-2 Parte 2 , H.263 , MPEG-4 Parte 2 y H.264/MPEG-4 AVC . [1] [2] [3] [4] En H.265/HEVC , el macrobloque como unidad de procesamiento básica ha sido reemplazado por la unidad de árbol de codificación . [5]
Un macrobloque se divide en bloques de transformación, que sirven como entrada para la transformación de bloques lineales, por ejemplo, la DCT. En H.261, el primer códec de vídeo que utiliza macrobloques, los bloques de transformación tienen un tamaño fijo de 8×8 muestras. [1] En el espacio de color YCbCr con submuestreo de croma 4:2:0 , un macrobloque de 16×16 consta de 16×16 muestras de luminancia (Y) y 8×8 muestras de croma (Cb y Cr). Estas muestras se dividen en cuatro bloques Y, un bloque Cb y un bloque Cr. Este diseño también se utiliza en JPEG y en la mayoría de los otros códecs de vídeo basados en macrobloques con un tamaño de bloque de transformación fijo, como MPEG-1 Parte 2 y H.262/MPEG-2 Parte 2. En otros formatos de submuestreo de croma , por ejemplo, 4:0:0, 4:2:2 o 4:4:4, la cantidad de muestras de croma en un macrobloque será menor o mayor, y la agrupación de muestras de croma en bloques diferirá en consecuencia.
En los estándares de codificación de video basados en macrobloques más modernos, como H.263 y H.264/AVC, los bloques de transformación pueden tener tamaños distintos a 8x8 muestras. Por ejemplo, en el perfil principal H.264/AVC, el tamaño del bloque de transformación es 4x4. [4] En el perfil alto H.264/AVC, el tamaño del bloque de transformación puede ser 4x4 u 8x8, adaptados según cada macrobloque. [4]
A diferencia de la división en bloques de transformación, un macrobloque se puede dividir en bloques de predicción. En los primeros estándares, como H.261, MPEG-1 Parte 2 y H.262/MPEG-2 Parte 2, la compensación de movimiento se realiza con un vector de movimiento por macrobloque. [1] [2] En estándares más modernos, como H.264/AVC, un macrobloque se puede dividir en múltiples bloques de predicción de tamaño variable, llamados particiones. [4] En un macrobloque interpredicho en H.264/AVC, se especifica un vector de movimiento independiente para cada partición. [4] De manera correspondiente, en un macrobloque intrapredicho, donde las muestras se predicen extrapolando desde los bordes de los bloques vecinos, la dirección predicha se especifica por partición. [4] En H.264/AVC, el tamaño de la partición de predicción varía de 4×4 a 16×16 muestras tanto para la interpredicción (compensación de movimiento) como para la intrapredicción. [4]
A continuación se muestra una posible representación de flujo de bits de un macrobloque en un códec de vídeo que utiliza compensación de movimiento y codificación de transformación . [6] Es similar al formato utilizado en H.261 . [1]
+------+------+-------+--------+-----+----+----+-- ------+| DIRECCIÓN | TIPO | CANTIDAD | VECTOR | CBP | b0 | b1 | ... b5 |+------+------+-------+--------+-----+----+----+-- ------+
El término macrobloqueo se utiliza comúnmente para referirse a artefactos de codificación de bloques.