基于奇异值分解的图片压缩

一、目的

在网络空间安全数学基础上,老师给出了一种基于奇异值分解的图片压缩办法。在本篇文章中,对此进行简单的实现。

二、简单的数学原理

step1:我们考虑一个 n * n 的方阵A,其总满足:


假设有好多特征值 Lambda 与特征向量 x 都满足上述公式,则有:


可以得到:

这样,我们就把一个方阵 A 进行了分解。

step2:同理,任意 m * n 的矩阵 M,都可分解为这样的形式,我们把它称为奇异值分解。

step3:我们将 M 分解为如下图所示:

化简一下,就变为:


我们看到,这个式子大概加了 n 次,如果我们将图片变为矩阵,n是很大的,那如果只保留前 k 项,对矩阵 M 的影响如何呢?
(注意:la_1 > la_2 >…> la_n)

三、Matlab代码实现:

在此,我们将一个图片化为矩阵,只保留奇异值分解的前 k 项,观察对图片的影响。

I = imread('C:\Users\dell\Desktop\IMG_20190405_111109.jpg');
I=double(I);  %将图片 0~255 转化为 double 形式,方便奇异值分解
[u s v]=svd(I(:,:,1));   %奇异值分解只能分解二维矩阵
k=200;    %保留项数为200
left=u(:,1:k);
val=s(1:k,1:k);
right=v(:,1:k);
out=left*val*right';
low=min(min(out));
high=max(max(out));
imshow(out,[low,high]);  %看一下图片啥样的啊
imwrite(uint8(out), 'C:\Users\dell\Desktop\result.jpg');%保存一下
四、测试结果:

我们所处理的图片:5.87 MB
1.当 k = 200 时,大小为1.6 MB:

2.当 k = 50 时,大小为1.0 MB:

基于奇异值分解的图片压缩相关推荐

  1. 基于Plupload的图片压缩上传

    前言 这里的上传工具基于JQuery.Plupload 传送门:Plupload官方.中文文档 为什么要做图片压缩? 现在手机拍照都快10M了,但是有时候图片上传只要看得清楚就可以了,比如上传身份证2 ...

  2. 基于Matlab的图片压缩(超简单)

    压缩原理--SVD 图像在计算机中用矩阵储存,值的大小在0~255,在这里我们令图像的矩阵为A.若图片为灰色图片则颜色通道只有一个,所以A为二维矩阵:若为彩色矩阵则颜色通道由3种,分别B,G,R,分别 ...

  3. 用Kotlin撸一个图片压缩插件-实战篇(三)

    简述: 由于个人原因,已经有很长一段时间没有写过文章,有句话是那么说的只要开始就不会太晚,所以我们开始<用Kotlin撸一个图片压缩插件>系列文章最后一篇实战篇.实际上我已经把源码发布到了 ...

  4. matlab-利用SVD(奇异值分解)来进行图片压缩

    参考博客 参考博客1(大致上的理论理解):https://www.cnblogs.com/MrLJC/p/4158818.html?utm_source=tuicool 参考博客2(压缩率):http ...

  5. 基于vue + axios + lrz.js 微信端图片压缩上传

    业务场景 微信端项目是基于Vux + Axios构建的,关于图片上传的业务场景有以下几点需求: 1.单张图片上传(如个人头像,实名认证等业务) 2.多张图片上传(如某类工单记录) 3.上传图片时期望能 ...

  6. 基于奇异值分解的图像压缩和信息隐藏

    基于奇异值分解的图像压缩和信息隐藏 将图像进行奇异值分解后,通过对对角矩阵进行一系列操作,可以达到压缩图像以及信息隐藏的目的.不仅如此,随着计算机网络和网络技术的不断发展,数字图像.音频和视频产品越来 ...

  7. Android性能优化之图片压缩优化

    1 分类 Android图片压缩结合多种压缩方式,常用的有尺寸压缩.质量压缩.采样率压缩以及通过JNI调用libjpeg库来进行压缩. 参考此方法:Android-BitherCompress 备注: ...

  8. 【Android 内存优化】Android 原生 API 图片压缩原理 ( Bitmap_compress 方法解析 | Skia 二维图形库 | libjpeg 函数库 | libpng 函数库 )

    文章目录 一. 图片质量压缩方法 二. Skia 二维图形库 三. libjpeg.libpng 函数库引入 在博客 [Android 内存优化]图片文件压缩 ( Android 原生 API 提供的 ...

  9. 服务器搭建:3.1、openresty图片压缩之GraphicsMagick

    2019独角兽企业重金招聘Python工程师标准>>> 服务器环境 CentOS6 版本 openresty   1.7.10.2   下载地址:https://openresty. ...

最新文章

  1. pull to load more data
  2. 实验中遇到的Quartus II的Warning的解释、原因以及解决方法
  3. VS2015:安装适用于windows桌面的visual c++2015
  4. openlayers根据坐标定位_车辆定位技术概述
  5. python做接口测试的优点_python做接口测试的必要性
  6. Futter基础第13篇: 实现Drawer侧边栏、以及侧边栏内容布局
  7. 【UVa10674】Tangents(两圆公切线的切点--验板子题)
  8. nginx 代理ssh
  9. Android企业级项目实战——基础篇(系列文章)
  10. Chartboost ane sdk 使用教程
  11. 2013全年3GPP RAN1会议关于D2D(Device-to-Device)技术的提案分析
  12. Win2000请求拨号路由服务详解
  13. 分享20个高质量的学习网站!
  14. 白话解读“中台”技术
  15. 外贸用什么邮箱好,如何选择一个好用的外贸企业邮箱
  16. 诺基亚升级Android10,诺基亚发布第五次Android 10更新 ,诺基亚7+可升级
  17. 286 Walls and Gates
  18. Gait Part论文阅读笔记
  19. Tyecho 完美配置评论回复邮件提醒 的简单方法
  20. c51停车场车位管理系统

热门文章

  1. Nvidia PhysX 学习文档7:Geometry
  2. 组词组合 php,PHP实现的简单组词算法示例讲解
  3. (转)在路上—Tinyfool的程序员生涯(职业生涯篇一)
  4. 湖南城市综合竞争力排名
  5. GF(Go Frame)开发框架
  6. QT: 基于QT和嵌入式的视频监控系统
  7. 【Kubernetes】k8s网络概念和实操详细说明【calico网络】【含docker不同容器网络互通配置,k8s网络互通配置】【1】
  8. 可视化系列汇总——相关关系图形
  9. 微信分享网络图片到朋友圈和收藏不显示图片的问题
  10. 遗传算法求解3D打印中零件二维排布问题(MATLAB实现)