Сжатие - бит - PullRequest
       25

Сжатие - бит

2 голосов
/ 25 мая 2011

Я хочу сжать файл, который выглядит как BITMAP INDEX.(Файл в двоичном формате только с «0» и «1»).

При использовании байта для представления "0" или "1" сжатие имеет хороший коэффициент из-за низкой случайности.

Вместо использования байта для представления "0" или "1" я хотел бы использовать бит.Пример: число 8 = 00001000 номер 10 = 00001010

Таким образом, несжатый файл будет в 8 раз меньше файла с индексом растрового изображения, использующего байт для представления 0 и 1.

Но когда я сжимаюэтот файл мое соотношение очень плохое, потому что высокая случайность данных.

Так что мои вопросы.Есть ли какие-либо алгоритмы сжатия, что меньшая единица - это бит вместо байта?Или какие-нибудь хитрости, которые я могу использовать, чтобы снизить случайность данных?

Ответы [ 2 ]

4 голосов
/ 25 мая 2011

Существуют ли какие-либо алгоритмы сжатия, в которых меньшая единица является битом, а не байтом?

Любой здравый алгоритм сжатия на основе энтропии будет работать на уровне «битов» и, таким образом, отображать ожидаемое поведение. При передаче ему входного сигнала, который состоит только из байтов «00000001» и «00000000», кодер в некотором смысле «видит», что вход состоит из чертовски большого количества битов «0», вызванных несколькими «1» - это адаптируется к этой ситуации и достигнет хороших коэффициентов сжатия с помощью таблиц (или того, что компрессор использует для представления своего состояния) для обработки этого случая.

Если вы действительно используете все биты в байте, энтропия («случайность») входа намного выше, поэтому, хотя у вас есть вход, размер которого составляет только 1/8, вы также можете сделать Работа компрессора значительно сложнее, и от этого пострадает степень сжатия. В любом случае, я абсолютно уверен, что это правильный путь, так как вы не полагаетесь на компрессор, который может или не может быть хорош в обнаружении «схемы множества нулей», которую вы используете во входных данных.

Или какие-нибудь приемы, которые я могу использовать, чтобы снизить случайность данных?

Эти "уловки" включают в себя выполнение преобразований для ваших входных данных, чтобы уменьшить энтропию входных данных. То, что вы можете здесь сделать, действительно зависит от характера ваших входных данных. Если это действительно черно-белые «изображения», вы можете взглянуть на JBIG или проверить преобразования, определенные в стандарте изображения PNG.

1 голос
/ 28 августа 2014

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

Степень сжатия здесь красная сельдь. Вместо этого вы должны сравнивать размеры сжатых файлов .

Теоретически, не должно быть различий в размерах сжатых файлов, поскольку это те же данные.

Несжатый файл битов в байтах будет в 8 раз больше. Тем не менее, он хорошо сжимается - теоретически, до 1/8 его размера - но не лучше, чем версия с несжатыми упакованными битами.

(Я предполагал, что вы пишете 8-битные байты здесь. Если вы пишете 32-битные целые числа, замените 32 на 8 выше.)

...