图像压缩 - 离散余弦变换后的锯齿形
Posted
技术标签:
【中文标题】图像压缩 - 离散余弦变换后的锯齿形【英文标题】:Image compressing - zigzag after Discrete Cosine Transform 【发布时间】:2018-09-05 21:20:29 【问题描述】:我正在尝试制作压缩相机图像的应用程序。我有垫子图像和 3 个单独的通道数组。我发现了一些关于离散余弦变换 DCT 的内容,并读到我应该做 zigzag 算法 (I've found something with zigzag here). 我知道 DCT 制作输出数组,但我看不出 zigzag 是否也制作了一个以及在哪里制作。 也许有一些带有输入和输出数组的 zigzag 算法(或带 zigzag 的 dct)的简单示例?
【问题讨论】:
【参考方案1】:图片来自this wikipedia article。
TL,DR:见下面的粗体部分。
从像素值的二维数组开始。有 64 个字节的信息。
在应用偏移量并计算 DCT 后,输出是频率系数的二维数组。所以现在有 64 个浮点值。
以下是 JPEG 压缩工作原理的关键。阵列左上角的频率系数(低频)比阵列右下角的频率系数(高频)对图像质量的影响要大得多。
所以下一步是对数组应用量化。量化为数组中的每个值分配可变数量的位。左上角的值获得更多位,右下角的值获得更少的位。量化后的数组是这样的。
请注意,右下角的许多值现在为零。所以最后我们到达了之字形,它看起来像这样:
之字形的目的是将量化 DCT 系数的二维数组转换为一维数组,其中第一个元素来自二维数组的左上角,后面的元素来自右下角。 曲折之后的数组是这样的
-26 -3 0 -3 -2 -6 2 -4 1 -3 1 1 5 1 2 -1 1 -1 2 0 0 0 0 0 -1 -1 0 0 ...
...
全部为 0。根据所需的压缩程度,可以在任意点截断数组。在此示例中,在 19 个元素之后对数组进行切分是质量和压缩之间的良好折衷。因此只有前 19 个元素会存储在 JPEG 文件中,而不是存储原始的 64 个原始像素值。
请注意,在切割锯齿形输出后还有额外的压缩步骤。这些在链接的文章中有所描述。
【讨论】:
砍你的意思是删除那些0或别的什么?它仍然是 1x64 数组吗?如果我想再次显示图像,我必须向后做所有这些吗?量化就像压缩级别? 我的意思是只有数组的第一部分(例如只有前 19 个元素)实际存储在文件中。其余的被忽略,这意味着一些信息丢失,并且无法从文件中恢复。是的,要解压,所有步骤都必须倒退。是的,量化是一种压缩级别(同样会丢失一些信息)。以上是关于图像压缩 - 离散余弦变换后的锯齿形的主要内容,如果未能解决你的问题,请参考以下文章