|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
12.05.2013, 23:52 | #1 |
Регистрация: 15.11.2009
Сообщений: 3
|
Сжатие jpeg. Стандартные таблицы Хаффмана.
Доброго дня!
Пытаюсь разобраться с алгоритмом сжатия Jpeg. Завис на этапе кодирования Хаффмана. Как я понял на этом этапе чаще всего используются уже подобранные таблицы кодов. http://www.impulseadventure.com/phot...ized-jpeg.html Таблицы в разделе "Standard Huffman Tables" Не ясно как применять эти таблицы в полученной последовательности после зигзаг обхода и применения RLE. Возможно ошибся с разделом, не нашёл ничего подходящего, но думаю в этом разделе бывают люди, которые смогут мне помочь |
13.05.2013, 12:21 | #2 |
C/C++, Asm
Участник клуба
Регистрация: 02.03.2010
Сообщений: 1,323
|
по моему, там ничего особо умного, величина амплитуды после квантования и RLE является индексом в таблицу Хаффмана.
а для пользы дела, стоит обратиться к Википедии, там наверняка полезные ссылки есть. |
13.05.2013, 14:02 | #3 | |
Регистрация: 15.11.2009
Сообщений: 3
|
Цитата:
1118; (0, 2); (1, -2);(13,-1); EndOfBlock; Первый коэффициент DC, дальше в скобках (количество перед числом, число). Было бы круто на примере таблиц по ссылке показать как это будет выглядеть. Главная проблема вот в чем: в таблице коды разделены по размеру бит на код. Определить сколько бит на код для конкретного числа я могу, а как выбирать код после того как определился с размером кода в битах не ясно. |
|
13.05.2013, 15:25 | #4 | |
C/C++, Asm
Участник клуба
Регистрация: 02.03.2010
Сообщений: 1,323
|
могу рассказать мое видение ситуации.
как генерить коды Хаффманна можно прочитать где угодно. перед сжатием коды упорядочиваются по значению и длине в битах. получается упорядоченный массив кодов huffman_codes[]. также нужен массив содержащий количество задействованных кодов для каждой длины codes_count[16] и массив значений связаный с кодами разной длины coded_values[16][]. (максимальная длина кода для jpeg 16 бит). после DCT, quantization, RLE получается, к примеру, такое Цитата:
zz_dc = 1118; zz_ac[] = {2, 18, 209, 0}; каждая цифра тут это индекс в массив кодов. дальше нужно определить длину кода в битах code_length_i = bit_length(huffman_codes[zz_ac[i]]) проверить наличие/отсутствие значения zz_ac[i] в соответствующем списке coded_values[code_length_i][] если его там нет, то добавить его в список, увеличить codes_count[code_length_i] на 1, и записать codes_count[code_length_i] код из диапазона кодов длиной code_length_i в выходной поток, плюс все детали необходимые для восстановления амплитуды. примерно так. еще нужно помнить, что для DC и AC коэффициентов используются разные таблицы и схемы кодирования, плюс еще куча разной, но необходимой мурзилки. Последний раз редактировалось f.hump; 13.05.2013 в 15:51. Причина: протупил |
|
13.05.2013, 16:17 | #5 |
C/C++, Asm
Участник клуба
Регистрация: 02.03.2010
Сообщений: 1,323
|
решил таки посмотреть материал по ссылке.
Похоже имеет место недопонимание ситуации. В jpeg "таблица Хаффмана" состоит из массивов codes_count[16] и coded_values[16][]. Для каждой картинки генерятся свои таблицы. И материал по ссылке рассказывает о преимуществах Адобовского генератора перед стандартным, на примере портрета хищной птички. |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
стандартные классы | smaiq | Visual C++ | 5 | 24.12.2012 23:53 |
JPEG сжатие на C++ | racushka_n | Помощь студентам | 4 | 24.04.2012 23:04 |
Стандартные функции C++ | vandrouny | Общие вопросы C/C++ | 4 | 09.12.2010 22:37 |
Сжатие информации методом Хаффмана на С++ | BaSoff | Общие вопросы C/C++ | 3 | 18.11.2009 19:51 |
Стандартные модули | dr.Chas | Общие вопросы Delphi | 1 | 07.09.2008 16:54 |