
- •Теоретическая часть
- •Переход в цветовое пространство yCbCr из rgb
- •Даунсэмплинг матрицы цветового канала
- •Разбиение изображения на блоки NxN
- •Прямое и обратное dct-II 2d для блока размера NxN
- •Изменения матрицы квантования в зависимости от уровня сжатия Квантование и обратное преобразование матрицы дкт по заданной матрице квантования
- •Зигзаг обход матрицы NxN
- •Разностное кодирование dc коэффициентов
- •Переменное кодирование разностей dc и ac коэффициентов
- •Rle кодирование ac коэффициентов
- •Кодирование разностей dc коэффициентов и последовательностей Run/Size по таблице кодов Хаффмана и упаковки результата в байтовую строку
- •Практическая часть
- •Код программы
МИНОБРНАУКИ РОССИИ
Санкт-Петербургский государственный
электротехнический университет
«ЛЭТИ» им. В.И. Ульянова (Ленина)
Кафедра САПР
отчет
по лабораторной работе №2
по дисциплине «Алгоритмы и Структуры Данных»
Тема: «Алгоритм сжатия с потерями»
Студентка гр. 3352 |
|
|
Преподаватель |
|
|
Санкт-Петербург
2025
Цель работы:
Реализовать алгоритм сжатия изображений.
Задачи: 1. Подготовить тестовые данные. Lenna.png, нетривиальное цветное изображение размера 2048 на 2048 высокого качества.
2. Получить версии тестовых изображений в grayscale, чб с дизерингом, чб без дизеринга
3. На основе функций из пункта 3 реализовать JPEG-инспирированный компрессор со следующими этапами выполнения: • Переход в цветовое пространство YCbCr • Даунсэмплинг каналов Cb и Сr c коэффициентом 2 по каждой оси. • Разбиение на блоки (размер по умолчанию 8x8). • Применение двумерного дискретного косинусного преобразования (DCT-II 2D) • Квантование коэффициентов DCT по матрице квантования (143 стр. ITU-T81) и уровню качества • Разностное кодирование DC коэффициентов • Переменное кодирование разностей DC коэффициентов и AC коэффициентов • RLE AC коэффициентов • Энтропийное кодирование табличными кодами Хаффмана (149-157 стр. ITU-T81, при желании использовать готовые спецификации таблицы из K.3.3)
4. Записать в файл в получившуюся байтовую строку и все необходимые метаданные (размер изображения, матрицы квантования, коды Хаффмана и тд). 5. Реализовать соответствующий декомпрессор. Удостовериться в корректной декомпрессии. 6. Для каждого изображения из пунктов 2-3 построить график зависимости размера сжатого от файла от коэффициента качества сжатия (шаг коэффициента не более 5) 7. Сжать тестовые изображения с уровнем качества 0, 20, 40, 60, 80, 100. Произвести декомпрессию, приложить получившиеся изображения к отчету.
Теоретическая часть
Сжатие изображений с потерями направлено на выполнение ряда преобразований, которые при сокращении объема информации способны сохранить ее визуализацию.
Этапами преобразования становятся:
• Переход в цветовое пространство YCbCr из RGB • Даунсэмплинг матрицы цветового канала • Разбиение изображения на блоки NxN
• Прямое и обратное DCT-II 2D для блока размера NxN
• Изменения матрицы квантования в зависимости от уровня сжатия • Квантование и обратное преобразование матрицы ДКТ по заданной матрице квантования • Зигзаг обход матрицы NxN • Разностное кодирование DC коэффициентов • Переменное кодирование разностей DC и AC коэффициентов • RLE кодирование AC коэффициентов • Кодирование разностей DC коэффициентов и последовательностей Run/Size по таблице кодов Хаффмана и упаковки результата в байтовую строку
Рассмотрим каждый этап по отдельности.
Переход в цветовое пространство yCbCr из rgb
RGB является стандартным способом представления информации (изображений). Каждый пиксель описывается тремя компонентами - интенсивностью зеленого, красного и синего цветов.
YCbCr - цветовое пространство, в котором Y отвечает за яркостную составляющую, Cb, Cr - цветовую, где Cb - отклонение синего от яркости, Cr - отклонение красного.
По стандарту преобразование из RGB в YCbCr выполняется по формуле:
Где 128 добавляется, чтобы привести значения в диапазон [0,255] для хранения восьми битных изображений.
Для восстановления изображения после декомпрессии используются обратные преобразования по формулам:
Вычисления выполняются в формате с плавающей точкой.
Даунсэмплинг матрицы цветового канала
Применяется только к цветовым компонентам для уменьшения разрешения изображения.
Даунсемплинг с коэффициентом (например) 2 по каждой оси заключается в том, что каждый блок 2 на 2 пикселя заменяется одним пикселем. Данное действие позволяет уменьшить количество данных в 4 раза, так как после операции размер Cb и Cr уменьшается до (W//2, H//2). При этом канал Y без изменений остается равным (H, W).
Даунсемплинг можно представить формулой:
Пример:
Разбиение изображения на блоки NxN
Этап сжатия изображения, в процессе которого цветовой канал разбивается на блоки размером N*N для реализации дискретно-косинусного преобразования, квантования и кодирования по частям. При размерах изображения, не кратных N, размеры округляются вверх до ближайшего кратного и добавляются пустые значения (например нули) в недостающие пиксели (padding).
Пример:
Изображение размером 15*24.
Разбиваем на блоки 8*8.
Высота округляется до 16, ширина остается прежней так как кратна 8.
Добавляется 1 строка из нулей.
Всего получаем 2*3=6 блоков.
Прямое и обратное dct-II 2d для блока размера NxN
Дискретно-косинусное преобразование второго типа преобразует блоки данных из пространственной в частотную область. Таким образом большинство информации сосредоточено в низких частотах, что позволяет эффективно сжать данные. К правому углу содержатся высокие частоты, которые после квантования приблизятся к значению 0.
Прямое DCT-II выполняется по формуле:
Для восстановления изображения используется обратное преобразование IDCT, которое можно описать формулой:
Так как операция выполняется над блоками, формула применяется к каждому из них.
Преобразование направлено на выявление высокочастотных коэффициентов и приближение их к нулевым.