реклама на сайте
подробности

 
 
> Хаффман кодирование (jpeg)
boulon
сообщение Oct 19 2015, 06:16
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 44
Регистрация: 25-08-06
Пользователь №: 19 820



Здравствуйте, коллеги.

Строю свой кодер 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). Как при помощи его закодировать?

Прошу помочь, кто занимался таким.
Спасибо.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 1)
_4afc_
сообщение Oct 19 2015, 07:39
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 262
Регистрация: 13-10-05
Из: Санкт-Петербург
Пользователь №: 9 565



Для начала вы должны решить: кто будет декодировать ваш jpeg чб 8bit?

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

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

По вашему вопросу: действительно chrominance не нужно в варианте 4bit ЧБ. Более того, если декодер будет ваш, вы можете кодировать любыми таблицами, даже взять chrominance вместо luminance для увеличения сжатия. И даже сэкономить 300 байт на каждом кадре не передавая коэффициенты вообще...
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st June 2025 - 21:29
Рейтинг@Mail.ru


Страница сгенерированна за 0.01349 секунд с 7
ELECTRONIX ©2004-2016