Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
labrab_Shulgin_Osnovi_szhatiya_izobrazhenij_i_v...docx
Скачиваний:
1
Добавлен:
01.05.2025
Размер:
2.27 Mб
Скачать

Предобработка

Предобработка данных выполняется по следующей схеме:

Рис. 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 выглядят несколько иначе.

ННЧ (результат фильтрации фильтром НЧ) будет следующим:

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]