无损压缩数据的限制是多少?(如果有这样的限制)


14

最近,我一直在处理与压缩有关的算法,我想知道哪种压缩率可以通过无损数据压缩实现。

到目前为止,我在该主题上唯一能找到的资源是维基百科:

对数字化数据(如视频,数字化电影和音频)的无损压缩可保留所有信息,但由于数据的固有熵,其压缩效果几乎不会比1:2更好

不幸的是,维基百科的文章没有引用或引用来支持这种说法。我不是数据压缩专家,因此,对于您可以提供的有关此主题的任何信息,或者如果您可以向我提供比Wikipedia更可靠的信息来源,我将不胜感激。


1
我不确定理论计算机科学是否是询问此类问题的最佳站点。如有需要,请随时进行投票或将该问题迁移到更合适的网站。
奥龙

3
这可能是您正在寻找的:en.wikipedia.org/wiki/Entropy_encoding。关键字是
张显之(张显之)2011年

3
不幸的是,我不知道哪种网站更合适。所述量化误差是熵源,其可能会排除大的压缩比。
Peter Shor

2
您需要针对哪种数据进行无损数据压缩?图像,音乐,语音,通用数据…… 但是,有关高级介绍,请参见data-compression.com/theory.html(以及页面底部的资源)
Marzio De Biasi

2
@Vor图片。更具体地说,是医学图像。我将看一下该页面。谢谢。
奥龙

Answers:


27

我不确定是否有人解释了为什么神奇数字似乎正好是1:2,而不是例如1:1.1或1:20。

原因之一是,在许多典型情况下,数字化数据中几乎有一半是噪声,而噪声(根据定义)无法压缩。

我做了一个非常简单的实验:

  • 我拿了一张灰卡。在人眼中,它看起来像一块普通的中性灰色纸板。特别是没有信息

  • 然后,我使用了一台普通的扫描仪-正是人们可能用来数字化他们的照片的那种设备。

  • 我扫描了灰卡。(实际上,我与明信片一起扫描了灰卡。明信片在那里是为了进行完整性检查,以便确保扫描仪软件不会做任何奇怪的事情,例如在看到无特征的灰卡时自动添加对比度。)

  • 我裁剪了灰卡的1000x1000像素部分,并将其转换为灰度(每个像素8位)。

我们现在所拥有的应该是当您研究扫描的黑白照片无特征部分(例如,晴朗的天空)时发生的事情的一个很好的例子。原则上,应该没有什么可看的。

但是,使用较大的放大倍率,实际上看起来像这样:

30x30作物,放大10倍

没有清晰可见的图案,但是没有统一的灰色。它的一部分很可能是由灰卡的缺陷引起的,但我认为其中大部分只是扫描仪产生的噪声(传感器单元,放大器,A / D转换器等中的热噪声)。看起来很像高斯噪声。这是直方图(以对数刻度):

直方图

现在,如果我们假设每个像素的阴影都从该分布中选取,那么我们有多少熵?我的Python脚本告诉我,每个像素有多达3.3位的熵。这是很多噪音。

如果确实如此,则意味着无论我们使用哪种压缩算法,在最佳情况下,都将1000x1000像素位图压缩为412500字节的文件。实践中会发生什么:我得到了一个432018字节的PNG文件,非常接近。


如果我们稍微概括一下,似乎无论我用该扫描仪扫描哪张黑白照片,我都将得到以下总和:

  • “有用的”信息(如果有),
  • 噪音,约 每个像素3位。

现在,即使您的压缩算法将有用的信息压缩到<< <<每个像素1位,您仍然会在每个像素中拥有多达3位不可压缩的噪声。未压缩的版本是每个像素8位。因此,无论您做什么,压缩率都将在1:2范围内。


另一个示例,试图找到过度理想的条件:

  • 使用最低感光度设置(最低噪音)的现代数码单反相机。
  • 灰卡散焦的镜头(即使灰卡中有一些可见的信息,也会被模糊掉)。
  • 将RAW文件转换为8位灰度图像,而不增加任何对比度。我在商用RAW转换器中使用了典型设置。默认情况下,转换器会尝试降低噪声。此外,我们将最终结果保存为8位文件-本质上,我们是在丢弃原始传感器读数的最低位

最终结果是什么?它看起来比我从扫描仪得到的要好得多。噪音不太明显,完全看不到。尽管如此,高斯噪声仍然存在:

30x30作物,放大10倍 直方图

和熵?每个像素2.7位。实践中的文件大小?344923字节(1M像素)。在真正最佳的情况下,由于有些作弊,我们将压缩率推到了1:3。


当然,所有这些都与TCS研究完全无关,但我认为最好记住真正限制现实世界数字化数据压缩的因素。更高级的压缩算法设计的进步和​​CPU的原始能力将无济于事。如果要无损地保存所有噪声,您将无法做得比1:2好得多。


3
凉!如果噪声是高斯噪声,我的感觉是,投影在前k个奇异矢量(或类似的更奇特的技巧)上会消除很多噪声。谷歌学者快速搜索显示M. Elad和M. Aharon的一篇文章,该文章使用投影方法+一些贝叶斯统计技巧ieeexplore.ieee.org/xpls/abs_all.jsp?arnumber = 4011956。据推测,2006年是“最先进的技术”。当然,这并不是无损的,但是Jukka的数据表明,如果您坚持使用小尺寸,则至少要损失噪音。
Sasho Nikolov

您的示例仅涉及图像的无损压缩。我很不情愿地将它们归纳为来自物理传感器(声音,图像,视频,但可能具有不同因素)的任何数据,但还有(许多?)其他应用压缩的字段,其压缩比比1好得多: 2(想到自然语言),因为噪音较小。
杰里米

2
@Jukka:+1:美丽的实验!@Sasho:对于医学图像,传统的看法是,即使很可能只是噪音,您也不会丢失任何东西。
Peter Shor

2
很好很清楚的解释!
Marzio De Biasi

2
还有一点评论:对于医学图像,这是不可避免的。如果您没有使用足够的精度在医学图像中产生大量此类噪点,那么您可能会丢失一些实际相关的细节,而您确实希望保留这些细节。
Peter Shor

16

您是否已经了解Shannon的无噪编码定理?该定理建立了无损压缩的理论极限。来自其他人的一些评论似乎假设您对这个定理有所了解,但是从问题上来说,我认为这可能是您正在寻找的答案。


我不知道那个定理。我猜维基百科的说法并不完全正确,因为可达到的压缩率取决于要压缩的数据的熵。
奥龙

我认为确定图像的固有熵确实非常困难-如果数据是线性的而不是二维的,则容易得多。
Peter Shor

那么,随机(均匀)生成的文本的最大压缩率是多少?
skan,

11

n>0

  1. n

  2. 常见的实际解决方案是使用8位,如果您将要编码的唯一整数都在1到256之间(如果需要,则一般化为16、32和64位)。

  3. n+1nn

  4. log2nlog2n+1nlog2n1log2n2log2n1nlgn=max(1,log2n)

  5. 从某种意义上说,伽玛代码不是最佳的,因为还有其他代码使用更少的空间来存储任意多个整数,而使用更多的空间来存储有限数量的整数。关于该主题的一篇很好的读物是Jon Louis Bentley和Andrew Chi-Chih Yao于1976年提出的“一种几乎无限的搜索最佳算法”(我特别喜欢它们在搜索算法的复杂性和整数编码的大小之间的联系:找到它是我所知道的最简单,最漂亮的TCS结果之一)。底线是位在最佳值的二分之一以内,考虑到更好的解决方案的复杂性,大多数人在实践中就足够了。2log2n1

  6. 然而,将“机会主义”方法发挥到极致,利用各种假设的无限数量的压缩方案。处理机会编码的这种无限性的一种方法(即压缩方案)是要求对假设本身进行编码,并在总压缩大小中考虑假设编码的大小。形式上,这对应于两个编码压缩的数据和解码器,或更一般地为编码程序,其在被执行时,输出未压缩的对象:这样的程序的最小大小被称为洛夫的复杂 。从某种意义上说,这是一种非常理论上的构造,它对程序的执行时间没有限制,KK是不可计算的。Levin的自定界程序提供了围绕此概念的简单解决方法,在该程序中,您仅考虑执行时间有限的程序(例如,在原始实例长度的常数范围内,这是该实例的下限)。需要写入每个符号的算法的复杂性)。

整个社区都在研究Kolmogorov的复杂性及其变体,另一个社区正在致力于无损压缩(我使用的整数示例在许多其他数据类型上都等效),我勉强摸索了表面,其他人可能会提高精度(Kolmogorov确实不是我的专长),但我希望这可以帮助您阐明问题,即使不一定能给您希望的答案:)


7

(只是我的评论的扩展)

(正如乔在回答中所指出的那样)香农-在其1948年的论文中,“ 通信的数学理论 ”提出了数据压缩理论,并确立了无损数据压缩的根本限制。这个极限称为熵率,用H表示。H的确切值取决于信息源-更具体地说,取决于信息源的统计性质。可以以接近H的压缩率无损压缩源。从数学上讲,不可能比H做得更好。

但是,可以压缩(没有那么有效)压缩没有高对比度边缘和平滑过渡的某些类型的图像(例如医学灰度图像)。

JPEG-LSJPEG2000似乎是无损存储医学图像的标准。有关压缩率的比较,请参见此表(JPEG-LS实现了稍微更好的压缩)。

使用“无损医学图像压缩”,我发现了以下文章可能会对您有所帮助:

最近(2011年)关于医学图像压缩技术的调查:二维医学图像压缩技术-一项调查

本文针对二维(2D)静态医学图像,介绍了基于DCT,DWT,ROI和神经网络的各种压缩技术的概述。

两种标准无损压缩算法的详细介绍:无损模式下的JPEG-LS和JPG2000:灰度医学图像的无损压缩-传统方法和最新方法的有效性

...测试了来自多个解剖区域,方式和供应商的三千六百七十九(3,679)张单帧灰度图像。...

另一项调查:当代医学图像压缩技术调查

编辑

也许您仍在想“图像的熵到底是什么?” ...好吧,这是图像中包含的信息量 ...但是为了更好地理解它,您应该阅读有关图像压缩中通常使用的三个阶段的内容:

  • 变换(例如离散小波变换)
  • 量化
  • 熵编码

您可以使用Google搜索有关图像压缩的教程或书籍(例如快速教程),或尝试观看在线技术视频(例如第16讲-图像和视频编码入门)。


7

将文件视为字符串。

您永远做不到比字符串的Kolmogorov复杂度更好的事情(这是根据Komogorov复杂度的定义)。

固定字符串长度。所以现在我们只看长度为n的字符串。

所有此类字符串的一半最多可以压缩1位。所有字符串的1/4最多可以压缩2位。所有此类字符串的1/8最多可以压缩3位。

因此,可以以2:1的比率压缩多少部分的字符串(图像,文件等)-很少。那么为什么压缩总是起作用?因为几乎真实的人实际尝试压缩的所有数据都是高度结构化的-它看起来并不像随机文件。查找数据的随机性越高,压缩就越困难。他们齐头并进。大多数字符串看起来都是随机的。

要查看实际效果,请使用一些随机过程生成一个随机文件。我的意思是一个非常非常随机的文件。现在尝试使用您喜欢的压缩算法对其进行压缩。几乎所有时间它都将保持不变或变大。

另一方面,有高度可压缩的琴弦。采取以下字符串:100000..000(1后跟一百万个零)。它的描述与前面的句子相符,计算机可以根据该描述(或非常类似的描述)对其进行重构。然而,这种描述远不及一百万个数字长。

事实是,具有该属性(高度可压缩)的字符串在所有可能的字符串中极为罕见。第二个事实是,几乎所有人类生成的数据都是超级结构,因此具有超级可压缩性。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.