Блочная компенсация движения (Block Motion Compensation, BMC) — это фундаментальная технология в области обработки и сжатия видеоданных, позволяющая существенно снизить временную избыточность видеопоследовательностей. Данный метод лежит в основе всех современных стандартов видеокодирования, включая MPEG-1, MPEG-2, MPEG-4, H.261, H.263, H.264/AVC, H.265/HEVC и AV1.
Физическая суть и базовая идея
Видеопоследовательность представляет собой набор статичных кадров, сменяющих друг друга с определенной частотой (например, 25, 30, 60 кадров в секунду). Соседние кадры, как правило, сильно коррелируются: большая часть сцены остается неизменной, а изменения вызваны движением объектов или камеры. Вместо того чтобы кодировать каждый кадр независимо (внутрикадровое кодирование), блочная компенсация движения позволяет предсказать текущий кадр на основе ранее закодированного ссылочного кадра (reference frame).
Ключевая гипотеза: движение в кадре можно аппроксимировать параллельным переносом прямоугольных участков изображения (блоков).
Основные этапы процесса
- Разбиение на блоки (Partitioning): Текущий кодируемый кадр делится на непересекающиеся блоки фиксированного или переменного размера (традиционно 16×16, 8×8, 4×4 пикселей и т.д.). В современных стандартах (HEVC, VVC) используется гибкое квадродеревовое разбиение (Coding Tree Units / Coding Units).
- Оценка движения (Motion Estimation, ME): Для каждого блока текущего кадра выполняется поиск наиболее похожего блока в ссылочном кадре (или нескольких ссылочных кадрах). Поиск обычно ограничивается окном поиска (search window) вокруг положения текущего блока.
- Вектор движения (Motion Vector, MV): Результатом поиска является вектор смещения
(dx, dy), указывающий, где в ссылочном кадре находится лучший предсказатель для текущего блока. Векторы могут иметь субпиксельную точность (1/2, 1/4, 1/8 пикселя), что требует интерполяции значений пикселей ссылочного кадра. - Компенсация движения (Motion Compensation, MC): Сформированный предсказатель (предиктор) вычитается из исходного блока, образуя остаточный сигнал (residual) — разницу между оригиналом и предсказанием.
- Кодирование остатка: Остаток преобразуется (обычно ДКП/ДВП), квантуется и энтропийно кодируется. Векторы движения также кодируются (часто с использованием предиктивного кодирования на основе векторов соседних блоков).
Размеры блоков и адаптивное разбиение
Выбор размера блока — это компромисс между точностью описания движения и накладными расходами на передачу векторов движения.
- Крупные блоки (16×16, 32×32, 64×64): Эффективны для больших областей с однородным движением (фон, панорамирование). Малое количество векторов — низкие накладные расходы.
- Мелкие блоки (8×8, 4×4, 4×8, 8×4): Необходимы на границах движущихся объектов, в деталях текстуры и при сложном нелинейном движении. Повышают точность предсказания, но увеличивают битрейт на передачу векторов.
В стандарте H.265/HEVC введена структура Coding Tree Unit (CTU) (обычно 64×64), которая рекурсивно разбивается на Coding Units (CU) с использованием квадродерева. Это позволяет адаптивно выбирать оптимальный размер блока для каждой области кадра. В H.266/VVC добавлены тернарное и бинарное разбиение (QTMTT), обеспечивающее еще большую гибкость (прямоугольные блоки 4×16, 16×4 и др.).
Алгоритмы оценки движения (Motion Estimation)
Поиск оптимального вектора движения — самая вычислительно сложная часть видеокодера (до 50-80% сложности энкодера). Существует два класса алгоритмов:
Полный перебор (Full Search / Exhaustive Search)
Проверяет все возможные позиции в окне поиска. Гарантирует нахождение глобального минимума критерия качества (обычно SAD, Sum of Absolute Differences или SATD — Sum of Absolute Transformed Differences), но имеет квадратичную сложность. Используется в референсных моделях или для офлайн-кодирования высокого качества.
Быстрые алгоритмы (Fast Search Algorithms)
Снижают сложность за счет проверки подмножества позиций, рискуя попасть в локальный минимум. Популярные методы:
- Three Step Search (TSS): Поиск с уменьшающимся шагом.
- Diamond Search (DS) / Hexagon Search (HEXBS): Используют ромбовидные или шестиугольные паттерны проверки.
- UMHexagonS (в HM/HEVC): Комбинация несимметричного шестиугольного поиска и растирового уточнения.
- Алгоритмы на основе предикторов (PMV): Используют векторы соседних блоков (справа, сверху) и колокационного блока в предыдущем кадре как стартовые точки поиска (Early Termination).
Субпиксельная точность и интерполяция
Движение объектов в реальном мире не дискретно. Ограничение векторами целой пиксельной точности приводит к грубым ошибкам предсказания. Стандарты используют интерполяцию для генерации значений пикселей в дробных позициях:
- H.264/AVC: 6-таповый фильтр для 1/2 пикселя + билинейная интерполяция для 1/4 пикселя.
- HEVC: 8-таповый фильтр для 1/2 пикселя (DCT-based Interpolation Filter ⏤ DCTIF) и 7-таповый для 1/4 пикселя. Точность 1/16 пикселя (хранится как 1/4 с дополнительным флагом).
- VVC: Адаптивные фильтры интерполяции (Affine Motion, Sub-pel interpolation с выбором фильтра).
Продвинутые инструменты компенсации движения в современных стандартах
AMVP (Advanced Motion Vector Prediction) и Merge Mode
Вместо явной передачи вектора движения, кодер передает только индекс кандидата из списка предсказателей (соседние блоки, колокационные блоки). Это кардинально снижает битрейт на заголовки векторов.
Афинное движение (Affine Motion Compensation — AMC)
Введено в HEVC (как опция) и расширено в VVC. Позволяет описывать движение блока не одним вектором переноса, а афинной моделью (2 или 3 контрольные точки / вектора). Это эффективно моделирует вращение, масштабирование и сдвиг перспективы внутри блока.
Бидирекциональное предсказание (Bi-prediction)
Блок предсказывается как взвешенная сумма предсказателей из двух ссылочных кадров (обычно один прошлое, одно будущее — B-кадры). В HEVC/VVC используется Bi-prediction with CU-level weight (BCW) и Triple prediction (TP) (три ссылочных кадра).
Области с неперекрывающимся движением (OBMC) и Overlapped Block Motion Compensation
Для сглаживания артефактов на границах блоков (блочность) используется взвешенное усреднение предсказателей соседних блоков в области перекрытия.
Компенсация движения на основе оптического потока (Optical Flow / DMVR)
Decoder-side Motion Vector Refinement (DMVR) (в VVC): Декодер самостоятельно уточняет вектор движения, минимизируя разницу между предсказателями двух ссылочных кадров в окрестности блока, не требуя передачи дополнительных битов.
Проблемы и артефакты
- Блочный эффект (Blocking Artifacts): Видимые границы блоков в остаточном сигнале после квантования. Борются с помощью фильтра деблокирования (Deblocking Filter / Loop Filter) в цикле кодирования (in-loop).
- Эффект «дырявого» изображения / артефакты на границах объектов: Возникают при неточной оценке движения или окклюзиях (появлении новых областей). Решается адаптивным разбиением и режимами внутрикадрового кодирования (Intra).
- Распространение ошибок (Error Propagation): Ошибка в векторе движения или остатке ссылочного кадра переносится на все зависимые кадры. Использование периодических I-кадров (IDR) и инструментов восстановления (GDR, CRA) ограничивает это распространение.
Альтернативные подходы и будущее
Хотя блочная компенсация остается доминирующей парадигмой, существуют исследования альтернатив:
- Вейвлет-компенсация движения (Wavelet-based Motion Compensation): Использование ДВП (DWT) для представления движения в частотной области. Упоминается в предоставленных данных как метод, уступающий по степени сжатия блочным кодекам, но устойчивый к потерям пакетов (нет «взрывного распространения искажений»).
- Сегментация и объектная компенсация (MPEG-4 Visual): Попытка кодировать видеобъекты произвольной формы. Не получила массового распространения из-за сложности сегментации.
- Нейросетевая компенсация движения (Learned Video Compression): Современные подходы (DVC, DCVC, Scale-Space Flow) используют оптические потоки, оцениваемые CNN, и генерацию предсказателей через синтез (Frame Interpolation), полностью отказываясь от жесткой блочной структуры в пользу неявных представлений.
- Гексагональные блоки: Исследуются для более плотного укладки и уменьшения периметра границ блоков (уменьшение накладных расходов на границы).
Блочная компенсация движения остается «рабочей лошадкой» видеокодирования уже более трех десятилетий. Эволюция от фиксированных 16×16 блоков в MPEG-1 до гибких квадродеревьев, афинного движения, DMVR и бидирекционального предсказания в VVC демонстрирует неисчерпаемый потенциал данной парадигмы. Понимание принципов BMC, критериев качества (SAD, SATD, RD-cost), стратегий поиска и инструментов предсказания векторов (AMVP, Merge) необходимо для разработки эффективных энкодеров, анализа битстримов и оптимизации качества видео при заданном битрейте.