![]() |
|
|
![]()
|
|
| Pogreb |
|
|||
|
Шустрый ![]() Профиль Группа: Awaiting Authorisation Сообщений: 69 Регистрация: 17.10.2005 Репутация: нет Всего: нет |
Мне надо написать свой алгоритм декодирования JPEG'а (для просмотра).
Не могу разобраться с алгоритмом Хаффмана, все остальное выглядит понятным. Как я понял из лит-ры, он предназначен для сжатия монохромных изображений, но тогда как поступить с тем ,что jpeg цветной формат. Или же каждая компонента кодируется отдельно? Помогите, кто что знает... |
|||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 7 Всего: 183 |
Где Хаффман, а где JPEG... что-то ты напутал... Хаффман действительно предназначен для сжатия бинарных растров, и используется, например, в tiff-формате, и некоторых других... Проще найти исходник, я думаю, должны быть, алгоритм давно используемый.
-------------------- ... |
|||
|
||||
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: нет Всего: 459 |
да нет не напутал все верно. Вот тут на английском http://www.filedonkey.com/url/681C93FF04F6...3FBF77DB2D3674C А вот тут на русском http://www.matrix-wb.h1.ru/article/formats/jpeg-rus.html -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
| Pogreb |
|
|||
|
Шустрый ![]() Профиль Группа: Awaiting Authorisation Сообщений: 69 Регистрация: 17.10.2005 Репутация: нет Всего: нет |
Например, для байта 6 (эквивалент (0,6)) у нас есть код Хаффмана = 111000;
для байта 69 = (4,5) (например) у нас есть 1111111110011001 21 = (1,5) — 11111110110 4 = (0,4) — 1011 33 = (2,1) — 11011 0 = EOB= (0,0) — 1010 поясните мне данный кусочек. Я не могу найти никаких закономерностей с таблицей Хаффмана. ( Это последний этап кодирования Хаффмана) |
|||
|
||||
| maxim1000 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3334 Регистрация: 11.1.2003 Где: Киев Репутация: 33 Всего: 110 |
каждому байту ставится код из некоторого количества битов
в последовательности байт каждый элемент заменяется своим кодом - получается последовательность бит для того, чтобы можно было раскодировать такое, есть необходимое и достаточное условие: ни один байт не должен иметь код, который совпадает или является началом кода другого байта тогда декодирование делается просто: берём один бит, если он является кодом какого-нибудь байта, то вот он - очередной элемент, если нет добавляем к нему второй бит и т.д. как только получили чей-то код, записываем соответствующий байт в декодированную последовательность и продолжаем единственное неудобство - нужно знать таблицу соответствия кодов на приёмном конце теперь, собственно, сжатие: оно основанно на присвоении коротких кодов часто встречающимся байтам, т.е. для построения хорошей таблицы нужно знать реальное распределение вероятности (его можно получить, анализируя сжимаемые данные) или, по крайней мере, иметь какую-то модель, которая хорошо аппроксимирует распределение в большинстве случаев преимущество первого способа - по реальному распредлению строится действительно оптимальная таблица кодов, приближённое распределение будет давать менее хорошие результаты (зависит от качества аппроксимации) преимущество второго способа - если модель "вбита в исходник", то её не надо передавать по каналу связи или сохранять в файле, т.к. она и так известна, в первом способе нужно передавать либо таблицу кодов, либо распределение, по которому она должна быть построена (не в курсе, какой способ выбран в JPEG) всю эту схему часто называют сжатием по Хаффманну, однако, он, насколько я слышал, предложил только сам способ построения оптимальной таблицы по распределению: ищем два символа с самыми маленькими вероятностями, присваиваем последний бит кода одному 1, другому 0 и дальше рассматриваем их как один символ (вероятность объединённого символа - сумма исходных) потом повторяем процедуру в конце концов получим бинарное дерево, листьями которого будут исходные символы, а код можно будет получить двигаясь от корня к нужному символу и записывая по пути 0 или 1 в зависимости от ветки (левой или правой) -------------------- qqq |
|||
|
||||
| Pogreb |
|
|||
|
Шустрый ![]() Профиль Группа: Awaiting Authorisation Сообщений: 69 Регистрация: 17.10.2005 Репутация: нет Всего: нет |
Если я все правильно понял - кол-во нулей и категория(по Хаффману) кодируются по встроенной таблице в один байт
|
|||
|
||||
| Pogreb |
|
|||
|
Шустрый ![]() Профиль Группа: Awaiting Authorisation Сообщений: 69 Регистрация: 17.10.2005 Репутация: нет Всего: нет |
Ну у меня еще вопрос будет.
Народ кто имел дело с jpeg, подскажите!!! В начале скана во всех файлах идут три одинаковых байта 00 3F 00(hex). Что это за байты и что с ними делать??? |
|||
|
||||
![]()
|
| Правила форума "Алгоритмы" | |
|
|
Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Алгоритмы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |