最近,我一直在处理与压缩有关的算法,我想知道哪种压缩率可以通过无损数据压缩实现。
到目前为止,我在该主题上唯一能找到的资源是维基百科:
对数字化数据(如视频,数字化电影和音频)的无损压缩可保留所有信息,但由于数据的固有熵,其压缩效果几乎不会比1:2更好。
不幸的是,维基百科的文章没有引用或引用来支持这种说法。我不是数据压缩专家,因此,对于您可以提供的有关此主题的任何信息,或者如果您可以向我提供比Wikipedia更可靠的信息来源,我将不胜感激。
最近,我一直在处理与压缩有关的算法,我想知道哪种压缩率可以通过无损数据压缩实现。
到目前为止,我在该主题上唯一能找到的资源是维基百科:
对数字化数据(如视频,数字化电影和音频)的无损压缩可保留所有信息,但由于数据的固有熵,其压缩效果几乎不会比1:2更好。
不幸的是,维基百科的文章没有引用或引用来支持这种说法。我不是数据压缩专家,因此,对于您可以提供的有关此主题的任何信息,或者如果您可以向我提供比Wikipedia更可靠的信息来源,我将不胜感激。
Answers:
我不确定是否有人解释了为什么神奇数字似乎正好是1:2,而不是例如1:1.1或1:20。
原因之一是,在许多典型情况下,数字化数据中几乎有一半是噪声,而噪声(根据定义)无法压缩。
我做了一个非常简单的实验:
我拿了一张灰卡。在人眼中,它看起来像一块普通的中性灰色纸板。特别是没有信息。
然后,我使用了一台普通的扫描仪-正是人们可能用来数字化他们的照片的那种设备。
我扫描了灰卡。(实际上,我与明信片一起扫描了灰卡。明信片在那里是为了进行完整性检查,以便确保扫描仪软件不会做任何奇怪的事情,例如在看到无特征的灰卡时自动添加对比度。)
我裁剪了灰卡的1000x1000像素部分,并将其转换为灰度(每个像素8位)。
我们现在所拥有的应该是当您研究扫描的黑白照片的无特征部分(例如,晴朗的天空)时发生的事情的一个很好的例子。原则上,应该没有什么可看的。
但是,使用较大的放大倍率,实际上看起来像这样:
没有清晰可见的图案,但是没有统一的灰色。它的一部分很可能是由灰卡的缺陷引起的,但我认为其中大部分只是扫描仪产生的噪声(传感器单元,放大器,A / D转换器等中的热噪声)。看起来很像高斯噪声。这是直方图(以对数刻度):
现在,如果我们假设每个像素的阴影都从该分布中选取,那么我们有多少熵?我的Python脚本告诉我,每个像素有多达3.3位的熵。这是很多噪音。
如果确实如此,则意味着无论我们使用哪种压缩算法,在最佳情况下,都将1000x1000像素位图压缩为412500字节的文件。实践中会发生什么:我得到了一个432018字节的PNG文件,非常接近。
如果我们稍微概括一下,似乎无论我用该扫描仪扫描哪张黑白照片,我都将得到以下总和:
现在,即使您的压缩算法将有用的信息压缩到<< <<每个像素1位,您仍然会在每个像素中拥有多达3位不可压缩的噪声。未压缩的版本是每个像素8位。因此,无论您做什么,压缩率都将在1:2范围内。
另一个示例,试图找到过度理想的条件:
最终结果是什么?它看起来比我从扫描仪得到的要好得多。噪音不太明显,完全看不到。尽管如此,高斯噪声仍然存在:
和熵?每个像素2.7位。实践中的文件大小?344923字节(1M像素)。在真正最佳的情况下,由于有些作弊,我们将压缩率推到了1:3。
当然,所有这些都与TCS研究完全无关,但我认为最好记住真正限制现实世界数字化数据压缩的因素。更高级的压缩算法设计的进步和CPU的原始能力将无济于事。如果要无损地保存所有噪声,您将无法做得比1:2好得多。
您是否已经了解Shannon的无噪编码定理?该定理建立了无损压缩的理论极限。来自其他人的一些评论似乎假设您对这个定理有所了解,但是从问题上来说,我认为这可能是您正在寻找的答案。
常见的实际解决方案是使用8位,如果您将要编码的唯一整数都在1到256之间(如果需要,则一般化为16、32和64位)。
从某种意义上说,伽玛代码不是最佳的,因为还有其他代码使用更少的空间来存储任意多个整数,而使用更多的空间来存储有限数量的整数。关于该主题的一篇很好的读物是Jon Louis Bentley和Andrew Chi-Chih Yao于1976年提出的“一种几乎无限的搜索最佳算法”(我特别喜欢它们在搜索算法的复杂性和整数编码的大小之间的联系:找到它是我所知道的最简单,最漂亮的TCS结果之一)。底线是位在最佳值的二分之一以内,考虑到更好的解决方案的复杂性,大多数人在实践中就足够了。
然而,将“机会主义”方法发挥到极致,利用各种假设的无限数量的压缩方案。处理机会编码的这种无限性的一种方法(即压缩方案)是要求对假设本身进行编码,并在总压缩大小中考虑假设编码的大小。形式上,这对应于两个编码压缩的数据和解码器,或更一般地为编码程序,其在被执行时,输出未压缩的对象:这样的程序的最小大小被称为洛夫的复杂 。从某种意义上说,这是一种非常理论上的构造,它对程序的执行时间没有限制,是不可计算的。Levin的自定界程序提供了围绕此概念的简单解决方法,在该程序中,您仅考虑执行时间有限的程序(例如,在原始实例长度的常数范围内,这是该实例的下限)。需要写入每个符号的算法的复杂性)。
整个社区都在研究Kolmogorov的复杂性及其变体,另一个社区正在致力于无损压缩(我使用的整数示例在许多其他数据类型上都等效),我勉强摸索了表面,其他人可能会提高精度(Kolmogorov确实不是我的专长),但我希望这可以帮助您阐明问题,即使不一定能给您希望的答案:)
(只是我的评论的扩展)
(正如乔在回答中所指出的那样)香农-在其1948年的论文中,“ 通信的数学理论 ”提出了数据压缩理论,并确立了无损数据压缩的根本限制。这个极限称为熵率,用H表示。H的确切值取决于信息源-更具体地说,取决于信息源的统计性质。可以以接近H的压缩率无损压缩源。从数学上讲,不可能比H做得更好。
但是,可以压缩(没有那么有效)压缩没有高对比度边缘和平滑过渡的某些类型的图像(例如医学灰度图像)。
JPEG-LS和JPEG2000似乎是无损存储医学图像的标准。有关压缩率的比较,请参见此表(JPEG-LS实现了稍微更好的压缩)。
使用“无损医学图像压缩”,我发现了以下文章可能会对您有所帮助:
最近(2011年)关于医学图像压缩技术的调查:二维医学图像压缩技术-一项调查
本文针对二维(2D)静态医学图像,介绍了基于DCT,DWT,ROI和神经网络的各种压缩技术的概述。
两种标准无损压缩算法的详细介绍:无损模式下的JPEG-LS和JPG2000:灰度医学图像的无损压缩-传统方法和最新方法的有效性
...测试了来自多个解剖区域,方式和供应商的三千六百七十九(3,679)张单帧灰度图像。...
另一项调查:当代医学图像压缩技术调查
编辑
也许您仍在想“图像的熵到底是什么?” ...好吧,这是图像中包含的信息量 ...但是为了更好地理解它,您应该阅读有关图像压缩中通常使用的三个阶段的内容:
您可以使用Google搜索有关图像压缩的教程或书籍(例如快速教程),或尝试观看在线技术视频(例如第16讲-图像和视频编码入门)。
将文件视为字符串。
您永远做不到比字符串的Kolmogorov复杂度更好的事情(这是根据Komogorov复杂度的定义)。
固定字符串长度。所以现在我们只看长度为n的字符串。
所有此类字符串的一半最多可以压缩1位。所有字符串的1/4最多可以压缩2位。所有此类字符串的1/8最多可以压缩3位。
因此,可以以2:1的比率压缩多少部分的字符串(图像,文件等)-很少。那么为什么压缩总是起作用?因为几乎真实的人实际尝试压缩的所有数据都是高度结构化的-它看起来并不像随机文件。查找数据的随机性越高,压缩就越困难。他们齐头并进。大多数字符串看起来都是随机的。
要查看实际效果,请使用一些随机过程生成一个随机文件。我的意思是一个非常非常随机的文件。现在尝试使用您喜欢的压缩算法对其进行压缩。几乎所有时间它都将保持不变或变大。
另一方面,有高度可压缩的琴弦。采取以下字符串:100000..000(1后跟一百万个零)。它的描述与前面的句子相符,计算机可以根据该描述(或非常类似的描述)对其进行重构。然而,这种描述远不及一百万个数字长。
事实是,具有该属性(高度可压缩)的字符串在所有可能的字符串中极为罕见。第二个事实是,几乎所有人类生成的数据都是超级结构,因此具有超级可压缩性。