Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции по ЦО АВС.doc
Скачиваний:
69
Добавлен:
07.09.2019
Размер:
5.86 Mб
Скачать

4.6.4 Преобразование макроблоков р-изображений

Макроблоки Р-изображений могут быть различных типов - опорные (intra), кодируемые согласно уже описанной схеме, и предсказываемые (predicted), у которых формируются и аналогичным образом преобразуются разности текущего макроблока и подобного ему (смещенного) макроблока из предыдущего I- или Р-изображения. Важно отметить, что опорные блоки обычно требуют для своего кодирования существенно больше информации, но и обеспечивают более высокую точность при восстановлении. Очевидно, что в основном в Р-изображениях присутствуют макроблоки второго типа.

Стандарт не ограничивает метода определения векторов смещений при поиске подобных макроблоков, но определяет диапазон их максимальных значений как ±128 при точности задания в 1 пиксел или как ±64 при точности 1/2 (но может быть меньше - задается кодером). Наиболее точный метод -полный поиск (full search) - сводится к расчету ошибки предсказания (например, среднее значение абсолютной величины разности Y-отсчетов текущего макроблока и предсказанных) для всех разрешенных векторов и определения положения минимальной ошибки. Более быстрым, но достаточно точным является т.н. логарифмический метод. Он выполняется за несколько шагов, на каждом из которых рассчитываются и сравниваются по 9 значений ошибки в узловых точках с постепенным сужением области поиска и повышением точности предсказания.

Ниже представлен соответствующий пример подобного поиска за 3 шага, где цифры соответствуют его номерам шагов.

Здесь размер шага меняется как 4->2—>1, а диапазон возможных значений вектора равен (7,7). Известен также метод телескопического поиска, рекомендуемый для последовательных В-изображений и основанный на использовании в качестве стартовой оценки вектора смещения текущего макроблока значение вектора из предыдущего В-изображения для этого же макроблока. Важно подчеркнуть, что не все найденные вектора смещения будут использованы для построения (предсказания) макроблоков текущего изображения на основании соответствующих макроблоков из предыдущего I - или Р-изображения. Может оказаться, что разница между ошибкой подобного оптимального предсказания и ошибкой предсказания, полученной при нулевом смещении, несущественна (~1), а потому целесообразно пренебречь смещением (экономия на информации о векторе). Более того, если последняя ошибка мала сама по себе (~1), то поиск можно просто не производить. С другой стороны, даже с использованием оптимального вектора ошибка может оказаться столь значительной, что экономии объема информации, требуемого для кодирования макроблока, за счет предсказания по сравнению со случаем его непосредственного кодирования как опорного, не возникает. Для упрощенного анализа требуемых объемов можно сравнивать средние дисперсии Y-отсчетов текущего макроблока и его разности с предсказанным. При этом в случае, когда дисперсия текущего макроблока сама по себе мала (меньше 64), целесообразно кодировать данный блок как опорный даже без подобного сравнения.

Последующая схема преобразования разностных макроблоков аналогична преобразованию опорных. Единственное существенное отличие может заключаться в использовании иного вида матрицы квантования с менее выраженным подавлением высоких частот. Поскольку разности в основном несут информацию о небольших изменениях фрагментов сцены (в процессе их перемещения), то высокие частоты, ответственные за детализацию изображений, столь же важны, как и низкие. Конкретный вид матрицы задается кодером, но по умолчанию она принимается равномерной с постоянным значением 16 для всех частот включая нулевую. После квантования все DCT-коэффициенты блока могут оказаться равными нулю, а для его передачи достаточно поставить соответствующую определенную стандартом метку (флаг) и сразу перейти к следующему блоку. Для таких пропускаемых (skipped) блоков достигается самый короткий код описания. Аналогичная ситуация возникает с макроблоком, когда все его блоки имеют статус skipped, и соответствующие вектора смещения (если они должны быть определены) также равны нулю.