- •Основы сжатия изображений и видео
- •Структура пзс-матрицы
- •Формирование цветного изображения
- •Аналого-цифровое преобразование
- •Сжатие цифрового телевизионного сигнала
- •Краткий обзор стандартов сжатия видео
- •Требования к алгоритму
- •Описание алгоритма сжатия mpeg
- •Устранение цветовой избыточности и подготовка макроблоков
- •8Х8 пикселей с сохранением шага дискретизации, а цветоразностные компоненты u
- •Сжатие независимых кадров (I – кадров)
- •Алгоритм jpeg
- •1991 Году в качестве одного из стандартов сжатия изображений, является одной
- •8Х8 (то есть, как средняя яркость блока).
- •Сжатие кадров с предсказанием (p-кадров и b-кадров)
- •Использование векторов смещений блоков
- •Структурная схема алгоритма mpeg
- •Повышение степени сжатия и качества видеоизображений
- •Алгоритм сжатия кадра на основе jpeg-2000
- •1992 Году. В 1997 стало ясно, что необходим новый, более гибкий и мощный стандарт, который и был доработан к 2000 году.
- •Идея алгоритма
- •Предобработка
- •Дискретное вэйвлет-преобразование. Идея алгоритма
- •Дискретное вэйвлет-преобразование в jpeg-2000
- •Квантование
- •Стандарт сжатия видео mpeg-4
- •Кодированное представление медийных объектов
- •Состав медийных объектов
- •Описание и синхронизация потоков данных для медийных объектов
- •Описание сцен
Предобработка
Предобработка данных выполняется по следующей схеме:
Рис. 24 Предобработка данных в JPEG-2000
В отличие от JPEG кодер JPEG2000 не требует разбиения изображения на малые квадратные блоки (8х8 пикселей), так как ДВП (дискретное вейвлет-
преобразование) работает на фрагментах любого размера. С другой стороны, в
случае, если объем памяти, доступный кодеру для работы, меньше, чем объем памяти, необходимый для кодирования всего изображения, выполняется разбиение изображения на квадратные блоки - тайлы, которые кодируются независимо друг от друга. Далее будет рассматриваться кодирование одного тайла, хотя это не принципиально – тайл может включать в себя все изображение.
Рис. 25 Пример разбиения изображения на тайлы.
Далее в JPEG-2000 делается сдвиг яркости каждой компоненты RGB изображения перед преобразованием в YUV. Это делается для того, чтобы привести распределение вероятностей каждой из компонент к нулевому математическому ожиданию. Это важно, поскольку в дальнейшем будет производиться ВЧ
фильтрация данных, при которой ненулевое математическое ожидание данных
ведет к неприятным эффектам.
Формулу сдвига можно записать как:
I1(x,y) I(x,y) 2B 1 (6)
Здесь B – число бит, которым кодируется соответствующая компонента RGB .
Значение степени B для каждой компоненты R, G и B может быть различным
(определяется при сжатии кодером). При восстановлении изображения выполняется обратное преобразование:
I(x,y) I1(x,y) 2B 1 (7)
В результате такого сдвига все компоненты изображения будут иметь одинаковое распределение в диапазоне
(8)
Наконец, производится перевод цветного изображения из цветового пространства
RGB в пространство YUV (ICT) путем умножения вектора компонент RGB на матрицу преобразования:
Процедура преобразования RGB в пространство YUV иллюстрируется рис. 26
Рис. 26. Преобразование цветового пространства RGB) в YUV
Дискретное вэйвлет-преобразование. Идея алгоритма
В качестве базовой операции при сжатии неподвижного изображения (кадра) с
использованием алгоритма JPEG-2000 используется так называемое дискретное
вэйвлет-преобразование (Discrete wavelet Transform). На русский язык оно переводится как волновое сжатие, или рекурсивное сжатие.
Идея алгоритма заключается в том, что вместо кодирования собственно данных
кодируется сумма и разница между значениями соседних блоков данных.
Поясним идею вэйвлет-преобразования на простом примере.
Пусть a и b - два соседних числа в некоторой последовательности. Мы можем
вычислить полусумму и полуразность между ними, как
C = (a + b)/2 и D = (a – b)/2
(9)
Из этих двух чисел C и D можно легко получить исходную пару чисел a и b:
a = C + D и b = С – D
(10)
В общем случае эта игра с числами особого смысла не имеет. Но если числа a и b
близки по величине, то разница между ними будет малой, даже если сами числа
имеют большую величину. Следовательно, она может быть закодирована
меньшим числом бит.
Рассмотрим более сложный пример. Пусть нам нужно сжать строку из восьми чисел
(например – это последовательность пикселей изображения по строке):
(220, 224, 222, 218, 220, 216, 216, 216).
Применяя к этой последовательности чисел процедуру (9) получим следующие
последовательности:
полусуммы
-
(222, 220, 218, 216);
и полуразности -
(-2, -2, 2, 0).
Заметим, что значения полуразностей достаточно близки к 0.
Повторим операцию применительно к полученным полусуммам, получим:
полусуммы - (221, 217);
полуразности - (1,1)
И, наконец, повторим процедуру еще раз, получим:
полусумма - (219);
полуразность - (2)
Данное действие выполняется как бы рекурсивно, откуда и название алгоритма.
В качестве результата вэйвлет-преобразования сохраняем последнюю полусумму, и
все полуразности, то есть, как и ранее всего восемь чисел:
(219, 2, 1, 1, -2, -2, 2, 0).
Чтобы восстановить исходную последовательность нужно выполнить обратное преобразование – рекурсивно применить процедуру (10) к полученной последовательности:
Первый уровень: (219 +2) = 221; (219 – 2) = 217.
Второй уровень: (221 +1) = 222; (221 – 1) = 220; (217 +1) = 218; (217 – 1) = 216.
Третий уровень: (222-2)=220; (222+2)=224; (220-2)=218; (220+2)=222; (218+2)=220; (218-2)=216; (216+0)=216; (216-0)=216.
В результате такого обратного преобразования получаем ту же самую последовательность:
(220, 224, 222, 218, 220, 216, 216, 216).
Разница в представлении данных заключается в том, что для кодирования исходной последовательности двоичным кодом нужно (8 чисел х 8 бит) = 64 бита, а для кодирования без потерь последовательности после вэйвлет-преобразования - (1
число х 8 бит + 7 чисел х 2 бита) = 22 бита, то есть в три раза меньше. Если же преобразованные данные подвергнуть еще и квантованию (кодирование с
потерями), то степень сжатия можно еще более повысить.
Алгоритм для двумерных данных реализуется аналогично.
Если у нас есть квадрат из четырех точек с яркостями a2i ,2j , a2i+1 , a 2j, a2i , 2j+1 , и a2i+1 , a 2j+1 , то значения полусумм и полуразностей будут:
b1
(a
a
2i 1,2 j
a
2i,2 j 1
a
)/ 4,
i, j
2i,2 j
2i 1,2 j 1
b2
(a
a
2i 1,2 j
a
2i,2 j 1
a
)/ 4,
i, j
2i,2 j
2i 1,2 j 1
(11)
bi2, j
(a2i,2 j
a2i 1,2 j
a2i,2 j 1
a2i 1,2 j 1)/ 4,
b3
(a
2i,2 j
a
2i 1,2 j
a
2i,2 j 1
a
)/ 4.
i, j
2i 1,2 j 1
Используя эти формулы, для изображения размером, к примеру 512 х 512 пикселей
(всего 262144 пикселя), получим после первого преобразования уже 4 блока
размером 256 х 256 элементов (всего 262144 пикселя, то есть столько же, сколько
было до преобразования) - рис. 27 а, рис.27 б.
B1 B2
Исходное
изображение
B3 B4
Рис. 27 а Рис. 27 б
В первом из этих блоков хранится уменьшенная по размеру копия изображения с уменьшенным вдвое разрешением, во втором – усредненные разности пар значений пикселей по горизонтали, в третьем – усредненные разности пар значений пикселей по вертикали, в четвертом – усредненные разности значений пикселей по диагонали.
Однако обратим внимание на следующее. Если в первом блоке динамический
диапазон изображения (разница между минимальным и максимальным значениями яркости) остался прежним, то во всех остальных блоках он значительно
уменьшился. Следовательно, для кодирования чисел из второго, третьего и четвертого блоков понадобится уже значительно меньше битов на пиксель.
По аналогии с одномерным случаем можно повторить преобразование и получить
вместо первого (левого верхнего) блока - 4 блока размером 128х128.
B1 B2
B3 B4
С1
С2
B2
С3
С4
B3
B4
Рис. 28
Повторив преобразование в третий раз, получим в итоге набор из 4 блоков размером 64х64, 3 блока размером 128х128 и 3 блока размером 256х256 (то есть все те же 262144 пикселя). И так далее. При этом на каждом шаге преобразования все большая часть матрицы данных (блоки B2, B3, B4, С2, С3, С4 ) становятся блоками разностных значений, а следовательно, содержать числа гораздо меньшей величины, чем значения пикселей исходного изображения. Преобразование можно
продолжать до тех пор, пока блок полусумм не достигнет минимального размера, в
данном случае – 1х1 пиксель, или же – до тех пор, пока его размер (и длина кода)
станет незначительным, в сравнении с размером (и длиной кода) для всех остальных блоков преобразования.
Здесь приведена лишь общая идея вэйвлет-преобразования в самом примитивном виде. На самом деле процедуры получения суммарно-разностных изображений в действующих алгоритмах DWT выглядят несколько иначе.
ННЧ (результат фильтрации фильтром НЧ) будет следующим:
