memory - 矩阵如何存储在内存中?

标签 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 和其他图像编码器声称通过使用算法来降低图像矩阵的密度来节省空间,那么我的硬盘中如何实现这些额外的空间?

干杯

最佳答案

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

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

关于memory - 矩阵如何存储在内存中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9345935/

相关文章:

c# - 通过 TCP 套接字发送和接收压缩数据

c - 变量声明的行为如何?

java - 减少 ToStringBuilder (apache commons) 的内存使用?

使用命名共享内存的 C++ 问题

c - 将带有 float 的txt文件读入二维矩阵

matlab - 内部矩阵维度必须一致

r - 列对的矩阵平均值

java - 字符串压缩: Passing Object Through URL

performance - 访问各种缓存和主存的大概成本?

php - 如何用php压缩站点地图