2012-02-19 147 views
4

注 - 可能与软件相关的计算机组织更多,不确定。矩阵如何存储在内存中?

我想了解有关数据压缩的东西,说的JPEG照片。本质上,一个非常密集的矩阵被转换(通过离散余弦变换)为一个更稀疏的矩阵。据说这是存储的这个稀疏矩阵。看一看此链接:

http://en.wikipedia.org/wiki/JPEG

比较原始的8×8子块的图像例如以矩阵“B”,其被转化成具有较低的整体幅度值和更零贯穿。矩阵B如何存储以便在原始矩阵上节省更多内存?

原始矩阵显然需要8x8(条目数)x 8位/条目,因为值的范围可以从0到255之间随机变化。好的,所以我认为很清楚我们需要64字节的内存。另一方面,矩阵B,嗯。我能想到的最佳案例情景是值范围从-26到+5,因此最多一个条目(如-26)需要6位(5位构成26,我猜为1位)。那么你可以存储8x8x6位= 48字节。

另一种可能性我看到的是,矩阵被存储在从左上角的一个“之字形”的命令。然后,我们可以指定开始和结束地址,并沿着对角线继续存储,直到我们只剩下零。假设这是一台32位机器;那么2个地址(开始+结束)将构成8个字节;对于每个6位的其他非零入口,也就是说,我们必须沿着几乎所有的顶部对角线存储28个元素的总和。总共这个方案需要29个字节。

总结我的问题:如果JPEG等图像编码器都声称采用的算法,使图像矩阵密度较低,以节省空间,这是怎么额外空间在我的硬盘实现?

干杯

+0

维基百科文章的最下一节“熵编码”,是关于这一点。您可能需要查看该部分并询问您不了解的内容。 – 2012-02-19 01:54:27

+0

好吧,它实际上将以该之字形模式存储。现在我的问题每个条目还会被使用8位,或者我们可以移动到6位? – JDS 2012-02-19 01:59:19

+0

霍夫曼编码可以处理之字形模式,因为它取决于发生的频率,而不是它们是连续的。 – rasmus 2012-02-19 02:01:36

回答

1

,因为它说的“熵编码”使用Z字形图案,连同RLE这将减少已尺寸许多情况下。但是,就我所知,DCT本身并没有给出一个稀疏矩阵。但它通常会增强矩阵的熵。这是压缩变得有损的点:输入矩阵用DCT传输,然后量化值,然后使用霍夫曼编码。

2

将DCT需要与采取的零点/高频出现的其它优点压缩方案陪同。一个简单的例子是运行长度编码。

JPEG使用霍夫曼编码的变体。

1

最简单的压缩将需要符号(零)的重复序列的优势。在存储矩阵可以这个样子(12月系统假设)

0000000000000100000000000210000000000004301000300000000004 

压缩之后,它可能看起来像这样

(0,13)1(0,11)21(0,12)43010003(0,11)4 
(Symbol,Count)... 
+0

别的东西我没有考虑过,谢谢你 – JDS 2012-02-21 03:41:58

1

正如我的下架,JPEG只压缩,它也丢弃数据。在8x8块传输到频繁域之后,它会丢失重要(高频率)数据,这意味着它只需要保存重要的6x6甚至4x4数据。它可以有再高压缩率不丢失方法(如GIF)