• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

MATLAB奇异值分解压缩图像

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

介绍一下奇异值分解来压缩图像。今年的上半年中的一篇博客贴了一篇用奇异值分解处理pca问题的程序,当时用的是图像序列,是把图像序列中的不同部分分离开来。这里是用的不是图像序列了,只是单单的一幅图像,所以直接就对图像矩阵进行svd了。

  吴军的《数学之美》里其实已经介绍过用svd进行大数据的压缩了,不过我这里还是针对图像进行介绍一下吧。比如一幅1000*1000的图像A,存储就需要1000000个像素了。我们对A进行svd分解,则A=USV’,如果rank(A)=r,那么U就为1000*r的矩阵,S为r*r的矩阵,V为1000*r的矩阵。所以存储的数据就是1000*r+r*r+1000*r个数了,如果这个r比较小,那么存储的空间就会小很多了,当然了,如果r=1000,这时这样来算svd就是既浪费了空间又浪费了时间。所以用这个svd时,还是先看看它的秩为好。

  下面给出程序和运行结果,这里使用不同的特征分量对原图像进行重构,可以看一下效果。(这里悲剧的秩就是原图的宽)

 1 clear all;
 2 close all;
 3 clc;
 4 
 5 a=imread('lena.jpg');
 6 
 7 imshow(mat2gray(a))
 8 [m n]=size(a);
 9 a=double(a);
10 r=rank(a);
11 [s v d]=svd(a);
12 
13 %re=s*v*d';
14 re=s(:,:)*v(:,1:1)*d(:,1:1)';
15 figure;
16 imshow(mat2gray(re));
17 imwrite(mat2gray(re),'1.jpg')
18 
19 re=s(:,:)*v(:,1:20)*d(:,1:20)';
20 figure;
21 imshow(mat2gray(re));
22 imwrite(mat2gray(re),'2.jpg')
23 
24 re=s(:,:)*v(:,1:80)*d(:,1:80)';
25 figure;
26 imshow(mat2gray(re));
27 imwrite(mat2gray(re),'3.jpg')
28 
29 re=s(:,:)*v(:,1:150)*d(:,1:150)';
30 figure;
31 imshow(mat2gray(re));
32 imwrite(mat2gray(re),'4.jpg')

下面是效果图:

 lena原图

 只用第1个特征值进行重构

 用前10个特征值进行重构

 用前80个特征值进行重构

 用前150个特征值进行重构

最后说一些奇异值分解的应用:

1.图像压缩,正如上面的。

2.噪声滤波。

3.模式识别。因为svd就是提取主要的成分嘛。

4.生物,物理,经济方面的一些统计模型的处理。


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
Delphi图像处理 -- 图像颜色矩阵调整发布时间:2022-07-18
下一篇:
Delphi下的COM编程技术 - 1发布时间:2022-07-18
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap