奇异值分解在图像压缩中的应用..docx
《奇异值分解在图像压缩中的应用..docx》由会员分享,可在线阅读,更多相关《奇异值分解在图像压缩中的应用..docx(7页珍藏版)》请在冰豆网上搜索。
矩阵分析课程作业
题目:
奇异值分解在图像压缩中的应用
专业:
学号:
姓名:
奇异值分解与图像压缩
一、问题描述与解决方案
(此处分两部分,第一部分介绍问题背景和具体问题描述,第二部分介绍此问题的解决方法,引出矩阵分析内容)
随着数码设备成像能力越来越强大,图像所占的内存需求也随之增大,伴随着图像传输也遇到相似问题,图像压缩是解决这些问题的一种办法。
图像压缩以矩阵论为基础,利用奇异值分解在图像处理中应用。
假定一幅图像有个像素,如果将这个数据一起传送,往往会显得数据量很大。
因此我们希望能够改传送另外一些比较少的数据,在接收端利用这些数据重构原图像。
假定对矩阵进行奇异值分解,便得到,其中,奇异值从大到小的顺序排列。
如果从中选取个大奇异值以及这些对应的左右奇异向量逼近原图像,便可以共使用个数值取代原来的个图像数据。
最终图像的压缩比率为:
二、奇异值分解
(此处介绍对应矩阵分析内容和使用方法)
对于矩阵进行奇异值分解(SVD分解),再利用SVD分解对于图像压缩的应用。
SVD分解可以对于一个一般矩阵使用,将其分解为3个特殊的矩阵,公式如下:
其中,若为一个矩阵,则分解后的三个矩阵:
为酉矩阵;
为正定对角矩阵;
为的共轭转置,是酉矩阵。
酉矩阵是指其共轭转置与逆矩阵相同的矩阵。
其中,,并且,是矩阵的奇异值。
同特征值相似,奇异值也是从大到小排列,且减小特别快。
实际上我们可以用前个奇异值就能基本近似表示整个矩阵。
则可以得到如下的近似奇异值分解方法。
若原Σ的秩为r,则我们只取前k(k为矩阵;
为正定对角矩阵;
为矩阵。
可以看出,如此做以后,分解后的矩阵秩更小,但最大程度保留了原矩阵的特征。
三、SVD分解的MATLAB实现及仿真结果
(此处为具体实现过程,以及问题的解决情况或程度,使用代码的附代码,可以是matlab、python或mathematica)
原图
K=10
K=50
K=100
K=300
从仿真结果可以看出k越小图像越模糊,但压缩率越高,k越大,图片越清晰,但是压缩率也变小了。
(问题解决情况或解决程度说明)
实现代码:
clc;closeall;
a=imread('lena.png');
a=double(a);
[s,v,d]=svd(a);
re=s(:
1:
10)*v(1:
10,1:
10)*d(:
1:
10)';
figure;
imshow(mat2gray(re));
imwrite(mat2gray(re),'lena1.jpg')
re=s(:
1:
50)*v(1:
50,1:
50)*d(:
1:
50)';
figure;
imshow(mat2gray(re));
imwrite(mat2gray(re),'lena2.jpg')
re=s(:
1:
100)*v(1:
100,1:
100)*d(:
1:
100)';
figure;
imshow(mat2gray(re));
imwrite(mat2gray(re),'lena3.jpg')
re=s(:
1:
300)*v(1:
300,1:
300)*d(:
1:
300)';
figure;
imshow(mat2gray(re));
imwrite(mat2gray(re),'lena4.jpg')
四、参考文献
[1]
[2]
总体要求:
问题背景介绍简明,问题陈述清晰全面,解决方案表达清楚,求解过程详细严谨,问题得到解决的程度或效果比较要科学,使用代码可行。
杜绝学术不端,引用或参考文献必须在文末注明。