Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Хаффман кодирование (jpeg)
Форум разработчиков электроники ELECTRONIX.ru > Цифровая обработка сигналов - ЦОС (DSP) > Алгоритмы ЦОС (DSP)
boulon
Здравствуйте, коллеги.

Строю свой кодер jpeg для ч\б 8-бит. изображения на fpga. 2D-DCT - quantization - zigzag сделал. Чтобы самому не строить дерево Хаффмана, хочу закодировать, использую стандартые таблицы кодирования (например отсюда http://www.w3.org/Graphics/JPEG/itu-t81.pdf).

Для простоты я задал тестовую матрицу 8х8, над которой далаю преобразования. У меня получилась такая последовательность посли зигзага и RLE:
DC: -19 (амплитуда);
AC: (0,-26); (0,-24); (0,-7); (0,-3); (0,-10); (0,1); (0,9); (0,10); (0,1); (0,-2); (0,-4); (0,-6); (0,-3); (0,-1); (1,1); (0,2); (0,-26); (0,3); (4,-1); (21,-1); EOB. (1-е число: кол-во предшествующих нулей "RUNLENGTH", 2-е: значение "AMPLITUDE").

DC можно разложить еще в (5, -19), где 5 - размер "SIZE".
Каждое AC можно разложить, добавив еще size, например (0,-26) в (0,5)(-26).

Общий вопрос. Зачем 2 таблицы: luminance, chrominance. У меня ч\б изображение, может достаточно одной luminance?

Как закодировать DC? Значение в первом блоке, как я понимаю, определяет общую яркость всей картинки, т.к все остальные DC будут кодироваться только как разность с предыдущей DC.
Есть 2 таблицы по 12 коэф. DC коэффициентов. (luminance DC, chrominance DC). Не могу понять, как используя их можно закодировать мое число -19.
Я могу предположить что для реального изображения разность между соседними DC будет не больше 11 и можно будет использовать всего 12 значений. Но как тогда закодировать первое значение (-19)?

Для AC также есть 2 таблицы (luminance AC, chrominance AC), они уже побольше, размер 16х11.
С AC понятно только как закодировать (0,5). Это значение 11010 в "luminance AC". Но вот что делать с -26?

В моей последовательности есть такое значение (21,-1). Это значит что перед -1 было 21 ноль. Знаю что для такого случая используется код (F,0). Как при помощи его закодировать?

Прошу помочь, кто занимался таким.
Спасибо.
_4afc_
Для начала вы должны решить: кто будет декодировать ваш jpeg чб 8bit?

Просто, если вы будете использовать не свой собственный декодер, а будете создавать файлы стандартного формата для совместимости, то стандартный сторонний декодер - декодирует их не в 256, а в 16 градациях серого, т.е. 4bit, ибо так записано в стандарте.

Примечательно, что WinXP декодировала 256 градаций, а в Win7 декодер стал стандартным и декодируя - загрубляет до 16. Эта особенность была выявлена мной 5 лет назад, при тестировании чб кодера jpeg от Rst7, о чём он был поставлен в известность. В 2012 он выложил новый вариант, вроде цветной, но я его не тестировал.

По вашему вопросу: действительно chrominance не нужно в варианте 4bit ЧБ. Более того, если декодер будет ваш, вы можете кодировать любыми таблицами, даже взять chrominance вместо luminance для увеличения сжатия. И даже сэкономить 300 байт на каждом кадре не передавая коэффициенты вообще...
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.