У меня есть набор из 100 изображений, которые отличаются только несколькими пикселями. У них также не много разных цветов. Есть ли способ сжать их вместе, воспользовавшись этим?Есть ли алгоритм сжатия нескольких изображений, которые не сильно отличаются друг от друга?
ответ
Там же алгоритм: вычислить разность каждого изображения к некоторому эталонному изображению. Есть ли готовое приложение? Возможно нет. Один из подходов может заключаться в объединении изображений с очень большим изображением (чередованием или размещением их рядом друг с другом) и использованием png.
Если это предназначено для архивирования, и вам не нужен произвольный доступ к ним, вы можете связать их с zip/tar (с нулевым сжатием) и сжать все это. .bz2 (преобразование Burrows-Wheeler Transform) способен искать сходства в гораздо большем окне, чем дефляция png. Это порядка десяти мегабайт против 10 килобайт. Если изображения достаточно велики, размер окна ограничит сжатие в обоих алгоритмах - это должно быть сражение путем чередования или дельта-сжатия между каждым изображением.
Дельта-сжатие используется регулярно в некоторых приложениях для сжатия видео и, например, захвата экрана и приложений виртуального рабочего стола, где требуется сжатие без потерь.
Стройте их вместе как фильм и используйте сжатие видео. Это именно то, что делает сжатие видео.
Ничего готового. Если вы хотите, сжатие без потерь, можно сохранить только эталонное изображение и дельта-изображения (разность изображений в пиксельной Leve), каждый из которых, закодированного PNG. Но вы должны написать себе дельта-трансформацию.
Вы также можете использовать режим дельта-сжатия формата MNG, расширение для PNG для анимации (каждое из ваших изображений будет анимационным фреймом). Но формат широко не поддерживается.
Вы также можете использовать один и тот же подход (один образ = один видеокадр) и использовать любой стандартный формат видео (MPEG), но это было бы потеряно.
Без потерь или сжатие с потерями? – leonbloy
@leonbloy Lossless – MaiaVictor