Макроблок — это блок обработки в форматах сжатия изображений и видео , основанный на линейных блочных преобразованиях, обычно дискретном косинусном преобразовании (DCT). Макроблок обычно состоит из 16×16 сэмплов и далее подразделяется на блоки преобразования, а также может быть дополнительно подразделен на блоки предсказания. Форматы, основанные на макроблоках, включают JPEG , где они называются блоками MCU , H.261 , MPEG-1 Part 2 , H.262/MPEG-2 Part 2 , H.263 , MPEG-4 Part 2 и H.264/MPEG-4 AVC . [1] [2] [3] [4] В H.265/HEVC макроблок как базовый блок обработки был заменен блоком дерева кодирования . [5]
Макроблок делится на блоки преобразования, которые служат входными данными для линейного блочного преобразования, например, DCT. В H.261, первом видеокодеке, использующем макроблоки, блоки преобразования имеют фиксированный размер 8×8 выборок. [1] В цветовом пространстве YCbCr с подвыборкой цветности 4:2:0 макроблок 16×16 состоит из 16×16 выборок яркости (Y) и 8×8 выборок цветности (Cb и Cr). Эти выборки делятся на четыре блока Y, один блок Cb и один блок Cr. Такая конструкция также используется в JPEG и большинстве других видеокодеков на основе макроблоков с фиксированным размером блока преобразования, таких как MPEG-1 Part 2 и H.262/MPEG-2 Part 2. В других форматах цветовой субдискретизации , например 4:0:0, 4:2:2 или 4:4:4, количество цветовых выборок в макроблоке будет меньше или больше, и группировка цветовых выборок в блоки будет соответственно отличаться.
В более современных стандартах видеокодирования на основе макроблоков, таких как H.263 и H.264/AVC, блоки преобразования могут иметь размеры, отличные от 8×8 сэмплов. Например, в основном профиле H.264/AVC размер блока преобразования составляет 4×4. [4] В высоком профиле H.264/AVC размер блока преобразования может быть либо 4×4, либо 8×8, адаптированный для каждого макроблока. [4]
В отличие от деления на блоки преобразования, макроблок может быть разделен на блоки предсказания. В ранних стандартах, таких как H.261, MPEG-1 Часть 2 и H.262/MPEG-2 Часть 2, компенсация движения выполняется с одним вектором движения на макроблок. [1] [2] В более современных стандартах, таких как H.264/AVC, макроблок может быть разделен на несколько блоков предсказания переменного размера, называемых разделами. [4] В макроблоке с интер-предсказанием в H.264/AVC для каждого раздела указывается отдельный вектор движения. [4] Соответственно, в макроблоке с интра-предсказанием, где выборки предсказываются путем экстраполяции с краев соседних блоков, предсказываемое направление указывается на основе каждого раздела. [4] В H.264/AVC размер раздела предсказания варьируется от 4×4 до 16×16 выборок как для интер-предсказания (компенсации движения), так и для интра-предсказания. [4]
Ниже приведено возможное представление битового потока макроблока в видеокодеке, который использует компенсацию движения и кодирование с преобразованием . [6] Он похож на формат, используемый в H.261 . [1]
+------+------+-------+--------+-----+----+----+-- ------+| АДР | ТИП | КВАНТ | ВЕКТОР | CBP | b0 | b1 | ... b5 |+------+------+-------+--------+-----+----+----+-- ------+
Термин «макроблокирование» обычно используется для обозначения артефактов блочного кодирования.