K-SVD算法的图像去噪的实验一:引言现实中的图像在数字化和传输过程中由于常受到成像设备与外部环境噪声干扰等影响,从而降低了图像的质量,对图像的理解和解译造成了不小的困难,因此,在图像处理中,图像噪声抑制成为关键,也是后续图像的特征提取、分割、识别等工作的基础。噪声抑制技术的主要目标就是:在有效的去除噪声的同时保持纹理、边缘等细节信息。传统的图像噪声抑制的方法有空间滤波技术和变换域滤波技术。其中空间滤波技术主要包括均值滤波、中值滤波、Lee滤波等,这些方法虽然比较简单,且易于实现,但是会造成图像边缘和线性目标的模糊。变化域滤波技术主要包括小波变换、平稳小波、Bandelet变换、Curvelet变换和非下采样Contourlet变换等。这些变换域滤波相比经典空间滤波方法来说,图像的边缘及线性目标的保持能力有了很大的提高。但大都需要对变换域的系数做某种统计假设,而这些假设是经验性的,无理论依据。且噪声和图像边缘具有相似的频率特性,即都是高频信号。因此噪声抑制后的图像在均匀区域和边缘附近常有伪吉布斯效应。目前,一种新兴的“字典训练法”在图像处理中得到了广泛的研究和应用,其核心是字典的训练过程,称为K--SVD方法。此算法首先是由Aharon、Elad等人提出的。研究表明:K--SVD方法不仅可以有效的抑制加性高斯白噪声,而且可以较好的保留边缘和纹理等重要信息,尤其是对纹理图像的结果更好。最重要的是此方法具有很好的适应性。本文首先诠释下K--SVD算法的基本思想,然后通过几个实验对比下该算法与之前的算法的去噪效果。二:K--SVD算法的基本思想1:K-均值因为K-SVD算法是由K-均值扩展而来,先简单介绍K-均值算法。K-均值算法要解决的问题是:求解一个包括K个代码的码本,求在此码本上,根据最近邻分配法则,对包括N个信号的信号集1{y}NiiY,NK进行分类,使得最佳分类的问题。此时,Y中各向量被归类于与之距离最小的代码所代表的类中,用此代码压缩或描述类中的向量误差最小。矢量量化(VQ)中,码本的训练可以用典型的K-均值算法实现。令12[c,c,...,c]KC为码本,C中的列ci为码本中的代码。当码本C给定时,每个信号用最近(2l范数意义下)的一个代码表示。也就是说,iiyCx,其中ijxe是自然基中的一个向量(除第j个值为1外,其他的值都是0)。j满足:2222,ijikkjyCeyCe(1)这相当于稀疏编码的一个特例:只用一个原子来表示信号iy,同时强制系数等于1,这种表示方法中,iy的方差为2ie=22iiyCe,对Y的量化误差由下式确定2221KiFiEeYCX(2)K-均值的目标函数如下式2,X{}minFCYCXs.ti,ikxe(3)算法的实现是一个迭代的过程,包括俩步:(1)求X,本质上就是系数编码;(2)更新码本。2:K-SVD算法K-SVD算法思想是用K个原子的线性组合来近似信号iy。从线性组合的角度来看,K-SVD训练算法的稀疏模型可表示为0argminixxxs.t.iiyDx常写成220argminiiixxyDxx(4)其中0ixLN为稀疏表示中非零分量的数量的上限。若满足上式条件,则称其为,,LD--sparseland信号。由以上可知K-SVD算法的原理为在一组基下,获得信号y的一个近似稀疏表示x,且x满足尽可能好的恢复信号x。具体如(4)。(4)式的求解是一个迭代过程。首先,假设字典D是固定的,用OMP、BP等算法可以找到字典D上,Y的稀疏表示的稀疏矩阵D;然后再根据系数矩阵X找到更好的字典D字典的更新时逐列进行的,首先假设稀疏矩阵X和字典D都是固定的,将要进行更新字典的第k列kd,令系数矩阵X中kd所对应的第k行为kTx则222221(Y)ddKjjkkkkjTjTkTkkkTkRkRFFFjjkYDXYdxdxxExEdx(5)上式中DX被分解成K个秩为1的矩阵的和。按照假设其中K-1项是固定,所剩下的一个,也就是要处理的第K个。kRE做SVD分解则kTREUV令kd为U的第一列,则kd为dk更新的结果,同时,V的第一列和(1,1)的乘积更新kTx,再逐列更新完成后用新的字典D做系数分解,并判断是否达到停止条件,以决定迭代是否继续。实际应用中,一幅图像原图X,受到加性噪声n污染,得到观测图像Y,即有关系式YXn。假设字典已知,ijR是图像的重叠块提取操作符,则X的每一个块向量ijX=ijRX属于,,LD--sparseland,且参数,,LD,则(4)式推广为22202{,}argminijijijijijXxXYuxDxRX(6)实际操作中(6)式的求解是由最大后验概率得到估计得到的,且转化成,首先进行稀疏编码,具体如下:202argminijijijijijxuxDxRX(7)然后把ijx带入(6)式求解X,具体如下2222argminijijijXXYDxRX(8)从(8)式中可以得到X的解析表达式,如下1TTijijijijijijXIRRYRDx(9)I是个单位举证。上述方法是在抑制过完备字典D的情况下进行的,其中D可以各种变换矩阵,如DCT变换,但是该变换矩阵不会随着带处理图像的变化而变化,常会出现边缘模糊等情况。K-SVD算法呢却是根据待处理图像进行字典训练,得到字典D,这个过程成为字典训练。三:实验过程先给干净的lena图加上了segma=25的高斯白噪声,实验中分别用了DCT和全局训练字典法和K-SVD算法进行了结果的对面。实验结果如下:(图1,用的是DCT变换去噪)图(2,DCT生成字典)图(3,使用globaltraineddictionary)图(4)图(5,使用K-SVD算法去噪)图(6K-SVD生成的字典)从上述的图片中的实验结果的参数可以看出,K-SVD算法效果比其他的俩种要好。参考文献[1]数字图像处理(第三版)冈萨雷斯[2]K-SVD:AnAlgorithmForDenoisingOvercompleteDictionariesForSparseRepresentation--IEEE,2006.MichalAharon,MichaelEladandAlfredBruckstein.[3]ImageDenoisingViaLearnedDictionariesandSparserepresentation