构建DCT过完备字典

本文介绍了DCT字典的概念,强调其非过完备性质。为了构造过完备字典,文章详细阐述了过完备字典的要求,并提出通过DCT变换后上采样和调制的方法。讨论了网络上MATLAB代码存在的问题,如公式错误和归一化时机不当,并给出了改进意见。最后,提供了构建DCT过完备字典的程序,但未进行列归一化,适用于稀疏分解和字典学习前的初始化。
摘要由CSDN通过智能技术生成

1. 什么是DCT字典

  参考《离散余弦变换(DCT)的来龙去脉》,所谓 DCT 字典就是对图像 F 进行 DCT 余弦变换时所采用的变换矩阵 A 。但是有一点需要注意,这个矩阵是一个方阵,也就是说不是一个过完备字典(过完备字典要求矩阵的行数远远小于矩阵的列数)。

2. 构成过完备字典的要求

  过完备原子库通常要求具有广泛的时频特性以达到能够灵活反映图像特征的目的,对于字典中的单个原子 g(t)L2(R) 进行平移、伸缩、旋转、调制就可以生成过完备原子库,对 g(t) 有以下要求:

  (1) 连续可微的实函数

  (2) O(1/(t2+1))

  (3) 范数为 1,即 ||g||=1

  (4) g(t)dt0,g(0)0

3. 如何从字典构成过完备字典

   对于 DCT 变换后所获得的完备字典,采用上采样和调制的方法将其扩展成为过完备字典,具体的做法是将得到的完备字典对其频率上做更加精细的遍历和抽样,再乘以各种余弦进行调制,从而获得一个新的过完备字典。

3.1 网络上的参考程序

  对于产生针对 8*8大小图片的, 64*256 大小的 DCT 字典,在网上有如下 Matlab 代码,但是这个代码是有问题的!

DCT=zeros8,16); 
Pn = 16; bb = 8;
for k=0:1:Pn-1, 
     V=cos[0:1:bb-1]'*k*pi/16); 
     if k>0, V=V-mean(V); end; 
     DCT(:,k+1)=V/norm(V); 
end; 
DCT=kron(DCT,DCT); 

   上面的代码中,V=cos([0:1:bb-1]'*k*pi/16);相当于对 DCT 字典进行采样,但是这里需要注意的是,根据 DCT 变换的公式可知,本来值应该针对奇数点进行计算,但是在这里对里面的偶数也进行了计算,所以相当于一个分频采样;之后的kron(A,B)相当于用A中的每一个元素乘以B矩阵,在重新构成的一个矩阵,实际上就是两个余弦函数相乘,所以可以理解为对于原始字典的一种调制。其中计算减去均值并处以方差的原因在于,在使用K-SVD训练字典的过程中,需要首先将字典按列归一化,而这一步可以理解为按列归一化。总的来说,上面构成过完备字典的过程就是首先对DCT字典进行分频采样,在进行调制,最终获得了 DCT 过完备字典。

  但是!说过的,上面的代码是有问题的!问题在于以下两点,还有一点是可以进行改进的:

  (1) 公式错误,在计算DCT字典的过程中忘了要在前面乘以系数 1N 和系数 2N

  (2) 归一化做早了。如果DCT过完备字典只是用来作为 K-SVD 的初始化字典,那么要对初始化的字典按列归一化,但是上面的程序在构建DCT字典的时候进行归一化,之后用归一化的字典再进行 kron 积运算,这样运算之后的字典的每一列显然不是均值为 0 方差为 1 的。下面举例说明,假设矩阵 A 和矩阵 B 的每一列均已经归一化完成,且矩阵 A 和矩阵 B 表示为如下形式

A=[a11a21a12
  • 18
    点赞
  • 109
    收藏
    觉得还不错? 一键收藏
  • 23
    评论
评论 23
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值