Сжатие данного изображения n раз с использованием метода кодирования Хаффмана

Я пишу программу на java, в которой пользователь вводит информацию о том, сколько раз нужно сжать данное изображение, на основе чего оно должно сжимать изображение.

Сначала мы преобразуем изображение в пиксельную матрицу, находим вероятности появления каждого пикселя в этой матрице и применяем код Хаффмана для получения кода в виде нулей и единиц.

Теперь, если мы попытаемся сжать его во второй раз, у нас будет только 2 вероятности, то есть 0 n 1. Следовательно, мы не можем сейчас применить код Хаффмана.

так что можно сделать в этой ситуации?


person user3501795    schedule 05.04.2014    source источник
comment
Сжатие сжатых данных, как правило, только увеличивает накладные расходы и фактически увеличивает их, а не сокращает. Когда энтрофия приближается к своему экстремуму, вы уже ничего не можете сделать.   -  person Hyperboreus    schedule 05.04.2014


Ответы (1)


Вы можете применить арифметический код к двум символам. Если, например, нулей намного больше, чем единиц, то арифметический код уменьшит общее количество битов, закодировав нули, каждый из которых имеет менее одного бита, а нули - более одного бита. (Это делается путем рассмотрения выходных битов как двоичной дроби, и каждый новый входной бит уменьшает диапазон двоичной дроби.)

Однако вы обнаружите, что после сжатия с использованием кодов Хаффмана количество единиц будет очень близко к числу нулей. Это не будет сжиматься таким образом. Или действительно любым способом.

person Mark Adler    schedule 05.04.2014