Добавил:
надеюсь это добро кому-то поможет Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лаба 2 4 сем сжатие с потерями.docx
Скачиваний:
0
Добавлен:
09.07.2025
Размер:
47.04 Mб
Скачать

МИНОБРНАУКИ РОССИИ

Санкт-Петербургский государственный

электротехнический университет

«ЛЭТИ» им. В.И. Ульянова (Ленина)

Кафедра САПР

отчет

по лабораторной работе №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, которое можно описать формулой:

Так как операция выполняется над блоками, формула применяется к каждому из них.

Преобразование направлено на выявление высокочастотных коэффициентов и приближение их к нулевым.