基于奇异值分解的图像压缩原理,matlab奇异值分解SVD
【图像压缩】基于奇异值分解德拉贡诺夫狙击步枪(斯奈佩尔斯卡娅维尼奥夫卡德拉古诺夫的缩写)进行图像压缩矩阵实验室代码_MATLAB仿真博客的技术博客_博客
一简介根据奇异值分解的基本原理及其特点,给出了运用奇异值分解进行图像压缩的方法。通过简单的例子说明了该方法进行图像压缩的基本过程,给出了压缩流程。并通过材料实验室编程对实际图像进行处理,表明了该方法的有效性。
编辑
编辑
2完整代码%将图像作为uint8的矩阵读入A
色度控制中心
清理所有
全部关闭
[X,map]=im read(女巫头。jpg’);
im=X;
%将图像从uint8转换为德拉贡诺夫狙击步枪(Snayperskaya Vinyovka Dragunov的缩写)的双打
X=im2 double(X);
%分离
[U_r,S_r,V_r]=svd(X(:1));
[U_g,S_g,V_g]=svd(X(:2));
[U_b,S_b,V_b]=svd(X(:3));
%=============================
%测试脚本
%=============================
%确认检查红色
out _ red=U _ r * S _ r * V _ r ;
红色=X(:1);
% -
% S_r的大小为640x1138,因此有640个对角线值
尺寸
%找到最大的k个奇异值
k=30
redk=zeros(k,1);
greenk=zeros(k,1);
bluek=zeros(k,1);
%发现和矩阵的对角线是有序的
对于i=1:k
redk(i)=S_r(i,I);
greenk(i)=S_g(i,I);
bluek(i)=S_b(i,I);
目标
% -
%存储分析
initialStorage=640 * 1138
当前存储=(640 1138)* k k;
% -
%误差分析
sume=0;
因为i=1:640
sume=sume S_r(i,i) S_g(i,i) S_b(i,I);
目标
误差=sum(redk greenk bluek)/sume;
% -
NewImage_r=zeros(640,1138);
NewImage_g=zeros(640,1138);
NewImage_b=zeros(640,1138);
对于i=1:k
new image _ r=new image _ r redk(I)* U _ r(:i)*V_r(:I);
new image _ g=new image _ g greenk(I)* U _ g(:i)*V_g(:I);
new image _ b=new image _ b bluek(I)* U _ b(:i)*V_b(:I);
目标
% -
%规范化矩阵以适应rgb格式
因为i=1:640
对于j=1:1138
if(NewImage_r(i,j) 0)
NewImage_r(i,j)=0;
目标
if(NewImage_g(i,j) 0)
NewImage_g(i,j)=0;
目标
if(NewImage_b(i,j) 0)
NewImage_b(i,j)=0;
目标
目标
目标
% -
rgbi image=cat(3,NewImage_r,NewImage_g,new image _ b);
% image(RGB图像);
% image(X);
差异=rgbImasge-X
数字
支线剧情(121)
imshow(X,[]);标题(原图)
支线剧情(122)
imshow(NewImage_b,[]);标题(压缩后的图)
% - 3 仿真结果
编辑
四参考文献[1]胡乡峰,卫金茂。基于奇异值分解(奇异值分解)的图像压缩[J]的缩写.东北师大学报:自然科学版, 2006, 38(3):4.
博主简介:擅长智能优化算法、神经网络预测、信号处理、元胞自动机、图像处理、路径规划、无人机等多种领域的矩阵实验室仿真,相关矩阵实验室代码问题可私信交流。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。