image-processing - DCT 压缩 - block 大小,选择系数

标签 image-processing compression signal-processing dct

我试图了解块大小的影响以及在 DCT 压缩中选择系数的最佳策略。
基本上我想问一下我在这里写了什么:

Video Compression: What is discrete cosine transform?

让我们假设最原始的压缩。制作图像块。对每个博客执行 DCT 并将一些系数归零。

据我了解,块越小越好。
较小的块意味着像素更相关,因此 DCT 频谱中的能量更“紧凑”。在快速变化的图像(高频)中应该更加强调。

假设我们将一定百分比的系数归零,什么会导致最佳图像质量,小块还是大块?
假设我们保持 10%、25%、50%、75%,你会说这是不同百分比的不同答案吗?

另一个问题是如何选择保持不变的系数。
假设我必须根据位置而不是能量做出决定。
你会从左上角拿一个正方形吗?
我已经平均了 DCT 频谱中的许多块,并得出结论,最好的方法是从左上角取一个三角形。你怎么认为?

希望我们能进行有效的讨论。

最佳答案

您问题的本质似乎与图像质量有关。已经有大量关于该主题的文献,结果是图像质量很难确定。

像信噪比 (SNR) 和均方误差 (MSE) 这样的标准数学误差度量可以给出定量的答案,但众所周知,这些与主观观众意见的相关性不高,这必须是我们的最终权威。没有其他方法,即使是那些基于观看者心理视觉模型的方法(例如,SA Karunasekera 和 NG Kingsbury,“基于人类视觉敏感性的图像块伪影失真测量”,IEEE Trans. on Image Proc. vol. 4 ,第 6 期,1995 年 6 月,第 713 – 724 页;以及 M. Miyahara、K. Kotani 和 VR Algazi,“图像编码的客观图像质量等级 (PQS)”,IEEE Trans. on Comm. vol. 46, No. 9, Sept. 1998, pp. 1215 –1226),已经证明它们比 SNR 更好。

此外,当您改变图像类型(线条图、卡通、照片、肖像等)时,某些类型的压缩失真变得更加明显。蚊子噪声在一张图像中可能令人反感,而楼梯噪声可能是另一张图像的罪魁祸首。

简而言之,对于您的问题“什么会导致最佳图像质量?”没有轻而易举的答案。

话虽如此,我们可以说一些有关 DCT 的事情。块的 DCT 中的像素从左上角 [(0,0)->(0,1)->(1,0)->(2) 之字形图案中从低变化到高变化,0)->(1,1)->(0,2)->etc.],作为您的三角形选择镜像。一个像素离左上角越近,其中包含的信息越平滑[实际上,(0,0) DCT值就是整个块的平均值],离那个角越远,得到的信息就越平滑你会得到“高频”细节。越靠近图像的顶部和左侧,该 DCT 系数代表的水平和垂直细节越多,并且越靠近块的对角线,您将拥有的对角线细节越多。

简而言之,有损压缩通常需要丢弃一些肉眼无法察觉的“细节”。 (丢弃“更平滑”的 DCT 值会导致严重失真。)丢弃的 DCT 值越多,压缩比就越大,但也会引起更大的失真。

至于块大小,这一切都取决于。块中的差异和细节越多,丢弃系数的损失就越多。一些压缩算法在同一图像内自适应地使用不同的块大小,以便高细节区域接收更多和更小的块,而平滑区域接收更少和更大的块。

对于使用单个块大小的算法,8x8、16x16 和 32x32 是 JPEG 和 MPEG 等常见的算法。压缩它们所需的处理将小于自适应块大小,但质量通常也会较低。

关于image-processing - DCT 压缩 - block 大小,选择系数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1955663/

相关文章:

ios - 将线性转换为 Apple Display P3 色彩空间的方程式,反之亦然

python - 简单黑白图像的 bool 矩阵

android - Android 手机上的采样率

c# - NAudio算法播放频率可以实时平滑变化的正弦波

java - 将 BufferedImage 转换为另一种类型

android - OpenCV转换每个像素的颜色

algorithm - 如何制作 Zip 炸弹?

java - java中BMP图像的压缩与解压

c++ - Zlib 压缩输入大于原始输入字符字符串?

audio - 分别对立体声信号的两个 channel 应用 FFT?