0 / 0 / 0
Регистрация: 14.09.2011
Сообщений: 20
1

кодирование хаффмана

14.03.2012, 17:28. Показов 3575. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
здравствуйте! я пишу программу сжатия jpeg. написала код для кодирования хаффмана по дереву. и столкнулась с такой проблемой записываю в файл jpeg в маркер ffc4 количество длин кодов и кодируемые символы...(весь файл сохранила как написано в стандарте). и когда начинаю декодировать с помощью программы jpegsnoop она мне выдает коды не те что у меня получились в моей программе...у меня подозрения что она кодирует хаффмана по длине кодов...может ли такое быть и как исправить эту ошибку или я что-то не так делаю....
помогите пожалуйста, никак не могу найти выход из этой проблемы...заранее спасибо!...
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.03.2012, 17:28
Ответы с готовыми решениями:

Кодирование Хаффмана
Добрый вечер. Я за эту неделю малость зафлудил форум наверно. Прошу прощения за это. Просто уже не...

Кодирование Хаффмана
Есть дерево Хаффана, с помощью функции, приведенной ниже прохожусь по дереву и "выписываю" 0 и 1,...

Кодирование алгоритмом Хаффмана
Проблема - такая : Есть рабочая программа, которая кодирует текстовый файл алгоритмом хаффмана....

Кодирование алгоритма Хаффмана
Доброго времени суток. У меня есть на руках рабочий код. Вопрос стоит следующим образом: Нужно...

3
106 / 106 / 11
Регистрация: 17.10.2010
Сообщений: 283
15.03.2012, 10:01 2
А напишите Ваши коды и те, что jpegsnoop выдает
0
0 / 0 / 0
Регистрация: 14.09.2011
Сообщений: 20
19.03.2012, 11:23  [ТС] 3
для конкретного jpeg сжатия для дерева АС Y у меня в моей программе получились коды в зависимости от вероятности повторений
символы(в 16-ричной системе) - длины 5:
6F - 01010
76 - 01011
77 - 01100
7B - 01101
7D - 01110
81 - 01111
длины 4:
8A - 0000
8D - 0001
9A - 0010
88 - 0011
79 - 0100
и код длины 1:
80 - 1

а в программе jpegsnoop при декодировании моего сохраненного jpeg файла те же самые символы получаются декодированы кодами:
длины 5:
11010
11011
11100
11101
11110
11111
длины 4:
1000
1001
1010
1011
1100
длины 1:
0

а вот с AC-коэффициентами цветоразности получились разные совсем коды:
символы - коды длиной 6
7B - 011110
7C - 011111
символы - коды длиной 5
7F - 00000
86 - 00001
8A - 00010
8B - 00011
8C - 00100
8E - 00101
84 - 01110
символы - коды длиной 4
7E - 0011
7D - 0100
82 - 0101
81 - 0110
символы - коды длиной 1
80 - 1
а в программе jpegsnoop при декодировании тех же символов получаются коды
длины 6:
111110
111111
длины 5:
11000
11001
11010
11011
11100
11101
11110
длины 4:
1000
1001
1010
1011
длины 1:
0
получается различие кодов...а почему непонятно..из-за этого я так понимаю ошибки в маркере закодированных данных....

Добавлено через 12 минут
еще в программе jpegsnoop такую ошибку *** ERROR: @ 0x00000127.7, num_coeffs>64 [68]

*** ERROR: @ 0x00000127.7, num_coeffs>64 [68]
*** ERROR: Bad scan data in MCU(0,0): Lum AC CSS(0,0) @ Offset 0x00000128.0
MCU located at pixel=(0,0)
*** ERROR: @ 0x0000012E.2, num_coeffs>64 [69]
*** ERROR: Bad scan data in MCU(1,0): Lum AC CSS(1,0) @ Offset 0x0000012E.3
MCU located at pixel=(16,0)


и еще такой вопрос...может ли отсутствовать коэффициент EOB(и вообще я не очень понимаю зачем он нужен)...
и вообще правильно ли я понимаю....я перед тем как создавать дерево хаффмана прибавила 128 к каждому кодируемому символу для того чтобы не было отрицательных чисел...нулей у меня нет..все числа положительные. у меня расхождение в мыслях- то ли EOB это коэффициент чтобы закодировать нули(которых у меня нет)...то ли это коэффициент что это конец кодируемого блока 8 на 8...или что???
извините что так много вопросов...просто никак не могу с этим разобраться....
0
106 / 106 / 11
Регистрация: 17.10.2010
Сообщений: 283
24.03.2012, 22:41 4
А попробуйте более короткие коды начинать с нуля, а более длинные - с единицы.
То есть, если из одного и того же узла дерева Хаффмана выходят два поддерева, то поддерево, в которое мы попадаем по 0, должно содержать более короткие коды. Не исключено, что все будет работать корректно.

Добавлено через 18 минут
То, что Вы прибавили 128, ничего не меняет, дерево Хаффмана от этого не изменится. А EOB (End Of Block) - это маркер конца блока, он должен присутствовать и говорит о том, что далее, до конца блока, следует завершающая серия нулей и больше ничего кодировать в этом блоке не надо. Отсутствовать он вроде не должен.

Добавлено через 16 минут
И еще одно наблюдение. Абстрактное, но Вы его можете проследить на кодах из jpegsnoop. Допустим, есть 3 кода длины 2 и дерево кодов большей длины. В этом случае коды длины 2 будут 00, 01, 10. А вот дерево будет "расти" из 11.
То есть, если на одном и том же уровне есть и терминальные вершины (т.е. собственно коды символов), и "корни" деревьев, коды с меньшим бинарным значением отдаются для терминальных вершин, а с большим - для дальнейшего роста деревьев.
То, что я написал в самом начале поста #4 - частный случай этого правила. Так что, если Вы реализуете построение дерева способом, описанным в предыдущем абзаце, Ваши коды должны совпасть с кодами jpegsnoop.
И еще по EOB - думаю, он не должен присутствовать, если последний символ блока - ненулевой. А в остальных случаях он обязателен.
1
24.03.2012, 22:41
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
24.03.2012, 22:41
Помогаю со студенческими работами здесь

Кодирование текста методом Хаффмана
Вроде бы всё правильно , НО : 1)вылезает "ё" в самом начале , хотя сортируется map по умолчанию по...

Кодирование Хаффмана (bmp в свой формат)
Дообры день! Подскажите как реализовать следующее: Есть программа кодирования/декодирования...

Кодирование Хаффмана
Помогите написать программу для кодирования и декодирования строк вида "a_!slf" с помощью метода...

Псевдоалгоритм Хаффмана
есть алгоритм n – количество символов исходного алфавита P – массив вероятностей,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru