您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 酒店餐饮 > 基于奇异值分解的图像压缩处理
电子科技大学第1页矩阵奇异值分解在图像压缩中的应用电子科技大学微固学院贾旺旺[摘要]本文首先介绍了矩阵的奇异值分解(SVD)定理,然后讨论了基于矩阵奇异值分解的图像压缩编码原理,最后文中给出了实例,并用matlab编程实现了图像的压缩和重构,发现随着图像压缩比的减小,图像传输时间增大,但重构后得到的图像失真度减小了。[关键词]奇异值分解图像压缩压缩比一.引言随着网络的快速发展,数据量的增长也十分迅速,这使人们必须想办法如何能以最少的存储空间,最大的传输效率来进行数据的存储和传输。如在宇航中,拍摄得到的图像文件一般都比较大且数量也很多,它的存储,传输和处理会受到一定的限制,因此图像压缩就显得格外重要。图像压缩技术就是要减少图像数据中的冗余信息从而以更加高效的格式存储和传输数据。图像压缩的基本方法包括无损压缩的行程长度编码,熵编码法;有损压缩的色度抽样法,变换编码,分形压缩等。近几年,基于矩阵奇异值分解的图像压缩方法也得到了很多学者的关注[1]。因为图像的像素点具有矩阵的结构,我们可以利用奇异值分解来对任意阶数的矩阵操作。本文就是利用了矩阵的奇异值分解,达到了图像压缩的目的。二.矩阵奇异值分解原理[2]引理1的非零特征值相同的特征值均为非负实数,则有设HHHHHHnmrAAAAAAAAAArankAArankArankCA,)3(,)2()()()()1()()()()(00)(00)()1(:1111111AArankArankAArankArankAxAxAxAxAxAxAxXknAxAkAArankHHHHHHHHH维,记为的解空间为设证明0),(),(),(),(0)2(AAAAAAHH电子科技大学第2页....,,,...,,0...0)...(0...0...,...,..)()()(0......0......)3(2121221122112211221111k21121复度相同的非零特征值的代数重与所以的维数的特征子空间的维数不大于的特征子空间同理可证:的维数特征子空间的维数不大于的特征子空间线性无关,全为零一组基底的特征子空间是设下面考虑其代数重数:的非零特征值的非零特征值也是同理可证:的非零特征值也是的特征值为的特征值是是AAAAVAAVAAVAAVAAAyAyAykkkykykykykykykAyAkAyAkAyAkAykAykAykVAAyyAAAAAAAAAAAAAAAAAAAAAAHHHHHHpppppppHpHHppHpHHHiiiiHiHiHiiiHmkHnrrH定义1的正奇异值。为的奇异值为则称的特征值为设AriAniAACAiiiinrrHnmr),...,2,1(,),...,2,1(.0......,121定理1.),...,2,1),,...,,(000n,...,,,iii2121nmr的复数(是满足而,其中得,使阶酉矩阵及阶酉矩阵个正奇异值,则存在的是设ridiagDVDUAVUmrACArr)2()()()1(00)(00)(0,000,,)0,...0,,...,,(000n11111112112122111122222221122122111)(212122221DDDDAVAVDAVUAVUDAVUUUUUUUAVDUAVAVAVAVAVAVAVDDAVAVDDAVAVAVAVAVAVAVAVCVCVVVVdiagDDAVVAAAHHHHHHHHHHHHHHHmrrHHHHHHHHHHHHHHHHHHHHHHHnrnrnnrrrHHHH阶正规矩阵为证明:电子科技大学第3页000)3(0,0022212DAVUAVUAVUAVHHHHHHH所以三.基于奇异值分解的图像压缩编码1.图像的压缩奇异值分解算法的一个重要的特征是可以降维。设A是nm型矩阵,表明A是n个m维向量,若A的秩为r我们可以通过奇异值分解,将A表示为r个m维向量和r个n维向量。若A的秩小于或远小于m和n,那么就可以通过奇异值分解达到降维的目的。以一幅有nn个像素点的图画为例,当n很大时,如果将这2n个像素点全部传送,虽然得到的图像失真度很低,但是传输的效率也会很低。而我们希望在误差允许范围内,尽可能快的传送数据,且在数据接收端能够根据得到的数据重构图像。另外,大的奇异值对图像的贡献大,小的奇异值对图像的贡献小,所以可以从r个正奇异值中选取前k)(rk个较大的特征值,再结合这k个奇异值对应的左右酉矩阵向量,来近似表示图像。那么需要传送的像素点就变成了)12(nk个,如果2)12(nnk,就会提高传输效率。定义图像压缩比为:)12(2nkn(3-1)显然,如果k值越小,则压缩比越大,需要传送的像素点也越小,因而传输速度越快,但是得到的图像失真度将越大,反之亦然。2.图像的重构为’和’,’’可以写为那么的特征值为列向量均为二维和其中以二维数组为例,如21222111212121212121,,,,,),,(00),(AAAA转置向量,同理,若A为nm型矩阵,那么在图像的数据接收端,接收到的是k个奇异值和k个m维列向量,k个n维列向量。近似有公式:电子科技大学第4页kiTiiivuA1,(3-2)那么就可以通过A近似作出图像。在matlab中读入图像的数据类型是uint8,而在矩阵中使用的数据类型是double,因此需要将图像数组转换为double类型,如果不转换,在对uint8进行加减时可能会产生错误[3]。我们都知道图像一般都是由三原色R,G,B构成的,matlab中提取出一幅图像的像素点也是由R,G,B三原色构成,它是一个三维数组,设为L,那么L(:,:,1)表示R原色构成的二维数组,元素值在[0,255],同理,L(:,:,2)表示G原色,L(:,:,3)表示B原色。通过转换为double数据类型,矩阵中每个元素值在[0,1]内。四.图像压缩和重构的matlab代码实现1.算法流程根据上述原理,文中选取了一幅JPG图片,命名为pic,像素为648*991。利用matlab先提取出了像素矩阵A;然后将这个三维数组拆分为三个二维数组,即R,G,B三个三原色矩阵,对这三个二维数组利用SVD方法,计算其奇异值;选取前k个奇异值及其对应的向量,进行图像压缩处理;最后重构图像。为了对比压缩效果和传输时间,分别令k=10,50,100。k为选取的奇异值的个数。下图给出了压缩和重构过程的流程图。开始提取图片pic的像素矩阵L将矩阵L拆分为三个二维矩阵对三个二维矩阵做SVD分解作出原图像,及R,G,B三原色图电子科技大学第5页选取k个奇异值和对应向量,利用(3-2)重构图像终止2.代码实现clcclearQL=imread('pic.jpg');L1=L(:,:,1);L2=L(:,:,2);L3=L(:,:,3);I1=im2double(L1);I2=im2double(L2);I3=im2double(L3);%maltab读入图像时,用`的是unit8型%显示原图像subplot(4,4,1);imshow(L);title('原图像');subplot(4,4,2);imshow(I1);title('原图像R原色');subplot(4,4,3);imshow(I2);title('原图像G原色');subplot(4,4,4);imshow(I3);title('原图像B原色');%做奇异值分解[u1,s1,v1]=svd(I1);[u2,s2,v2]=svd(I2);[u3,s3,v3]=svd(I3);%用来存储数据压缩后的三个矩阵C1=zeros(size(I1));C2=zeros(size(I2));C3=zeros(size(I3));k=10;%取前10个特征值%利用公式重构矩阵forj=1:kC1=C1+s1(j,j)*u1(:,j)*v1(:,j).';endforj=1:kC2=C2+s2(j,j)*u2(:,j)*v2(:,j).';endforj=1:kC3=C3+s3(j,j)*u3(:,j)*v3(:,j).';endR1=im2uint8(C1);%所占字节数较double型少电子科技大学第6页R2=im2uint8(C2);R3=im2uint8(C3);Q(:,:,1)=R1;Q(:,:,2)=R2;Q(:,:,3)=R3;%k=10压缩后图像subplot(4,4,5);imshow(Q,[]);title('压缩后的原图像');%显示压缩后的原图像subplot(4,4,6);imshow(C1);title('压缩后的原图像R原色');subplot(4,4,7);imshow(C2);title('压缩后的原图像G原色');subplot(4,4,8);imshow(C3);title('压缩后的原图像B原色');C1=zeros(size(I1));C2=zeros(size(I2));C3=zeros(size(I3));k=50;forj=1:kC1=C1+s1(j,j)*u1(:,j)*v1(:,j).';endforj=1:kC2=C2+s2(j,j)*u2(:,j)*v2(:,j).';endforj=1:kC3=C3+s3(j,j)*u3(:,j)*v3(:,j).';endR1=im2uint8(C1);R2=im2uint8(C2);R3=im2uint8(C3);Q(:,:,1)=R1;Q(:,:,2)=R2;Q(:,:,3)=R3;%k=50压缩后图像subplot(4,4,9);imshow(Q,[]);%显示压缩后的原图像subplot(4,4,10);imshow(C1);subplot(4,4,11);imshow(C2);subplot(4,4,12);imshow(C3);C1=zeros(size(I1));C2=zeros(size(I2));C3=zeros(size(I3));k=100;forj=1:kC1=C1+s1(j,j)*u1(:,j)*v1(:,j).';endforj=1:k电子科技大学第7页C2=C2+s2(j,j)*u2(:,j)*v2(:,j).';endforj=1:kC3=C3+s3(j,j)*u3(:,j)*v3(:,j).';endR1=im2uint8(C1);R2=im2uint8(C2);R3=im2uint8(C3);Q(:,:,1)=R1;Q(:,:,2)=R2;Q(:,:,3)=R3;%k=100压缩后图像subplot(4,4,13);imshow(Q,[]);%显示压缩后的原图像subplot(4,4,14);imshow(C1);subplot(4,4,15);imshow(C2);subplot(4,4,16);imshow(C3);3.结果分析由于原图像是一个648*991的图像,相当于矩阵为m=648,n=991。利用公式(3-1),压缩比可写为:)1(nmknm。那么当k=10,50,100时压缩比分别为92.3,83.7,16.39321。另外由matlab计算出图像传输时间(或称为图下所示:单位为秒。画出图像如。分别为像重构时间像压缩时间,不包括图728.13,003.13,521.12)321ttt电子科技大学第8页可以看出,随着压缩比的减小,图像
本文标题:基于奇异值分解的图像压缩处理
链接地址:https://www.777doc.com/doc-7104995 .html