16

Как работает JPEG

В наше время трудно найти человека, который не знает про JPEG, но многие ли понимают, как он сжимает?

Начнем с основ, пока не будем переходить к схеме кодера JPEG. Наш глаз воспринимает оттенки трех цветов: красного (R), зеленого (G), синего (B). Отсюда и пошло название цветовой модели RGB. По этому же принципу работают дисплеи — каждый пиксель включает в себя три светодиода. Иногда четыре и больше, но это не важно.


В эру черно-белого телевидения была придумана другая цветовая модель — YCbCr. В ней Y — это черно-белая составляющая изображения (яркость), а Cb и Cr — цветоразностные. Из YCbCr можно легко получить RGB практически без потерь в качестве. Справедливо и обратное. Формулы приводить не буду, оставлю ссылку в конце.


Для компонент Cb и Cr производится выборка с уменьшением числа передаваемых элементов изображения, так как человеческий глаз менее чувствителен к перепадам цвета. Это позволило экономить место уже на этапе представления изображения аж в 2 раза.

Итак, экономия места в JPEG начинается на этапе представления изображения. Вместо привычного RGB в нем используется YCbCr. Изображение разбивается на блоки 8х8 пикселей. Каждый блок подвергается Дискретному Косинусному Преобразованию (ДКП), которое переводит блок из пространственного в спектральный вид.

Визуальное представление есть в этом посте: http://pikabu.ru/story/naglyadnoe_obyasnenie_preobrazovaniya...


Спектр можно сжать эффективнее, чем отдельные пиксели. Дополнительно спектр подвергается квантованию (а точнее все коэффициенты, кроме левого верхнего угла), что увеличивает количество нулей в блоке.


Почему эти нули так важны? Все просто. Отквантованные спектральные коэффициенты сжимают сериями.

Например серия: 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 19

Будет иметь вид: 4, 6, 8, 19

(первое число количество нулей, второе прерывающее серию)

Намного меньше чисел, неправда ли?


После сжатия серий результат подается на кодер Хаффмана, который делает сжатие еще более эффективным. Далее весь процесс повторяется для каждого блока изображения.

Многих наверное интересует момент, а что же так "жмет" изображения?

Во всем виновато квантование. Чем выше степень квантования, тем более сжатое изображение на выходе.  

Сразу хочу сказать, я опустил подробности зигзагообразного обхода, ограничения длины серий и другие подробности для упрощения повествования.


Надеюсь, Вам было интересно!


Баянометр ругался на картинки.


Ссылки на материалы:

1) JPEG: http://rain.ifmo.ru/cat/view.php/theory/data-compression/jpe...

2) Квантование: https://traditio.wiki/Квантование_(обработка_сигналов)

3) YCbCr: https://ru.wikipedia.org/wiki/YCbCr

Темы

Политика

Теги

Популярные авторы

Сообщества

18+

Теги

Популярные авторы

Сообщества

Игры

Теги

Популярные авторы

Сообщества

Юмор

Теги

Популярные авторы

Сообщества

Отношения

Теги

Популярные авторы

Сообщества

Здоровье

Теги

Популярные авторы

Сообщества

Путешествия

Теги

Популярные авторы

Сообщества

Спорт

Теги

Популярные авторы

Сообщества

Хобби

Теги

Популярные авторы

Сообщества

Сервис

Теги

Популярные авторы

Сообщества

Природа

Теги

Популярные авторы

Сообщества

Бизнес

Теги

Популярные авторы

Сообщества

Транспорт

Теги

Популярные авторы

Сообщества

Общение

Теги

Популярные авторы

Сообщества

Юриспруденция

Теги

Популярные авторы

Сообщества

Наука

Теги

Популярные авторы

Сообщества

IT

Теги

Популярные авторы

Сообщества

Животные

Теги

Популярные авторы

Сообщества

Кино и сериалы

Теги

Популярные авторы

Сообщества

Экономика

Теги

Популярные авторы

Сообщества

Кулинария

Теги

Популярные авторы

Сообщества

История

Теги

Популярные авторы

Сообщества

Недвижимость и ремонт

Теги

Популярные авторы

Сообщества