Главная страница
Навигация по странице:

  • Прикладная математика и интеллектуальные технологии Курсовая работаПо предмету Мультимедиа ТехнологииРабота с изображениями JPEG

  • Оглавление: 1) План .2) Теоретическая часть .3) Практическая работа .4) Вывод .5) Использованная литература .План

  • Теоретическая часть . Работа с изображениями JPEG

  • Как работает алгоритм Рассмотрим алгоритм подробнее. Пусть мы сжимаем 24-битное изображениеШаг 1.

  • Практическая работа . Маркер [FF DB]: DQT — таблица квантования

  • [00 43]

  • Маркер [FF C0]: SOF0 — Baseline DCT

  • [00 11]

  • [03]

  • [_2]

  • [01]

  • Маркер [FF C4]: DHT (таблица Хаффмана)

  • [00 15]

  • Построение дерева кодов Хаффмана

  • Class = 0 (DC / Lossless Table) Class = 1 (AC Table) Class = 0 (DC / Lossless Table) Маркер [FF DA]: SOS (Start of Scan) Байт [DA]

  • FF DA 00 0C 03 01 00 02 11 03 11 00 3F 00 [00 0C]

  • [_1]

  • Использованная литература. 1. Kerr, Douglas A. «Chrominance Subsampling in Digital Images»2. ISO/IEC 10918-1 : 1993(E) p.36. 22 августа 2011 года.3.

  • Боймаматов Улугбек. Курсовая работа По предмету Мультимедиа Технологии Работа с изображениями jpeg


    Скачать 1.13 Mb.
    НазваниеКурсовая работа По предмету Мультимедиа Технологии Работа с изображениями jpeg
    АнкорKursavoy
    Дата01.08.2021
    Размер1.13 Mb.
    Формат файлаpdf
    Имя файлаБоймаматов Улугбек.pdf
    ТипКурсовая
    #225910

    Национальный университет Узбекистана имени Мирзо Улугбека
    Прикладная математика и интеллектуальные технологии
    Курсовая работа
    По предмету Мультимедиа Технологии
    Работа с изображениями JPEG
    Студент 2 курса (И.А.Т)
    Выполнил:Боймаматов У
    Проверил:Латипов Н. Қ.
    Ташкент 2021

    Оглавление:
    1) План .
    2) Теоретическая часть .
    3) Практическая работа .
    4) Вывод .
    5) Использованная литература .
    План :
    1. Открыть в HEX-редакторе файл, номер которого соответствует порядковому номеру студента по журналу.
    a. Изучить структуру файла, определить маркеры и размеры секций.
    b. Выписать секции по отдельности.
    c. Построить бинарное дерево по таблице Хаффмана.
    d. Написать отчет.
    2. Открыть графический файл в программе JPEGsnoop.
    a. Обработать файл.
    b. Вывести отчет программы на отдельный файл.
    c. Сравнить результаты работы программы с полученными результатами работы с
    HEX-редактором.
    d. Написать отчет.

    Теоретическая часть .
    Работа с изображениями JPEG
    JPEG – достаточно мощный алгоритм. Практически он является стандартом де-факто для полноцветных изображений. Оперирует алгоритм областями 8x8, на которых яркость и цвет меняются сравнительно плавно. Вследствие этого, при разложении матрицы такой области в двойной ряд по косинусам значимыми оказываются только первые коэффициенты. Таким образом,
    сжатие в JPEG осуществляется за счет плавности изменения цветов в изображении.
    Алгоритм разработан группой экспертов в области фотографии специально для сжатия
    24-битных изображений. JPEG – Joint Photographic Expert Group – подразделение в рамках ISO – Международной организации по стандартизации. Название алгоритма читается ['jei'peg]. В целом алгоритм основан на дискретном косинусоидальном преобразовании –
    ДКП
    (Discrete-Cosine Transform – DCT), применяемом к матрице изображения для получения некоторой новой матрицы коэффициентов. Для получения исходного изображения применяется обратное преобразование.
    ДКП
    раскладывает изображение по амплитудам некоторых частот. Таким образом,
    при преобразовании мы получаем матрицу, в которой многие коэффициенты либо близки, либо равны нулю. Кроме того, благодаря несовершенству человеческого зрения, можно аппроксимировать коэффициенты более грубо без заметной потери качества изображения.
    Для этого используется квантование коэффициентов (quantization). В самом простом случае – это арифметический побитовый сдвиг вправо. При этом преобразовании теряется часть информации, но может достигаться большая степень сжатия.
    Как работает алгоритм
    Рассмотрим алгоритм подробнее. Пусть мы сжимаем 24-битное изображение
    Шаг 1.
    Переводим изображение из цветового пространства RGB, с компонентами,
    отвечающими за красную (Red), зеленую (Green) и синюю (Blue) составляющие цвета точки, в цветовое пространство YCrCb (иногда называют YUV). В нем Y – яркостная составляющая, а Cr, Cb — компоненты, отвечающие за цвет (хроматический красный и хроматический синий). За счет того, что человеческий глаз менее чувствителен к цвету, чем к яркости, появляется возможность архивировать массивы для Cr и Cb компонент с большими потерями и, соответственно, большими степенями сжатия.
    Подобное преобразование уже давно используется в телевидении. На сигналы,
    отвечающие за цвет, там выделяется более узкая полоса частот.
    Упрощенно перевод из цветового пространства RGB в цветовое пространство YCrCb можно представить с помощью матрицы перехода:

    Обратное преобразование осуществляется умножением вектора YUV на обратную матрицу:
    Шаг 2.
    Разбиваем исходное изображение на матрицы 8x8. Формируем из каждой три рабочие матрицы
    ДКП
    – по 8 бит отдельно для каждой компоненты. При больших степенях сжатия этот шаг может выполняться чуть сложнее. Изображение делится по компоненте Y – как и в первом случае, а для компонент Cr и Cb матрицы набираются через строчку и через столбец. Т.е. из исходной матрицы размером 16x16 получается только одна рабочая матрица ДКП. При этом, как нетрудно заметить, мы теряем 3/4
    полезной информации о цветовых составляющих изображения и получаем сразу сжатие в два раза. Мы можем поступать так благодаря работе в пространстве
    YCrCb. На результирующем RGB изображении, как показала практика, это сказывается несильно.
    Шаг 3.
    В упрощенном виде ДКП при n=8 можно представить так:
    Применяем ДКП к каждой рабочей матрице. При этом мы получаем матрицу, в которой коэффициенты в левом верхнем углу соответствуют низкочастотной составляющей изображения, а в правом нижнем – высокочастотной. Понятие частоты следует из рассмотрения изображения как двумерного сигнала (аналогично рассмотрению звука как сигнала). Плавное изменение цвета соответствует низкочастотной составляющей, а резкие скачки – высокочастотной.
    Шаг 4.
    Производим квантование. В принципе, это просто деление рабочей матрицы на матрицу квантования поэлементно. Для каждой компоненты (Y, U и V), в общем случае, задается своя матрица квантования q[u,v] (далее МК).

    На этом шаге осуществляется управление степенью сжатия, и происходят самые большие потери. Понятно, что, задавая МК с большими коэффициентами, мы получим больше нулей и, следовательно, большую степень сжатия. В стандарт JPEG включены рекомендованные МК, построенные опытным путем. Матрицы для большей или меньшей степени сжатия получают путем умножения исходной матрицы на некоторое число gamma.
    С квантованием связаны и специфические эффекты алгоритма. При больших значениях коэффициента gamma потери в низких частотах могут быть настолько велики, что изображение распадется на квадраты 8x8. Потери в высоких частотах могут проявиться в так называемом "эффекте Гиббса", когда вокруг контуров с резким переходом цвета образуется своеобразный "нимб".
    Шаг 5.
    Переводим матрицу 8x8 в 64-элементный вектор при помощи "зигзаг"-сканирования,
    т.е. берем элементы с индексами (0,0), (0,1), (1,0), (2,0)...
    Таким образом, в начале вектора мы получаем коэффициенты матрицы,
    соответствующие низким частотам, а в конце — высоким.
    Шаг 6.
    Свертываем вектор с помощью алгоритма группового кодирования
    . При этом получаем пары типа (пропустить, число), где “пропустить” является счетчиком пропускаемых нулей, а “число” – значение, которое необходимо поставить в следующую ячейку. Так, вектор 42 3000-2 00001... будет свернут в пары (0,42) (0,3)
    (3,-2) (4,1)...
    Шаг 7.
    Свертываем получившиеся пары кодированием по
    Хаффману с
    фиксированной таблицей.
    Процесс восстановления изображения в этом алгоритме полностью симметричен.
    Метод позволяет сжимать некоторые изображения в 10-15 раз без серьезных потерь.
    Конвейер операций, используемый в алгоритме JPEG:

    Существенными положительными сторонами алгоритма является то, что:
    1. Задается степень сжатия.
    2. Выходное цветное изображение может иметь 24 бита на точку.
    Отрицательными сторонами алгоритма является то, что:
    1. При повышении степени сжатия изображение распадается на отдельные квадраты (8x8). Это связано с тем, что происходят большие потери в низких частотах при квантовании, и восстановить исходные данные становится невозможно.
    2. Проявляется эффект Гиббса – ореолы по границам резких переходов цветов.
    Не очень приятным свойством JPEG является также то, что нередко горизонтальные и вертикальные полосы на дисплее абсолютно не видны и могут проявиться только при печати в виде муарового узора. Он возникает при наложении наклонного растра печати на горизонтальные и вертикальные полосы изображения. Из-за этих сюрпризов
    JPEG не рекомендуется активно использовать в полиграфии, задавая высокие коэффициенты матрицы квантования. Однако при архивации изображений,
    предназначенных для просмотра человеком, он на данный момент незаменим.
    Широкое применение JPEG долгое время сдерживалось, пожалуй, лишь тем, что он оперирует 24-битными изображениями. Поэтому для того, чтобы с приемлемым качеством посмотреть картинку на мониторе в 256-цветной палитре, требовалось применение соответствующих алгоритмов и, следовательно, определенное время. В
    приложениях, ориентированных на придирчивого пользователя, таких, например, как игры, подобные задержки неприемлемы. Кроме того, если имеющиеся изображения,
    допустим, в 8-битном формате GIF перевести в 24-битный JPEG, а потом обратно в
    GIF для просмотра, то потеря качества произойдет дважды при обоих преобразованиях. Тем не менее, выигрыш в размерах архивов зачастую настолько велик (в 3-20 раз), а потери качества настолько малы, что хранение изображений в
    JPEG оказывается очень эффективным.
    Стандартизован JPEG в 1991 году. Но уже тогда существовали алгоритмы,
    сжимающие сильнее при меньших потерях качества. Дело в том, что действия разработчиков стандарта были ограничены мощностью существовавшей на тот момент техники.
    Несколько слов необходимо сказать о модификациях этого алгоритма. Хотя JPEG и является стандартом ISO, формат его файлов не был зафиксирован. Пользуясь этим,
    производители создают свои, несовместимые между собой форматы, и, следовательно,
    могут изменить алгоритм. Так, внутренние таблицы алгоритма, рекомендованные ISO,
    заменяются ими на свои собственные. Кроме того, легкая неразбериха присутствует при задании степени потерь. Например, при тестировании выясняется, что "отличное"
    качество, “100%” и “10 баллов” дают существенно различающиеся картинки. При этом, кстати, "100%" качества не означают сжатие без потерь
    . Встречаются также варианты JPEG для специфических приложений.
    Практическая работа .
    Маркер [FF DB]: DQT — таблица квантования
    FF DB
    00 43 01 02 02 02 03 03 03 06 03 03 06 0C 08 07 08 0C 0C 0C
    0C 0C 0C 0C 0C 0C 0C 0C 0C 0C 0C 0C 0C 0C 0C 0C 0C 0C 0C 0C
    0C 0C 0C 0C 0C 0C 0C 0C 0C 0C 0C 0C 0C 0C 0C 0C 0C 0C 0C 0C
    0C 0C 0C 0C 0C 0C 0C
    [00 43] Длина: 0x43 = 67 байт
    [0_] Длина значений в таблице: 0 (0 — 1 байт, 1 — 2 байта)
    [_0] Идентификатор таблицы: 0

    Оставшимися 64-мя байтами нужно заполнить таблицу 8x8.
    Маркер [FF C0]: SOF0 — Baseline DCT
    Этот маркер называется SOF0, и означает, что изображение закодировано базовым методом. Он очень распространен. Но в интернете не менее популярен знакомый вам progressive-метод, когда сначала загружается изображение с низким разрешением, а потом и нормальная картинка. Это позволяет понять что там изображено, не дожидаясь полной загрузки. Спецификация определяет еще несколько, как мне кажется, не очень распространенных методов.
    [00 11] Длина: 17 байт.
    [08] Precision: 8 бит. В базовом методе всегда 8. Это разрядность значений каналов.
    [00 10] Высота рисунка: 0x10 = 16
    [00 10] Ширина рисунка: 0x10 = 16
    [03] Количество каналов: 3. Чаще всего это Y, Cb, Cr или R, G, B
    FF C0 00 11 08 01 F9 01 F9 03 01 22 00 02 11 01 03 11 01 1-й канал:
    [01] Идентификатор: 1
    [2_] Горизонтальное прореживание (H1): 2
    [_2] Вертикальное прореживание (V1): 2
    [00] Идентификатор таблицы квантования: 0 2-й канал:
    [02] Идентификатор: 2
    [1_] Горизонтальное прореживание (H2): 1
    [_1] Вертикальное прореживание (V2): 1
    [01] Идентификатор таблицы квантования: 1 3-й канал:
    [03] Идентификатор: 3
    [1_] Горизонтальное прореживание (H3): 1
    [_1] Вертикальное прореживание (V3): 1
    [01] Идентификатор таблицы квантования: 1
    Находим Hmax=2 и Vmax=2. Канал i будет прорежен в Hmax/Hi раз по горизонтали и
    Vmax/Vi раз по вертикали.
    Маркер [FF C4]: DHT (таблица Хаффмана)
    Эта секция хранит коды и значения, полученные кодированием Хаффмана.

    FF C4 00 1F 00 00 01 05 01 01 01 01 01 01 00 00 00 00 00 00 00 00 01 02 03 04 05 06 07 08 09 0A 0B
    [00 15] Длина: 21 байт
    [0_] Класс: 0 (0 — таблица DC коэффициентов, 1 — таблица AC коэффициентов).
    [_0] Идентификатор таблицы: 0
    Следующие 16 значений:
    Длина кода Хаффмана: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
    Количество кодов: [01 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00]
    Количество кодов означает количество кодов такой длины. Обратите внимание, что секция хранит только длины кодов, а не сами коды. Мы должны найти коды сами.
    Итак, у нас есть один код длины 1 и один — длины 2. Итого 2 кода, больше кодов в этой таблице нет.
    С каждым кодом сопоставлено значение, в файле они перечислены следом. Значения однобайтовые, поэтому читаем 2 байта:
    [03] — значение 1-го кода
    [02] — значение 2-го кода
    Далее в файле можно видеть еще 3 маркера [FF C4], я пропущу разбор соответствующих секций, он аналогичен вышеприведенному.
    Построение дерева кодов Хаффмана
    Мы должны построить бинарное дерево по таблице, которую мы получили в секции
    DHT. А уже по этому дереву мы узнаем каждый код. Значения добавляем в том порядке, в каком указаны в таблице. Алгоритм прост: в каком бы узле мы ни находились, всегда пытаемся добавить значение в левую ветвь. А если она занята, то в правую. А если и там нет места, то возвращаемся на уровень выше, и пробуем оттуда.
    Остановиться нужно на уровне равном длине кода. Левым ветвям соответствует значение 0, правым — 1.
    Деревья ля всех таблиц этого примера:
    Class = 0 (DC / Lossless Table)

    Class = 1 (AC Table)
    Class = 0 (DC / Lossless Table)
    Маркер [FF DA]: SOS (Start of Scan)
    Байт [DA] в маркере означает — «ДА! Наконец-то то мы перешли к финальной секции!». Однако секция символично называется SOS.
    FF DA 00 0C 03 01 00 02 11 03 11 00 3F 00
    [00 0C] Длина: 12 байт.
    [03] Количество каналов. У нас 3, по одному на Y, Cb, Cr.
    1-й канал:
    [01] Идентификатор канала: 1 (Y)
    [0_] Идентификатор таблицы Хаффмана для DC коэффициентов: 0
    [_0] Идентификатор таблицы Хаффмана для AC коэффициентов: 0 2-й канал:
    [02] Идентификатор канала: 2 (Cb)
    [1_] Идентификатор таблицы Хаффмана для DC коэффициентов: 1
    [_1] Идентификатор таблицы Хаффмана для AC коэффициентов: 1 3-й канал:

    [03] Идентификатор канала: 3 (Cr)
    [1_] Идентификатор таблицы Хаффмана для DC коэффициентов: 1
    [_1] Идентификатор таблицы Хаффмана для AC коэффициентов: 1
    [00], [3F], [00] — Start of spectral or predictor selection, End of spectral selection,
    Successive approximation bit position. Эти значения используются только для прогрессивного режима, что выходит за рамки статьи.
    Отсюда и до конца (маркера [FF D9]) закодированные данные.
    Вывод:
    Изучая жпег кодирования я получил много информации, узнал про световые точные данные содержащего жпг формате . узнал про JPEGSNOOP и RLE , HUFFMAN.но с трудом разбиралсиса с задачей.
    Использованная литература.
    1.
    Kerr, Douglas A. «Chrominance Subsampling in Digital Images»
    2.
    ISO/IEC 10918-1 : 1993(E) p.36. 22 августа 2011 года.
    3.
    Kasperovich, L.V., Babkin, V.F. «Fast discrete cosine transform approximation for JPEG image compression»
    4.
    «Использование технологии CUDA для быстрого сжатия изображений по алгоритму JPEG»
    5.



    написать администратору сайта