矩阵如何存储在内存中?

时间:2012-02-19 01:48:17

标签: memory matrix compression jpeg

注意 - 可能与计算机组织有关,而不是软件,不确定。

我正在尝试理解与数据压缩相关的内容,例如jpeg照片。基本上,非常密集的矩阵被转换(通过离散余弦变换)到更稀疏的矩阵中。据说这是存储的稀疏矩阵。看看这个链接:

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

将原始的8x8子块图像示例与矩阵“B”进行比较,矩阵“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和其他图像编码器声称通过使用算法来节省空间以使图像矩阵不那么密集,那么如何在我的硬盘中实现这个额外的空间?

干杯

4 个答案:

答案 0 :(得分:2)

dct需要伴随其他利用零/高频率出现的压缩方案。一个简单的例子是运行长度编码。

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

答案 1 :(得分:1)

正如它在“熵编码”中所说的那样,使用Z字形图案以及RLE,在许多情况下,RLE已经减小了尺寸。但是,据我所知,DCT本身并没有提供稀疏矩阵。但它通常会增强矩阵的熵。这是compressen变得有损的点:输入矩阵用DCT传输,然后量化量化然后使用霍夫曼编码。

答案 2 :(得分:1)

最简单的压缩将利用重复的符号序列(零)。内存中的矩阵可能如下所示(假设在dec系统中)

0000000000000100000000000210000000000004301000300000000004

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

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

答案 3 :(得分:1)

作为我的立场,JPEG仅在压缩时,它也会丢弃数据。在8x8块传输到频域之后,它会丢弃重要(高频)数据,这意味着它只需要保存重要的6x6甚至4x4数据。它可以具有更高的压缩率然后是非丢失方法(如gif)