Техника кодирования jpeg - PullRequest
7 голосов
/ 08 февраля 2011

Я слышал, что Jpeg использует код Hufman.Что такое код Хаффмана?

Ответы [ 2 ]

9 голосов
/ 08 февраля 2011

Кодирование Хаффмана - это метод, который принимает символы (например, байты, коэффициенты DCT и т. Д.) И кодирует их с помощью кодов переменной длины, которые назначаются в соответствии со статистическими вероятностями. Часто используемый символ будет кодироваться с помощью кода, который занимает только пару битов, в то время как редко используемые символы представлены символами, для кодирования которых требуется больше битов.

Файл JPEG содержит до 4 таблиц Хаффмана, которые определяют отображение между этими кодами переменной длины (которые занимают от 1 до 16 бит) и значениями кода (который является 8-битным байтом). Создание этих таблиц обычно включает подсчет частоты, с которой каждый символ (кодовое слово DCT) появляется на изображении, и распределение битовых строк соответственно. Но большинство кодеров JPEG просто используют таблицы Хаффмана, представленные в стандарте JPEG. Некоторые кодировщики позволяют оптимизировать эти таблицы, что означает, что создается оптимальное двоичное дерево, которое позволяет генерировать более эффективную таблицу Хаффмана.

Посмотрите на http://www.cs.duke.edu/csed/poop/huff/info/ для более глубокого объяснения

7 голосов
/ 26 декабря 2011

Просто чтобы завершить ответ, данный david99world:

Кодирование Хаффмана - это только последний шаг в сжатии jpeg.Важное сжатие происходит из матрицы квантования , применяемой к DCT.Что это?Ну, преобразование DCT - это просто способ показать информацию изображения по частотам.Вместо того, чтобы иметь матрицу со значениями пикселей, как это:

enter image description here

, у вас будет матрица с коэффициентами DCT, показывающая информацию о частоте, концентрирующая большую часть информации в левом верхнем углу:

enter image description here

Теперь, когда у вас есть коэффициенты DCT, здесь наступает реальный шаг сжатия, при котором все значения делятся на матрицу квантования, основанную на зрении человеческого глаза.Эта матрица обнулит те коэффициенты, которые содержат информацию, не относящуюся к человеческому глазу, и пропустит почти те же самые важные.

enter image description here

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

enter image description here

Вы можете попытаться запрограммировать в Matlab весь алгоритм, и вы поймете его лучше.Обратите внимание, что если вы примените матрицу Q несколько раз, у вас будет больше сжатия (больше нулей), но и изображение низкого качества.

Надеюсь, это прояснит ситуацию для вас.

...