svd_cprs1.m

来自「利用奇异值分解压缩图像」· M 代码 · 共 40 行

M
40
字号
% 该程序是用矩阵的起奇异值分解实现对图像的压缩编码
% m,n为读入图像矩阵的维数
% X1为经过变换后的图像数据,t为特征向量图像,二者均是变换后应存数据
clear
close all
rdimg=imread('1','jpg');
%----读入灰度图像----------------
gryimg=double(rdimg);
[m,n]=size(gryimg);
X=zeros(m,n);
avimg=0;
for i=1:m
    for j=1:n
        avimg=avimg+gryimg(i,j);
    end
end
avimg=avimg/(m*n);
%-----------求图像像素均值---------
X=gryimg-avimg;
A=X*X';
%-----------求协方差矩阵-------------
[u,s,v]=svd(A);
%--------奇异值分解-----------
for i=1:m
    if i<=32
%-----------设定压缩比---------
       t(:,i)=u(:,i);
    else
        break;
    end
end
X1=t'*X;
%---------压缩数据------------------
X2=t*X1;
%-----恢复数据---------
X2=X2+avimg;
X2=uint8(X2);
%---------画出解压前后图像比较效果----------------
subplot(1,2,1),imshow(uint8(gryimg));
subplot(1,2,2),imshow(X2);

⌨️ 快捷键说明

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