Компенсация движения в вычислениях — это алгоритмическая техника, используемая для прогнозирования кадра в видео с учетом предыдущих и/или будущих кадров путем учета движения камеры и/или объектов в видео. Она применяется при кодировании видеоданных для сжатия видео , например, при создании файлов MPEG-2 . Компенсация движения описывает изображение с точки зрения преобразования опорного изображения в текущее изображение. Опорное изображение может быть предыдущим по времени или даже из будущего. Когда изображения могут быть точно синтезированы из ранее переданных/сохраненных изображений, эффективность сжатия может быть улучшена.
Компенсация движения — один из двух ключевых методов сжатия видео , используемых в стандартах кодирования видео , наряду с дискретным косинусным преобразованием (DCT). Большинство стандартов кодирования видео, таких как форматы H.26x и MPEG , обычно используют гибридное кодирование DCT с компенсацией движения, [1] [2], известное как блочная компенсация движения (BMC) или DCT с компенсацией движения (MC DCT).
Компенсация движения использует тот факт, что часто для многих кадров фильма единственное различие между одним кадром и другим является результатом либо перемещения камеры, либо перемещения объекта в кадре. Применительно к видеофайлу это означает, что большая часть информации, представляющей один кадр, будет такой же, как и информация, используемая в следующем кадре.
При использовании компенсации движения видеопоток будет содержать несколько полных (опорных) кадров; тогда единственной информацией, хранящейся для кадров между ними, будет информация, необходимая для преобразования предыдущего кадра в следующий.
Ниже приведено упрощенное иллюстрированное объяснение того, как работает компенсация движения. Были захвачены два последовательных кадра из фильма « Сон слонов» . Как видно из изображений, нижняя (скомпенсированная по движению) разница между двумя кадрами содержит значительно меньше деталей, чем предыдущие изображения, и, таким образом, сжимается намного лучше, чем остальные. Таким образом, информация, необходимая для кодирования компенсированного кадра, будет намного меньше, чем с разностным кадром. Это также означает, что также возможно кодировать информацию с использованием разностного изображения ценой меньшей эффективности сжатия, но за счет экономии сложности кодирования без кодирования с компенсацией движения; по сути, кодирование с компенсацией движения (вместе с оценкой движения , компенсацией движения) занимает более 90% сложности кодирования.
В MPEG изображения предсказываются из предыдущих кадров ( кадры P ) или двунаправленно из предыдущих и будущих кадров ( кадры B ). Кадры B более сложны, поскольку последовательность изображений должна передаваться и храниться вне порядка, чтобы будущий кадр был доступен для генерации кадров B. [3]
После прогнозирования кадров с использованием компенсации движения кодер находит остаток, который затем сжимается и передается.
При глобальной компенсации движения модель движения в основном отражает движения камеры, такие как:
Лучше всего подходит для неподвижных сцен без движущихся объектов.
Глобальная компенсация движения имеет ряд преимуществ:
MPEG-4 ASP поддерживает глобальную компенсацию движения с тремя опорными точками, хотя некоторые реализации могут использовать только одну. Одна опорная точка допускает только поступательное движение, которое при своей относительно большой стоимости производительности дает мало преимуществ по сравнению с компенсацией движения на основе блоков.
Движущиеся объекты в кадре недостаточно представлены глобальной компенсацией движения. Таким образом, также необходима локальная оценка движения .
Блочная компенсация движения (BMC), также известная как дискретное косинусное преобразование с компенсацией движения (MC DCT), является наиболее широко используемым методом компенсации движения. [2] В BMC кадры разбиваются на блоки пикселей (например, макроблоки размером 16×16 пикселей в MPEG ). Каждый блок предсказывается из блока равного размера в опорном кадре. Блоки не преобразуются каким-либо образом, за исключением смещения в положение предсказанного блока. Этот сдвиг представлен вектором движения .
Чтобы использовать избыточность между соседними векторами блоков (например, для одного движущегося объекта, покрытого несколькими блоками), обычно кодируют только разницу между текущим и предыдущим вектором движения в потоке битов. Результат этого процесса дифференциации математически эквивалентен глобальной компенсации движения, способной панорамировать. Далее по конвейеру кодирования энтропийный кодер воспользуется полученным статистическим распределением векторов движения вокруг нулевого вектора, чтобы уменьшить размер выходных данных.
Можно сместить блок на нецелое число пикселей, что называется точностью субпикселя . Промежуточные пиксели генерируются путем интерполяции соседних пикселей. Обычно используется точность в полпикселя или четверть пикселя ( Qpel , используется в H.264 и MPEG-4/ASP). Вычислительные затраты на точность субпикселя намного выше из-за дополнительной обработки, необходимой для интерполяции, а на стороне кодера — гораздо большего количества потенциальных исходных блоков для оценки.
Главным недостатком компенсации движения блока является то, что она вносит разрывы на границах блока (блокирующие артефакты). Эти артефакты появляются в виде резких горизонтальных и вертикальных краев, которые легко обнаруживаются человеческим глазом и создают ложные края и эффекты звона (большие коэффициенты в высокочастотных поддиапазонах) из-за квантования коэффициентов преобразования Фурье, используемого для кодирования преобразования остаточных кадров [4].
Блок компенсации движения делит текущий кадр на неперекрывающиеся блоки, а вектор компенсации движения сообщает, откуда берутся эти блоки ( распространенное заблуждение состоит в том, что предыдущий кадр делится на неперекрывающиеся блоки, а векторы компенсации движения сообщают, куда перемещаются эти блоки ) . Исходные блоки обычно перекрываются в исходном кадре. Некоторые алгоритмы сжатия видео собирают текущий кадр из частей нескольких различных ранее переданных кадров.
Кадры также могут быть предсказаны из будущих кадров. Затем будущие кадры должны быть закодированы до предсказанных кадров, и, таким образом, порядок кодирования не обязательно соответствует реальному порядку кадров. Такие кадры обычно предсказываются с двух направлений, т. е. из I- или P-кадров, которые непосредственно предшествуют или следуют за предсказанным кадром. Эти двунаправленно предсказанные кадры называются B-кадрами . Схема кодирования может быть, например, IBBPBBPBBPBB.
Кроме того, для компенсации движения было предложено использовать треугольные плитки. В рамках этой схемы кадр выкладывается на треугольники, а следующий кадр генерируется путем выполнения аффинного преобразования этих треугольников. [5] Записываются/передаются только аффинные преобразования. Это позволяет работать с масштабированием, вращением, перемещением и т. д.
Компенсация движения переменного размера блока (VBSMC) — это использование BMC с возможностью кодера динамически выбирать размер блоков. При кодировании видео использование больших блоков может сократить количество бит, необходимых для представления векторов движения, в то время как использование меньших блоков может привести к меньшему количеству остаточной информации прогнозирования для кодирования. Другие области работы изучали использование метрик признаков переменной формы за пределами границ блока, из которых могут быть вычислены межкадровые векторы. [6] Старые разработки, такие как видео H.261 и MPEG-1, обычно используют фиксированный размер блока, в то время как новые, такие как H.263 , MPEG-4 Часть 2 , H.264/MPEG-4 AVC и VC-1, дают кодеру возможность динамически выбирать, какой размер блока будет использоваться для представления движения.
Компенсация движения перекрывающихся блоков (OBMC) является хорошим решением этих проблем, поскольку она не только повышает точность прогнозирования, но и позволяет избежать артефактов блокировки. При использовании OBMC блоки обычно в два раза больше в каждом измерении и перекрываются по квадрантам со всеми 8 соседними блоками. Таким образом, каждый пиксель принадлежит 4 блокам. В такой схеме существует 4 прогноза для каждого пикселя, которые суммируются до взвешенного среднего. Для этой цели блоки связываются с оконной функцией, которая обладает свойством, что сумма 4 перекрывающихся окон везде равна 1.
Исследования методов снижения сложности OBMC показали, что вклад в оконную функцию наименьший для диагонально-соседнего блока. Уменьшение веса для этого вклада до нуля и увеличение других весов на такую же величину приводит к существенному снижению сложности без большого ухудшения качества. В такой схеме каждый пиксель затем принадлежит 3 блокам, а не 4, и вместо использования 8 соседних блоков, для каждого компенсируемого блока используются только 4. Такая схема встречается в режиме H.263 Annex F Advanced Prediction
При компенсации движения четвертные или половинные выборки фактически являются интерполированными подвыборками, вызванными дробными векторами движения. На основе векторов и полных выборок подвыборки могут быть рассчитаны с использованием бикубической или билинейной 2-D фильтрации. См. подпункт 8.4.2.2 "Процесс интерполяции дробных выборок" стандарта H.264.
Компенсация движения используется при кодировании стереоскопического видео .
В видео время часто рассматривается как третье измерение. Тем не менее, методы кодирования изображений могут быть расширены до дополнительного измерения.
JPEG 2000 использует вейвлеты, и их также можно использовать для кодирования движения без пробелов между блоками адаптивным способом. Дробные пиксельные аффинные преобразования приводят к утечке между соседними пикселями. Если не используется более высокое внутреннее разрешение, дельта-изображения в основном борются с размыванием изображения. Дельта-изображение также можно кодировать как вейвлеты, так что границы адаптивных блоков совпадают.
Методы кодирования 2D+Delta используют кодирование, совместимое с H.264 и MPEG-2 , и могут использовать компенсацию движения для сжатия стереоскопических изображений.
Предшественник концепции компенсации движения появился в 1929 году, когда RD Kell в Великобритании предложил концепцию передачи только тех частей аналоговой видеосцены , которые изменялись от кадра к кадру. В 1959 году концепция межкадровой компенсации движения была предложена исследователями NHK Y. Taki, M. Hatori и S. Tanaka, которые предложили предиктивное межкадровое видеокодирование во временном измерении . [7]
Практическое сжатие видео с компенсацией движения появилось с развитием кодирования с компенсацией движения DCT (MC DCT), [8] также называемого блочной компенсацией движения (BMC) или компенсацией движения DCT. Это гибридный алгоритм кодирования, [7] который объединяет два ключевых метода сжатия данных : кодирование с дискретным косинусным преобразованием (DCT) [8] в пространственном измерении и предиктивную компенсацию движения во временном измерении . [7] Кодирование DCT представляет собой метод кодирования с преобразованием сжатия блоков с потерями , который был впервые предложен Насиром Ахмедом , который изначально предназначал его для сжатия изображений , в 1972 году. [9]
В 1974 году Али Хабиби из Университета Южной Калифорнии представил гибридное кодирование, [10] [11], которое объединяет предиктивное кодирование с кодированием с преобразованием. [7] [12] Однако его алгоритм изначально был ограничен внутрикадровым кодированием в пространственном измерении. В 1975 году Джон А. Розе и Гунер С. Робинсон расширили алгоритм гибридного кодирования Хабиби до временного измерения, используя кодирование с преобразованием в пространственном измерении и предиктивное кодирование во временном измерении, разработав гибридное кодирование с компенсацией межкадрового движения. [7] [13] Для пространственного кодирования с преобразованием они экспериментировали с DCT и быстрым преобразованием Фурье (FFT), разрабатывая межкадровые гибридные кодеры для обоих, и обнаружили, что DCT является наиболее эффективным из-за его уменьшенной сложности, способным сжимать данные изображения до 0,25 бит на пиксель для сцены видеотелефона с качеством изображения, сопоставимым с внутрикадровым кодером, требующим 2 бита на пиксель. [14] [13]
В 1977 году Вэнь-Сюн Чен разработал быстрый алгоритм DCT совместно с CH Smith и SC Fralick. [15] В 1979 году Анил К. Джейн и Джасвант Р. Джейн продолжили разработку DCT-компрессии видео с компенсацией движения, [16] [7] также называемой блочной компенсацией движения. [7] Это привело к разработке Ченом практического алгоритма сжатия видео, названного DCT с компенсацией движения или адаптивным кодированием сцены, в 1981 году. [7] Позднее DCT с компенсацией движения стало стандартной техникой кодирования для сжатия видео с конца 1980-х годов. [17] [2]
Первым стандартом цифрового видеокодирования был H.120 , разработанный CCITT (теперь ITU-T) в 1984 году. [18] H.120 использовал кодирование DPCM с компенсацией движения, [7] которое было неэффективным для видеокодирования, [17] и H.120 был, таким образом, непрактичным из-за низкой производительности. [18] Стандарт H.261 был разработан в 1988 году на основе сжатия DCT с компенсацией движения, [17] [2] и это был первый практический стандарт видеокодирования. [18] С тех пор сжатие DCT с компенсацией движения было принято всеми основными стандартами видеокодирования (включая форматы H.26x и MPEG ), которые последовали за ними. [17] [2]