原子:信号的基本李物构成成分,比如一个长为N的列向量;
字典:许多原子的排序集合,一个N*T的矩阵,如果T>N(列数大于行数),则为过完备或冗余字典。信号稀疏之前在压缩感知学习的时候有介绍过,就是信号的非零值很少,这个概念主要应用与信号处理领域,自然信号中主要是低频信息,高频信息大多就是噪声了,在图像中应用滤波器滤除高频成分也就是去噪了。具体怎么完成,就要依靠下面介绍的KSVD。
KSVD的目的就是找到最稀疏的稀疏矩阵X,使得原始矩阵(Y)有最稀疏的表示。假设现在有了一个N*T的过完备字典 D,一个要表示的对象y(要还原的图像),求一套系数x,使得y=Dx,这里y是一个已知的长为N的列向量,x是一个未知的长为T的列向量,解方程。这是一个T个未知数,N个方程的方程组,T>N,所以是有无穷多解,但是针对问题目标我们会给这个方程添加约束条件,比如在图像去噪中,我们想要x最稀疏,就是非零值最少,这个在已知D和y求解x的过程就是稀疏编码。
稀疏编码求解的模型就是:x = argminxnorm(y − Dx, 2)2, s.t.norm(x, 1)≤ε。这里又被分为了两种可能,D已知情况下可以用OMP算法(大意是先找到D和y最接近的一个原子D(m),求出合适的系数x(m),新的y'=D(m) * x(m),再找下一个最接近的原子,直到找完合适的x);当D未知时就变成了矩阵分解问题,比如MOD算法的路子:Sparse Coding和Dictionary Update,两步走,第一步固定D,更新x:x = argminxnorm(y − Ax, 2)2, s.t.norm(x, 1)≤k;第二步更新D: D = argminxnorm(y − Ax, 2)2很像EM算法。
KSVD和MOD最大的不同就是K每次只更新D当中的一个原子,就是D矩阵当中的某一列,因为矩阵相乘可以看做是前一个矩阵的列向量分别乘后一个矩阵的行向量。Loss函数在这里可以进行转化:
而SVD就用在对E的分解,和上面的MOD类似,也是迭代察扰皮进行就是每次更改D的原子。就比如败差说KSVD用于图像去噪的话,假如有一个零均值高斯白噪声,即 n ∼ N(0, σ) ,σ是噪声的标准差,有噪声的图像为 z = y + n ,目的是从信号 z 中恢复出原始无噪信号 y,通过最大后验概率,求得目标函数的解,即可恢复出y:x = argminx∥z−Dx∥22, s.t.∥x∥0 ≤ T 。其中T依赖于 ε 和 σ 。为方便优化计算,实际 *** 作中往往转化成: x = argminx∥z−Dx∥22+ μ∥x∥0选取恰当的μ可以让上面两式等价。
在KSVD算法中字典的初始化是选取原始数据中的K个原子组成知纤字典,那这样是否就意味搭埋仿着原始数据的样本数必须要大于字典的原子数?即:假设Y(n×m)是原始液答数据,D(n×k)是字典,X(k×m)是稀疏系数,是否必须m>k,才可以初
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)