⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 svd_cprs2.m

📁 利用奇异值分解压缩图像
💻 M
字号:
% 该程序是用矩阵的起奇异值分解实现对图像的压缩编码
% 程序中在用奇异值分解之前先将图像分解成M*M个小图像,以增加压缩效率
% 程序中为了直接对小图像用奇异值分解,先将N*N的矩阵转换成K.^2*M.^2维的矩阵
% N为读入图像矩阵的维数,本程序只能对N*N的图像进行处理
% M.^2为小图像个数,K.^2为每个小图像所含的像素个数
% Iav为小图像像素的均值,Is为经过变换后应存储的数据,T为特征向量图像
clear all
close all
Img=imread('1','jpg');
%----读入灰度图像----------------
Gi=Img;
Gi1=Gi;
Gi=double(Gi);
Gi2=zeros(size(Gi1));
N=size(Gi1,1);
K=8;
M=N/K;
I=zeros(K.^2,M.^2);
%----------------------------------------------
for i=1:K.^2
    for j=1:M.^2
        I(i,j)=Gi(fix((i-1)/K)+(fix((j-1)/M))*K+1,mod(i-1,K)+(mod(j-1,M))*K+1);
    end
end
%-------------转换矩阵----------------------------------
Iav=zeros(1,M.^2);
for m=1:M.^2
    for n=1:K.^2
        Iav(1,m)=Iav(1,m)+I(n,m);
    end
end
Iav=Iav./(K.^2);
%-----------求小图像像素均值---------
I1=I;
for l=1:M.^2
    I1(:,l)=I1(:,l)-Iav(1,l);
end
A=I1*I1';
%-----------求协方差矩阵-------------
[u,s,v]=svd(A);
%--------奇异值分解-----------
for i=1:K.^2
    if i<=8
%-----------设定压缩比----------
       T(:,i)=u(:,i);
    else
        break;
    end
end
Is=T'*I1;
%---------压缩数据------------------
%-----下面为恢复数据的过程----------
I2=T*Is;
for l=1:M.^2
    I2(:,l)=I2(:,l)+Iav(1,l);
end
for i=1:K.^2
    for j=1:M.^2
        Gi2(fix((i-1)/K)+(fix((j-1)/M))*K+1,mod(i-1,K)+(mod(j-1,M))*K+1)=I2(i,j);
    end
end
Gi2=uint8(Gi2);
%---------画出解压前后图像比较效果-----------------
subplot(1,2,1),imshow(Gi1);
subplot(1,2,2),imshow(Gi2);


    
    
    

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -