
- •1 Обзор методов сжатия изображений
- •Общие понятия, связанные с изображениями
- •Требования к jpeg
- •Форматы графических файлов
- •Файлы bmp
- •1.3.2 Файлы pcx
- •1.3.3 Файлы jpeg
- •Сравнительная характеристика алгоритмов сжатия
- •Выбор и обоснование выбранного метода
- •Обоснование выбора метода сжатия изображения
- •Алгоритм архивации графики jpeg
- •2.2.1 Дискретное косинус преобразование
- •2.2.2 Этап Квантования
- •2.2.3 Этап Вторичного Сжатия
- •3. Разработка программно-аппаратных модулей
- •3.1 Разработка программного модуля на языке MatLab
- •4. Анализ вычислительной сложности
- •4.1 Требуемый объем памяти
- •Количество операций
- •Руководство пользователя
- •Заключение
- •Библиография
2.2.2 Этап Квантования
На этом этапе мы посчитаем матрицу квантования, используя этот псевдо код:
for i:=0 to 8 do
for j:=0 to 8 do
Q[i,j] = 1+((1+i+j)*q);
где q - это коэффициент качества, от него зависит степень потери качества сжатого изображения для q = 2 имеем матрицу квантования:
| 3 5 7 9 11 13 15 17|
| 5 7 9 11 13 15 17 19|
| 7 9 11 13 15 17 19 21|
Q = | 9 11 13 15 17 19 21 23|
|11 13 15 17 19 21 23 25|
|13 15 17 19 21 23 25 27|
|15 17 19 21 23 25 27 29|
|17 19 21 23 25 27 29 31|
теперь нужно каждое число в матрице квантования разделить на число в соответствующей позиции в матрице RES, в результате получим:
| 30 0 0 0 0 0 0 0|
| -7 8 1 1 0 0 0 0|
|-11 6 0 1 0 0 0 0|
A = | -5 -3 0 0 0 0 0 0|
| -7 -3 2 0 0 0 0 0|
| -4 4 0 0 0 0 0 0|
| -1 0 1 0 0 0 0 0|
| -3 1 0 0 0 0 0 0|
как вы видите здесь имеется довольно много нулей, мы получим наиболее длинную последовательность нулей, если будем использовать следующий алгоритм:
+----+----+----+----+----+----+----+----+
| 1 | 2 | 6 | 7 | 15 | 16 | 28 | 29 |
+----+----+----+----+----+----+----+----+
| 3 | 5 | 8 | 14 | 17 | 27 | 30 | 43 |
+----+----+----+----+----+----+----+----+
| 4 | 9 | 13 | 18 | 26 | 31 | 42 | 44 |
+----+----+----+----+----+----+----+----+
| 10 | 12 | 19 | 25 | 32 | 41 | 45 | 54 |
+----+----+----+----+----+----+----+----+
| 11 | 20 | 24 | 33 | 40 | 46 | 53 | 55 |
+----+----+----+----+----+----+----+----+
| 21 | 23 | 34 | 39 | 47 | 52 | 56 | 61 |
+----+----+----+----+----+----+----+----+
| 22 | 35 | 38 | 48 | 51 | 57 | 60 | 62 |
+----+----+----+----+----+----+----+----+
| 36 | 37 | 49 | 50 | 58 | 59 | 63 | 64 |
+----+----+----+----+----+----+----+----+
итак у нас получилась последовательность:
30 0 -7 -11 8 0 0 1 6 -5 -7 -3 0 1 0 0 0 1 0 -3 -4 -1 4 2 0 0 0 0
0 0 0 0 0 0 0 -3 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
2.2.3 Этап Вторичного Сжатия
Самым распространенным методом вторичного сжатия является метод Хаффмана и его разновидности.
Сжатие Хаффмана - статистический метод сжатия, который уменьшает среднюю длину кодового слова для символов алфавита. Код Хаффмана является примером кода, оптимального в случае, когда все вероятности появления символов в сообщении - целые отри- цательные степени двойки. Код Хаффмана может быть построен по следующему алгоритму:
1.Выписываем в ряд все символы алфавита в порядке возрастания или убывания вероятности их появления в тексте;
2.Последовательно объединяем два символа с наименьшими веро- ятностями появления в новый составной символ, вероятность появ- ления которого полагается равной сумме вероятностей составляю- щих его символов. В конце концов, мы построим дерево, каждый узел которого имеет суммарную вероятность всех узлов, находя- щихся ниже него;
3.Прослеживаем путь к каждому листу дерева помечая направление к каждому узлу (например, направо - 1, налево - 0).
Подведя итог над вышесказанным покажем обобщенную структуру компрессора и декомпрессора по стандарту JPEG:
Рисунок 2.2.1 - Компрессор и декомпрессор JPEG