Без потерь сжатие похожих изображений?

10

Мне нужно уменьшить размер моей библиотеки фотографий, поэтому я, естественно, хочу сжать их. Многие из них не совсем идентичны, но все же очень похожи (последующие кадры одной и той же сцены). Есть ли алгоритм сжатия, который использует этот факт для эффективного сжатия этих изображений? 7zip (LZMA) бесполезен.

Erik
источник

Ответы:

11

Вы можете попробовать Paq 8 (fp8_v2.zip). Я просто попробовал сам на 1440 похожих изображениях PNG, а затем снова на 111 похожих изображениях JPG. Вот результаты.

  • 1440 файлов PNG, 28 631 615 байт => 2 058 653 байт сжатых
  • 111 файлов JPG, 15 003 820 байт => 489 096 байт сжатых

Сжатие файлов PNG заняло около 8 минут и 550 МБ памяти при использовании:

fp8_v2.exe -7 images *.png

Сжатие файлов JPG заняло около 5 минут и 125 МБ памяти при использовании:

fp8_v2.exe -5 images image12*.jpg

Смотрите также: jpg тест сжатия изображений без потерь

jftuga
источник
Сжатие на 97% для JPG кажется нереальным. Числа в сравнительном тесте, на которые вы
ссылаетесь,
@OneSolitaryNoob Вы забыли, что JPEG похожи? 110/111 = 99,1% ожидаемого сжатия. Сравнительный тест, который он связал, касается сжатия одного JPEG.
Навин
@ Навин, это действительно маловероятно. Даже если они выглядят почти одинаково, большинство пикселей будет немного отличаться.
OneSolitaryNoob
@OneSolitaryNoob И что? 1 секунда видео (30 кадров) может быть сжата примерно до одного размера с одним кадром. Пока небольшая разница составляет небольшую часть данных, у вас все хорошо.
Навин
@ Navin это сжатие с потерями, многие детали пропали, но большинство людей не заметят. Paq * - сжатие без потерь
OneSolitaryNoob
1

Я предположил бы, что преобразование Барроуза-Уилера с арифметическим кодером было бы идеальным для этого, учитывая достаточно большое окно. Что произойдет, если вы настроите BZIP2 для использования размера блока, равного небольшому количеству фотографий? Это будет медленнее и займет больше памяти, но степень сжатия должна взлететь. А вы уже пробовали LZMA с блоками большего размера?

Питер Ханнеман
источник
1

Вот простое решение, которое не работает для фотографий, но может работать, если у вас есть несколько изображений с большими попиксельными областями: сохраните изображения в распакованном формате, например, BMP (не PNG или GIF), а затем сохраните их в TAR и сожмите с достойным компрессором, как XZ, например, на Linux с чем-то вроде

tar -c myDirectory | xz -9 >myDirectory.tar.xz

Вместо TAR и XZ можно использовать 7-Zip с опцией «сплошной архив», чтобы получить примерно одинаковую производительность. Таким образом, я мог сжать 16 похожих снимков экрана, каждый из которых занимал около 900 КБ при сохранении в виде отдельных файлов PNG, в архив размером 2 МБ. Преимущество этого решения заключается в том, что оно использует общие форматы файлов, поэтому оно работает без установки нового программного обеспечения. (К сожалению, старые и даже более распространенные программы GZIP и BZIP2 не помогли мне - возможно, потому что размер блока BZIP2 не может быть настроен так, чтобы он был больше 900 КБ.)

Яан
источник
0

Не то чтобы я видел. Вероятно, самым близким было бы взять несколько похожих JPEG-файлов и поместить их в фильм MJPEG. Вы также можете использовать APNG или анимированные GIF-файлы для аналогичных целей.

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

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

afrazier
источник
GIF не подходит для сжатия фотографий, а анимированный GIF еще меньше. Даже сжатие фотографий в видео MJPEG не кажется мне полезным, потому что восстановление отдельных изображений будет затруднительным.
Мартин
Я не сказал, что это хорошая идея ... :-) Конечная идея состояла в том, чтобы поместить фотографии в анимированный вариант их оригинального формата.
afrazier