基于Matlab的图片压缩(超简单)
压缩原理——SVD
图像在计算机中用矩阵储存,值的大小在0~255,在这里我们令图像的矩阵为A。若图片为灰色图片则颜色通道只有一个,所以A为二维矩阵;若为彩色矩阵则颜色通道由3种,分别B,G,R,分别对应三原色蓝色,绿色,红色,即三原色。
我们将A分解为U,D两个正交矩阵呵V这个奇异值矩阵,如下图所示。
在这里我们举例说明一下,A=
在Matlab中我们使用内置函数svd()函数对A进行分解
A = [4 12 8 712 5 8 43 17 56 21]
[U,V,D] = svd(A);
V的结果如下图所示:
U,D结果为正交矩阵,这里不予展示。SVD压缩原理就是保留原矩阵的重要特征,在64.55,13.21,7.42中我们只要保留64.55,13.21这些较大的奇异值,舍弃较小的奇异值,就能保留原矩阵的大部分信息了。当然U,D也要根据奇异值矩阵V进行调整。
我们用matlab编程得到3个程序,后面两个为函数,photo_compress()为压缩函数,调用New_svd()进行奇异值分解。
程序主程序,记得改变图片路径:
%Matlab压缩图片图片
ratio = 0.6;%压缩比例
graycompress = 0;%若为1压缩为灰度图
file_name = 'E:\workplace\wisdom';%文件所在路径
name = 'test.jpg';%图片的名称
photo_address = fullfile(file_name,name);%fullfile()合并制定路径和文件名
save_address = fullfile(file_name,strcat('compress_',name));
tmp=photo_compress(photo_address,save_address,ratio,graycompress);
disp('End')
压缩程序,对应不同的图片给予不同的方法处理:
function [compress_A] = photo_compress(photo_address,save_address,ratio,graycompress)
%图片压缩函数
%参数说明
%photo_address图片所在地址
% save_address压缩图片所在地址
% ration压缩比例
% graycompress默认为0,置彩色图片转成灰色图片再压缩if nargin == 3%获取函数的参数数量,如果为3个参数则默认读入彩色图片graycompress = 0;
end
img = double(imread(photo_address));
if size(img,3)==3 && graycompress == 1img = double(rgb2gray(imread(photo_address)));%将彩色照片转换成灰色照片
end
if size(img,3)==3%判断是否为彩色照片disp('正在压缩彩色照片');R = img(:,:,1);G = img(:,:,2);B = img(:,:,3);%调用压缩函数进行压缩r =new_svd(R,ratio);g= new_svd(G,ratio);b =new_svd(B,ratio);compress_A = cat(3,r,g,b);elsedisp('正在压缩灰色照片');compress_A = new_svd(img,ratio);
end
imwrite(uint8(compress_A),save_address);
disp('压缩完成');
end
奇异值分解函数,根据压缩比例,动态调整奇异值的数量:
function[A_svd] = new_svd(A,ratio)
%奇异值分解比例函数
[U,V,D] = svd(A);
A_diag = diag(V);%取对角值
S = sum(A_diag)
temp=0;
length_A_diag = length(A_diag);
for i=(1:length_A_diag)temp = temp + A_diag(i)if (temp./S) > ratiobreak;end
end
A_svd=U(:,1:i)*V(1:i,1:i)*D(:,1:i)';
svd_ratio = temp./S;
disp(strcat('矩阵压缩比例为',num2str(svd_ratio.*100),'%'));
压缩比例为0.6,结果如下图所示:
|
|
基于Matlab的图片压缩(超简单)相关推荐
- 基于奇异值分解的图片压缩
基于奇异值分解的图片压缩 一.目的 在网络空间安全数学基础上,老师给出了一种基于奇异值分解的图片压缩办法.在本篇文章中,对此进行简单的实现. 二.简单的数学原理 step1:我们考虑一个 n * n ...
- matlab 浮雕,基于MATLAB根据图片快速制作陶瓷浮雕的方法与流程
本发明属于陶瓷制作技术领域,尤其涉及基于MATLAB根据图片快速制作陶瓷浮雕的方法. 背景技术: 印模成形是传统的陶艺成形工艺之一,它具有制作简便.省时省力.对制作者没有过多的技艺要求的优点,因而直到 ...
- 怎么打包图片_超简单的免费批量图片压缩技巧,只需3步
我们在上传图片的时候,经常会遇到一个问题,那就是图片文件太大,无法上传.那这个时候我们该怎么办呢?我们一般都会想到把图片进行压缩之后,重新上传.那么我们要怎么压缩图片呢?如果图片数量很多,能不能进行批 ...
- 基于Plupload的图片压缩上传
前言 这里的上传工具基于JQuery.Plupload 传送门:Plupload官方.中文文档 为什么要做图片压缩? 现在手机拍照都快10M了,但是有时候图片上传只要看得清楚就可以了,比如上传身份证2 ...
- python课堂笔记手抄图片_超简单又漂亮的手抄报图片
办手抄报是一项综合性训练,它融作文.书法.绘画于一体,可以有效地提高学生的思维能力.写作能力和审美能力.小编为大家带来的超简单手抄报图片简单又漂亮,希望大家喜欢. 超简单手抄报的图片欣赏 超简单手抄报 ...
- 如何压缩jpg大小?jpg图片压缩的简单方法
我们日常的学习.工作中,经常需要收发很多jpg图片.当这些jpg图片体积过大的时候,不仅会减缓我们传输的速度,还会占用大量的电脑储存空间.那么如何将图片压缩(https://www.yasuotu.c ...
- gettext()方法输出空白_如何将文档内容输出为无水印图片?超简单的操作方法看这里...
在实际的工作生活中,我们可能会遇到这样的情况:文档内容太多,想截图以图片的形式展现,但是文档超过一屏无法全部截取,将其保存为图片的形式,但使用WPS将文档直接输出为无水印图片需要开启WPS会员. 一连 ...
- 基于matlab的漏电保护器仿真,基于MATLAB的小电流接地系统简单故障仿真实验
在我国,中性点直接接地方式被规定用于110kV及以上的电压等级的系统,而小电流接地方式(即中性点不接地或经消弧线圈接地)被规定用于35kV及以下的配电系统.在小电流接地系统中,如果发生了单相接地故障, ...
- 基于Matlab的图片平滑和锐化处理
在本实验中我分别采用了系统自带的fspecial函数和自己编写的均值平滑模板和两个锐化模板进行图片处理. 目录 空间域平滑增强 空间域锐化增强 空间域平滑增强 实验要求:采用均值平滑模板对图片进行处理 ...
最新文章
- java中的二进制运算简单理解
- Linux下动态链接库so文件覆盖导致coredump
- 关于Java中的String类
- pdf保存如何带批注_带有批注的SpringSelenium测试
- scikit-learn安装
- 正确评估SQL数据库性能,你必须知道的原理和方法!
- 项目内出现广告位引争议,开源如何持续健康运营?
- python函数参数的引用传递_Python初学者笔记(八):函数参数的值传递和引用传递...
- python可以处理哪些文件_Python(文件处理)
- Nginx源码分析 - HTTP模块篇 - HTTP模块的阶段处理PHASE handler(23)
- 设计模式以及类图的实现
- es 怎么验证是否安装成功_ElasticSearch(ES)预警服务 Watcher安装以及探究
- 从0到1实现VueUI库思路
- 华为手机鸿蒙系统官方下载入口,华为鸿蒙系统升级入口
- 在php中cm和kg用什么表示,将g/cm³换算为kg/m³ (克每立方厘米换算为千克每立方米)...
- 转载四代重歼的一片博文 - 漏斗子:“三大战役”完成 人民币国际化就登场
- P1069 微博转发抽奖
- vfc格式linux,2021-03-17 在linux上将vcf文件转plink的格式bed,bim,fam
- 下载美国气候数据中心地址
- 【论文解读】Exploring Complementary Strengths of Invariant and Equivariant Representations(小样本等变和不变的互补)