Я реализую алгоритм сжатия JPEG, и у меня есть вопрос о том, как сгенерировать правильный поток битов коэффициента D C, используя процедуру кодирования Хаффмана. Я уже реализовал шаг квантования для блока 8 × 8 коэффициентов DCT, выполнил процесс RLE, и теперь я пытаюсь сгенерировать поток битов коэффициентов. Я использую следующие таблицы, которые приведены в формате ISO ISO, для выполнения кодирования Хаффмана.
Предположим, мне нужно кодировать значение DIFF = -5. Как указано в файле ISO, -5 относится к категории SSSS = 3 с кодовым словом = '100'. После этого мы добавляем один бит «0» перед MSB, чтобы указать, что значение является отрицательным. Последний шаг заключается в следующем: «Для каждой категории, кроме SSSS = 0, к кодовому слову добавляется поле дополнительных битов, чтобы однозначно идентифицировать, какая разница в этой категории фактически произошла. Число дополнительных битов задается SSSS; дополнительные биты добавляются к младшему биту предшествующего кода Хаффмана, сначала старший значащий бит. Когда DIFF положителен, добавляются биты младшего разряда SSSS DIFF. Когда DIFF отрицателен, биты младшего разряда SSSS (DIFF - 1) прилагается «. Из того, что я понимаю, я преобразовываю десятичное значение DIFF в соответствующее двоичное. Если перед преобразованием DIFF <0, я вычитаю 1, а затем преобразовываю его в двоичный файл. Теперь у меня есть двоичное представление значения DIFF для кодирования. Какие биты младшего разряда необходимо добавить к кодовому слову, чтобы полностью сгенерировать битовую последовательность кодового слова Хаффмана? </p>
Вот ссылка на файл ISO: https://www.w3.org/Graphics/JPEG/itu-t81.pdf
Таблицы выше можно найти на страницах 89 и 149 соответственно. Кодирование Хаффмана коэффициентов D C приведено на стр. 88 (F.1.2.1).