Просто чтобы завершить ответ, данный david99world:
Кодирование Хаффмана - это только последний шаг в сжатии jpeg.Важное сжатие происходит из матрицы квантования , применяемой к DCT.Что это?Ну, преобразование DCT - это просто способ показать информацию изображения по частотам.Вместо того, чтобы иметь матрицу со значениями пикселей, как это:
![enter image description here](https://i.stack.imgur.com/uUnkd.png)
, у вас будет матрица с коэффициентами DCT, показывающая информацию о частоте, концентрирующая большую часть информации в левом верхнем углу:
![enter image description here](https://i.stack.imgur.com/pI9g6.png)
Теперь, когда у вас есть коэффициенты DCT, здесь наступает реальный шаг сжатия, при котором все значения делятся на матрицу квантования, основанную на зрении человеческого глаза.Эта матрица обнулит те коэффициенты, которые содержат информацию, не относящуюся к человеческому глазу, и пропустит почти те же самые важные.
![enter image description here](https://i.stack.imgur.com/HrObE.png)
Почему этот шаг важен для сжатия?Потому что теперь, когда у вас много нулей, кодирование Хаффмана сгруппирует большое количество нулей в маленькие кодовые слова, поэтому вы экономите память.
![enter image description here](https://i.stack.imgur.com/fM2AL.png)
Вы можете попытаться запрограммировать в Matlab весь алгоритм, и вы поймете его лучше.Обратите внимание, что если вы примените матрицу Q несколько раз, у вас будет больше сжатия (больше нулей), но и изображение низкого качества.
Надеюсь, это прояснит ситуацию для вас.