Как я могу использовать алгоритм сжатия JPEG для одномерных данных (например, линии)?

У меня есть данные (временного ряда), которые выглядят как {21,21,22,23,24,23,....}, и я пытаюсь реализовать алгоритм jpeg в JAVA, чтобы увидеть, как сжатие jpeg работает на таких 1D-данные (мой план — сравнить всевозможные алгоритмы сжатия).

Я знаю, что использование JPEG для текстовых данных (или вообще сжатие с потерями в текстовых данных) не имеет большого смысла, но моя цель — увидеть, какие промежуточные шаблоны генерируются (например, «автомобиль» становится «qwses») и сколько этого промежуточного шаблона напоминает исходные слова при увеличении степени сжатия. Итак, идея примерно такая: https://www.youtube.com/watch?v=meovx9OqWJc&t=1s

Мой входной файл, как я сказал выше, представляет собой матрицу 1x458 и содержит числа от 10 до 300; например {10, 13, 14, 14, 15, 12, ...., 247 247 249,.., 284, 283}

Моя основная проблема заключается в том, что я не совсем уверен, как я должен теоретически преобразовать алгоритм JPEG (изображение 8x8, умноженное на матрицу коэффициентов 8x8 DCT и т. д., адаптировано для данных 1xN (строка) и какую часть реализации я должен изменить в JPEG ( например, как я должен иметь коэффициенты dct для таких данных и т. д.) Если кто-то может объяснить это с помощью псевдокода, это также было бы очень хорошо.


person Chuckster    schedule 21.03.2019    source источник
comment
Получается, вы действительно просто пытаетесь придумать новый алгоритм сжатия? Из того, что я могу сказать, реализации JPEG будут пытаться равномерно заполнять изображения, которые не имеют блоков 8 x 8 (или любого другого размера блока).   -  person Tyler Nichols    schedule 21.03.2019
comment
Можно ли конвертировать 1D в 2D, складывая подмножества, а затем разделяя их для получения результата?   -  person Tyler Nichols    schedule 21.03.2019
comment
Я не уверен, повлияет ли складывание данных после 8-го столбца (для создания блоков степени 8) на точность сжатия, поскольку данные не обладают таким свойством. Я думал, возможно, создать 2D-версию данных, добавив всего 0, чтобы создать еще 8 строк. Я предполагаю, что умножение на 0 не особо повлияет на производительность. Я имею какой-то смысл?   -  person Chuckster    schedule 21.03.2019


Ответы (1)


Вам нужно будет предоставить больше информации о характере ваших 1D-данных и о том, почему вы считаете, что они сжимаемы. Какие закономерности вы ожидаете увидеть?

Например, если это действительно похоже на показанную вами последовательность (21,21,22,23,24,23), то простая модель, использующая разницу последовательных значений, приведет к получению данных, которые хорошо сжимаются стандартными компрессорами без потерь, такими как gzip. Например. (21,0,1,1,1,-1).

Чтобы воспользоваться корреляциями более высокого порядка, вам может понадобиться БПФ. Вы можете эффективно выполнить БПФ для любой последовательности из 2n отсчетов (а не только от восьми отсчетов, как это делает JPEG DCT). Существуют библиотеки, которые выполняют целочисленное БПФ без потерь, а также другие преобразования, такие как вейвлеты, которые вы можете попробовать.

person Mark Adler    schedule 21.03.2019