介绍一下奇异值分解来压缩图像。今年的上半年中的一篇博客贴了一篇用奇异值分解处理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时,还是先看看它的秩为好。

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

close all;
clc;

a=imread('lena.jpg');

imshow(mat2gray(a))
[m n]=size(a);

a=rgb2gray(a);
a=double(a);

[s v d]=svd(a);

%re=s*v*d';
re=s(:,:)*v(:,1:1)*d(:,1:1)';
figure;
imshow(mat2gray(re));
imwrite(mat2gray(re),'1.jpg')

re=s(:,:)*v(:,1:20)*d(:,1:20)';
figure;
imshow(mat2gray(re));
imwrite(mat2gray(re),'2.jpg')

re=s(:,:)*v(:,1:80)*d(:,1:80)';
figure;
imshow(mat2gray(re));
imwrite(mat2gray(re),'3.jpg')

re=s(:,:)*v(:,1:150)*d(:,1:150)';
figure;
imshow(mat2gray(re));
imwrite(mat2gray(re),'4.jpg')

下面是效果图:

 lena原图

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

 用前10个特征值进行重构

 用前80个特征值进行重构

 用前150个特征值进行重构

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

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

2.噪声滤波。

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

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

参考 http://www.cnblogs.com/tiandsp/archive/2012/10/24/2737769.html

【转】matlab练习程序(奇异值分解压缩图像)的更多相关文章

  1. matlab练习程序(Arnold图像置乱)

    自从上次写了Hilbert图像置乱之后,就对图像置乱研究了一下,发现这里面也是有很多置乱算法的. Arnold也算一种比较主要的置乱算法,算法由以下变换公式产生: 这里a和b是参数,n是迭代次数,N是 ...

  2. matlab练习程序(Hilbert图像置乱)

    正好刚写了Hibert生成曲线,不如再加一篇应用的程序. 关于Hilbert图像置乱,我在网上搜的应用领域主要集中在数字水印和图像加密上,而这两个领域我都没怎么接触过. 大部分的图像置乱都是如下图的置 ...

  3. matlab练习程序(计算图像旋转角度)

    比如有图像1,将其旋转n度得到图像2,问如何比较两张图像得到旋转的度数n. 算法思路参考logpolar变换: 1.从图像中心位置向四周引出射线. 2.计算每根射线所打到图像上的像素累计和,得到极坐标 ...

  4. matlab练习程序(SUSAN检测)

    matlab练习程序(SUSAN检测) SUSAN算子既可以检测角点也可以检测边缘,不过角点似乎比不过harris,边缘似乎比不过Canny.不过思想还是有点意思的. 主要思想就是:首先做一个和原图像 ...

  5. [OpenCV Qt教程] 如何在内存中压缩图像

    本文译自:http://www.robot-home.it/blog/en/software/tutorial-opencv-qt-comprimere-un-immagine-in-memoria/ ...

  6. (转)matlab练习程序(HOG方向梯度直方图)

    matlab练习程序(HOG方向梯度直方图)http://www.cnblogs.com/tiandsp/archive/2013/05/24/3097503.html HOG(Histogram o ...

  7. 机器学习实战:用SVD压缩图像

    前文我们了解了奇异值分解(SVD)的原理,今天就实战一下,用矩阵的奇异值分解对图片进行压缩. Learn by doing 我做了一个在线的图像压缩应用,大家可以感受一下. https://huggi ...

  8. Matlab实现Hough变换检测图像中的直线 分类: 图像处理 2014-06-14 22:07 641人阅读 评论(0) 收藏

    Hough变换的原理: 将图像从图像空间变换至参数空间,变换公式如下: 变换以后,图像空间与参数空间存在以下关系: 图像空间中的一点在参数空间是一条曲线,而图像空间共线的各点对应于参数空间交于一点的各 ...

  9. JPEG压缩图像超分辨率重建算法

    压缩图像超分辨率重建算法学习 超分辨率重建是由一幅或多幅的低分辨率图像重构高分辨率图像,如由4幅1m分辨率的遥感图像重构分辨率0.25m分辨率图像.在军用/民用上都有非常大应用. 眼下的超分辨率重建方 ...

随机推荐

  1. python 之 函数 内置函数

    5.15 内置函数 方法 含义 备注 abs(-1) 求绝对值 1 all ([1,'a',True]) 列表中所有元素的布尔值为真,最终结果才为真 True all ('') 传给all的可迭代对象 ...

  2. 基于SpringBoot构建分模块项目

    前言 步骤过于详细,多图慎入!!! 假设一个场景,要开发一个4s店维修部的办公系统,其功能有:前台接待,维修抢单,财务结算,库存管理.于是我们创建一个项目balabalabala写完交工. 一段时间后 ...

  3. Kali Linux 工具清单

    Kali Linux 工具清单 Information Gathering acccheck ace-voip Amap Automater bing-ip2hosts braa CaseFile C ...

  4. EOS 插件依赖关系

    EOS version: 1.0.5 update: 2018-06-19   EOS插件之间会有一个相互调用与依赖的关系,下面有一张个人画的一张草图,包含了此版本EOS所有插件相互之间的依赖关系,如 ...

  5. Java EE学习笔记(十)

    MyBatis与Spring的整合 1.整合环境搭建 1).要实现MyBatis与Spring的整合,很明显需要这两个框架的JAR包,但是只使用这两个框架中所提供的JAR包是不够的,还需要其他的JAR ...

  6. NPOI读写Excel【转载】

    参考示例:https://www.cnblogs.com/luxiaoxun/p/3374992.html 感谢! 1.整个Excel表格叫做工作表:WorkBook(工作薄),包含的叫页(工作表): ...

  7. css3响应式表格

    <h1>极客学院相关课程</h1> <table class="responsive"> <thead> <tr> &l ...

  8. spring Cloud中,解决Feign/Ribbon整合Hystrix第一次请求失败的问题?

    Spring Cloud中,Feign和Ribbon在整合了Hystrix后,可能会出现首次调用失败的问题,要如何解决该问题呢? 造成该问题的原因 Hystrix默认的超时时间是1秒,如果超过这个时间 ...

  9. SpringBoot 封装返回类以及session 添加获取

    1.创建返回类Result public class Result<T>{ /*错误码*/ private Integer code; /*提示信息 */ private String m ...

  10. mui对话框、表单

    1.mui.alert() 普通提醒参数 1.message Type: String 提示对话框上显示的内容 2.title Type: String 提示对话框上显示的标题 3.btnValue ...