我正在研究JPEG图像压缩,我研究了量化矩阵的使用,这通常是在文献中给出的,但我想编写程序,这样当我改变矩阵时,每个像素所代表的比特数也应该变化,这样我就可以绘制每个像素的比特数相对于PSNR。
我看到的基本量化矩阵定义如下:
qm = [16 11 10 16 24 40 51 61; 12 12 14 19 26 58 60 55;...
14 13 16 24 40 57 69 56; 14 17 22 29 51 87 80 62; ...
18 22 37 56 68 109 103 77; 24 35 55 64 81 104 113 92;...
49 64 78 87 103 121 120 101; 72 92 95 98 112 100 103 99]; 如何概括生成量化矩阵?
发布于 2015-03-23 17:29:43
据我所见,没有计算量化矩阵的“一般”方法。量化矩阵是以这样一种方式创建的,经过多次实验,这些数字是最好的,提供一个良好的信噪比和提供良好的感知质量利用一个缩小的文件大小。取决于你和谁交谈,或者你使用的是什么产品,有些人使用自己的量化矩阵。例如,Adobe在Photoshop等产品中使用自己的量化矩阵,而生成算法是一个商业秘密--我们不知道它们是如何导出量化矩阵的。
然而,目前有一个标准已经存在了一段时间.可能是自从JPEG被提出以后..。据我所知,这有一个计算量化矩阵的算法。这取决于所谓的Q因子或质量因素。这个标准来自于独立JPEG组或IJG。
基本算法如下。您首先提供一个质量因子Q,从1到100。1是“最贫穷”的质量,而100是“最高”的质量。50是默认设置。接下来,您需要定义基量化矩阵。我们称之为Tb的基本IJG量化矩阵如下:
Tb =
16 11 10 16 24 40 51 61
12 12 14 19 26 58 60 55
14 13 16 24 40 57 69 56
14 17 22 29 51 87 80 62
18 22 37 56 68 109 103 77
24 35 55 64 81 104 113 92
49 64 78 87 103 121 120 101
72 92 95 98 112 100 103 99您可能已经注意到,这是与您在问题中定义的相同的矩阵。这是因为你引用的矩阵来自IJG。有了这个矩阵之后,可以通过以下步骤找到输出的量化矩阵:
S,使如果是(Q < 50),则是S = 5000/Q,否则是S = 200 – 2*Q。i和列j的每个位置的输出量化矩阵j是这样的Ts[i,j] = floor((S * Tb[i,j] + 50) / 100)。注意输出是四舍五入的,矩阵中的所有系数都是整数。另外,如果您指定了Q = 50的质量因子,您应该得到相同的基量化矩阵(即不变),并且是默认的矩阵。
因此,一个非常简单的MATLAB程序可以这样做:
Q = 80; %// Define Q factor
%// Define base quantization matrix
Tb = [16 11 10 16 24 40 51 61; 12 12 14 19 26 58 60 55; ...
14 13 16 24 40 57 69 56; 14 17 22 29 51 87 80 62; ...
18 22 37 56 68 109 103 77; 24 35 55 64 81 104 113 92; ...
49 64 78 87 103 121 120 101; 72 92 95 98 112 100 103 99];
%// Determine S
if (Q < 50)
S = 5000/Q;
else
S = 200 - 2*Q;
end
Ts = floor((S*Tb + 50) / 100);
Ts(Ts == 0) = 1; % // Prevent divide by 0 error代码的最后一行非常重要。您可能会遇到这样一种情况,即指定质量因数将导致0元素。这意味着当你使用量化矩阵时,问题会因为除以零误差而浮出水面。因此,最后的检查将是将这0元素设置为1,这样效果就是忽略了输出结果中的这些位置。
现在,作为一个例子,如果我们设置Q = 80,我们可以得到:
Ts =
6 4 4 6 10 16 20 24
5 5 6 8 10 23 24 22
6 5 6 10 16 23 28 22
6 7 9 12 20 35 32 25
7 9 15 22 27 44 41 31
10 14 22 26 32 42 45 37
20 26 31 35 41 48 48 40
29 37 38 39 45 40 41 40因此,设置相应的质量因数,使用它压缩您的图像,然后您可以检查看看什么是PSNR或信噪比是从压缩的结果。您应该看到,质量越低,PSNR或信噪比应该越低。
关于更多信息,下面是我参考的一组很好的幻灯片,它们更详细地讨论了JPEG量化矩阵/表:
pres.pdf
祝好运!
https://stackoverflow.com/questions/29215879
复制相似问题