奇异值分解与图像压缩
来源:互联网 发布:6080软件下载 编辑:程序博客网 时间:2024/05/17 07:56
本文是叙述对于矩阵进行奇异值分解(SVD分解的方法),后面有利用SVD分解对于图像压缩的应用,代码使用matlab语言。
SVD分解可以对于一个一般矩阵使用,将其分解为3个特殊的矩阵,公式如下:
其中,若M为一个m*n (m<n) 矩阵,则分解后的三个矩阵:
U为m*m酉矩阵,
Σ为m*n正定对角矩阵,
V*为V的共轭转置,是n*n酉矩阵。
注:酉矩阵是指其共轭转置与逆矩阵相同的矩阵。
如下图所示:
同特征值相似,奇异值也是从大到小排列,且减小特别快。实际上我们可以用前k个奇异值就能基本近似表示整个矩阵。
则可以得到如下的近似奇异值分解方法。
若原Σ的秩为r,则我们只取前k(k<r)个奇异值,如此分解后:
U为m*r矩阵,
Σ为r*r正定对角矩阵,
V*为r*n矩阵。
如下图所示:可以看出,如此做以后,分解后的矩阵秩更小,但最大程度保留了原矩阵的特征。
我们也可以采用SVD分解的方法,完成图片压缩。
SVD分解的matlab实现:
[s v d]=svd(a);直接使用svd函数。
下面是做图片压缩的matlab代码:
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')
结果:
原图(512*512):
k=10;
k=50;
k=300;
0 0
- 奇异值分解与图像压缩
- 基于奇异值分解的图像压缩与除噪
- 奇异值分解和图像压缩
- 奇异值分解压缩图像SVD
- 奇异值分解和图像压缩
- 【PCA与LDA】特征值分解与奇异值分解以及图像压缩处理原理
- 矩阵奇异值分解SVD用于图像压缩的要点
- 利用矩阵奇异值分解对图像进行压缩
- 奇异值分解 SVD 图像压缩 Matlab 压缩率
- 基于奇异值分解(SVD)的图像压缩
- matlab练习程序(奇异值分解压缩图像)
- 矩阵奇异值分解与照片压缩、去噪
- [图像] 奇异值分解与隐性语义分析
- 奇异值分解与PCA
- 特征分解与奇异值分解
- 特征值分解与奇异值分解
- 奇异值分解与特征值分解
- 特征值分解与奇异值分解
- 浅谈我对IO流的了解 - 字符流
- 计算机顶级会议Rankings && 英文投稿的一点经验
- Click Notes I - Overview
- Prevent the system to be got access without login
- 微软是如何失去web开发市场的
- 奇异值分解与图像压缩
- 软件开发中的质量保证
- 嵌入式BootLoader原理及实例 <一>
- 第十七周项目二——引用作形参
- 第17讲学习(SHARP多边形渲染与控制)
- IOS 面试题汇总
- HDU1785 You Are All Excellent【余弦】【水题】
- 比较对象不能用“=”
- 逆序的三位数