KLT 与 DCT 基础限制错误

信息处理 图像处理 matlab 估计 dct
2022-02-14 13:35:34

我想对 256x256 Lena 图像的 8 长度向量实现 8x8 DCT 和 8x8 KLT 矩阵(例如,每行图像有 32 个向量 256/8 = 32,所有行 256x32 = 8192)。我进行特征分析以在 MATLAB 中查找 KLT 矩阵:

co = corr(I); % I is Lena image
co = co(1:8,1:8); % 8x8 autocorrelatin matrix
[V,D] = eig(co); % eigen analysis
eigval = diag(D); % eigen values
[desc, ind] = sort(eigval,'descend'); % sorting eigen values for optimum KLT
eigvec = V(:,ind); %sorted eigenvectors = 8x8 KLT matrix
y = transpose(eigvec*transpose(I(t,m:(m+7)))); % KLT matrix*8-lenght vectors-- t=1:256 and m=1:8:256 iterations of for loop
xtilda = transpose(inv(eigvec)*transpose(y)); % inverse KLT matrix*basis restricted vectors
MSE(k) = MSE(k) + immse(I(t,m:(m+7)),xtilda); % MSE between restricted vector and original vector, k iteration of for loop
MSEfor32vec(g) = mean(MSE); % average error for one row=32 vectors, g iteration of for loop

以同样的方式,我使用dctmtx命令计算了 8x8 DCT 矩阵的MSEfor32vec

当我得到结果时,我期待 KLT 的错误更少;但 DCT 的误差较小。在大多数信号处理书籍中,得出的结论是 KLT 必须具有较小的误差。我的错误是什么,或者如果我的解决方案是正确的,我在书中遗漏了什么?我试图以最好的方式解释我的问题,如果不是很清楚,请问我..

1个回答

自然图像可能看起来很复杂。然而,相对于所有可能的图像(),人类可解释的图像集相对有限。有一种观点认为可以更好地概括它们的结构。事实上,无损压缩可以达到 2-3 的因子比,而有损压缩可以达到 8-16 左右,几乎没有可察觉的损失。24xmillions of pixels

目前大多数图像压缩方法(据我所知)都是基于某种插值/外插方案。基本原理是预测一些样本,并以更少的比特(无损)或更低的精度(有损)对希望更小的预测误差进行编码。这些方案既可以应用于原始空间域,也可以应用于变换空间:固定基(傅立叶、离散余弦变换、小波等)、自适应基(PCA、NMF、KLT)、学习字典、机器学习或人工智能数据库。

适应性听起来不错。因此可以适应图像特征。全球范围内的图像?为什么不呢,但计算奖可能很重要:特征算法可以是可以将尺寸减小到更小的图像块。您必须计算每个补丁的特征向量,并传递其二阶统计信息(协方差)。然后,需要更少的内存,这可以很容易地并行化。在某些情况下,自适应碱基被认为是打包信息的最佳选择。但它们伴随着压缩的代价。由于基数因补丁而异,因此应该对特征向量进行编码并同时传输它们。对于传统的速率/失真率,这是不利的。O(N3)

那么是否有足够好的固定基数?在众多选择中,事实证明,无论是理论上还是实践上,一个离散余弦变换 DCT-II 都可以做得很好。N. Ahmed等人在 1974 年的一篇论文中庆祝了这一点。:离散余弦变换 它更适合小块,并且具有快速算法。还有其他选择和调整,但现在让我们保持简单。

因此,假设一个人正在处理补丁和计算协方差,DCT 在能量上应该接近 KLT,并且在某种程度上更好,因为不需要编码向量。

以下是与 DCT 属性相关的先前答案