2013-03-07 2 views
5

Я рассматриваю проблему уменьшения пространства для хранения при хранении нескольких изображений JPEG вместе как одно изображение большего размера. Основная интуиция заключается в том, что изображения, как правило, имеют некоторые сходства (например, те, которые взяты в одном месте или примерно в один и тот же момент времени), и можем ли мы использовать это сходство для экономии места?Сжатие изображений JPEG

Общий поток: Входные JPG изображения -> Каждое изображение преобразуется в RGB Плитки Image -> реорганизовать подобные RGB плитки вместе -> Опять же преобразование в формат JPG. Естественно, при получении изображений нам нужно будет обратного процесса.

Используя коэффициент DC компонента Y в качестве меры подобия для реорганизации плитки, я получил экономию пространства ~ 8% для 10 изображений. Когда я делаю это для 100 изображений, экономия уменьшается до ~ 3%.

  • Как получить экономию после реорганизации плитки - то есть какая часть процесса кодирования JPEG использует это изображение плитки реорганизации?

  • Вместо коэффициента DC Y компонента, есть некоторые другие показатели вы могли бы думать о том, что будет лучше, эксплуатируемые кодирования JPEG


После доработки:

Есть некоторые другие формат изображения, кроме JPG, который может использовать подобный вид схожести лучше при объединении нескольких изображений? Например, PNG?

ответ

5

Возможно, вы используете JFIF для кодирования.

Я не уверен, как вы ожидаете, что этот метод будет работать. Если я правильно понимаю, вы разбиваете изображения на плитки, объединяя их в один мега-образ, с «подобными» плитами, расположенными близко друг к другу.

AFAIK, реализация JPEG делает отдельный DCT для каждой плитки 8x8 в изображении, называемый макроблоком . Другими словами, JPEG не может использовать когерентность между соседними макроблоками (что, по-видимому, является основным предположением для вашей техники сжатия).

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

Например: заголовки изображений 10 JPG, замененные на 1, позволят вам экономить пространство на 90%, но только в заголовке. Когда вы смотрите на общий файл, заголовок представляет собой небольшую часть всего файла, поэтому ваша экономия пространства является скудной. При замене 100 заголовков изображений на 1 вы сохраняете 99%, но снова только на заголовке. В обоих случаях все макроблоки все еще кодируются и сохраняются точно так же, как и раньше.

+0

Спасибо, это имеет большой смысл! Я использую libjpeg для кодирования и декодирования. Поскольку JPEG делает DCT в макроблоках 8x8, сходство между плитами (больше макроблоков), вероятно, мало помогает. Но, я думаю, коэффициенты DCT соседних макроблоков закодированы относительно, и это может быть улучшено в результате такой реорганизации плитки в некоторой степени. Я пересмотрел свой вопрос - пожалуйста, взгляните. – user655617

+0

Рад, что я мог помочь прояснить ситуацию. Да, libjpeg - это стандартная реализация стандарта JFIF стандарта JPEG для стандарта JPEG. Я не помню коэффициенты DCT с использованием дельта-кодирования (среди соседних макроблоков). AFAIR, каждый макроблок становится единой матрицей коэффициентов 8x8, которая затем уничтожается (делятся на уменьшение количества бит, необходимых для их хранения), и именно здесь возникает «потеря» в сжатии с потерями) и считывается в zig -размерная мода. Это упорядочение дает длинные прогоны 0s, которые эффективно сжимаются с помощью кодирования длины во время выполнения (вместо хранения 17 нулей мы сохраняем 17, 0). –

2

Есть две области, где вы увидите преимущества:

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

Я подозреваю, что этот эффект невелик, если ваши изображения не являются очень похожими или очень маленькими (чтобы их края были длинными пропорционально их площади).

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

Этот аспект не будет зависеть от того, с каким устройством вы сжимаете свои изображения - пока они находятся на одном изображении.

+0

Благодарим за отзыв! Я не уверен в вашей первой части. Но, я думаю, кодирование хаффмана может использовать это для _some_ extent _if_. Я разделил конечный результат на несколько изображений, каждый из которых имеет похожие фрагменты. Но я не думаю, что это объясняет экономию пространства, которую я получаю. Я перефразировал свой вопрос - пожалуйста, взгляните. – user655617

Смежные вопросы