一系列相似灰度图像的无损压缩

问题描述

我希望在一系列相似的灰度图像中具有最佳的压缩率。我注意到我需要一个绝对无损的解决方案(这意味着我应该能够使用哈希算法进行检查)。

我尝试过的事情

我的想法是将图像转换为视频,因为图像之间存在年代顺序。编码算法将使用并非所有场景都在2张图片之间变化的事实进行压缩。所以我尝试使用ffmpeg,但是由于sRGB-> YUV颜色空间压缩,我遇到了几个问题。我一无所知,但这似乎是一场噩梦。

使用的代码示例:

ffmpeg -i %04d.png -c:v libx265 -crf 0 video.mp4 #To convert into video
ffmpeg -i video.mp4 %04d.png #To recover images

我的第二个想法是用imagemagik手工完成。因此,我以第一张图像作为参考,并创建了一个新图像,该图像是image1和image2之间的区别。然后,我尝试将差异图像与图像1相加(试图恢复图像2),但是它不起作用。注意重新创建的图片的大小,很显然图像是不一样的。我认为在此过程中出现了不必要的压缩。

使用的代码示例:

composite -compose difference 0001.png 0002.png diff.png #To create the diff image
composite -compose difference 0001.png diff.png recover.png #To recover image 2

您对我的问题有任何想法吗? 为什么我无法通过iamgemagik进行完美恢复?

谢谢;)

以下是20个示例图片https://cloud.damien.gdn/d/f1a7954a557441989432/

解决方法

我尝试了一些关于您的数据集的想法,并总结了以下发现的内容。我的计算和百分比假设578kB是代表图像大小。


方法1-粉碎-69%

我只是在您的其中一张图片上运行了pngcrush

pngcrush -bruteforce input.png crushed.png

输出大小为400kB,因此您的映像现在仅占用磁盘上原始空间的6​​9%。


方法2-旋转并压碎-34%

我将您的图片旋转了90度并粉碎了结果:

magick input.png -rotate 90 result.png
pngcrush -bruteforce result.png crushed.png

旋转的粉碎图像占据了磁盘上原始空间的34%。


方法3-旋转和差异-24%

我使用ImageMagick旋转了您的图像,然后对系列中的两个相邻图像进行了差分处理并保存了结果。然后,我将其“ pngcrushed”了142kB,即原始空间的24%。


方法4-合并为RGB-28%

我将您的三个单通道图像合并为一个3通道RGB图像,并png粉碎了结果:

magick 000[123].png -combine result.png
pngcrush -bruteforce result.png crushed.png

这导致一个490kB文件包含3张图像,即每张图像163kB或原始大小的28%。


我怀疑具有“运动”估计/检测功能的视频如果能够无损地进行下去,将会获得最佳效果。

,

您可能会从MNG中获得一些收益,该收益旨在进行无损动画压缩。您可以使用libmng进行尝试。