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

📄 7.m

📁 基于svd算法的matlab源码
💻 M
字号:
clear all;
clc;
[I,map]=imread('1.jpg');%imread是读取图片的命令
%I=imread('5.jpg');
I1=double(I);   %因为I的格式是uint8 的格式,要转换成double格式
R=I1(:,:,1);   % 提取RGB矩阵 
G=I1(:,:,2);   
B=I1(:,:,3);   

[m,n] = size(R);  %计算R矩阵的行列数

%将RGB矩阵转换为3*N行的矩阵形式
r=[];g=[];b=[]; 
for i=1:m  
    r=[r  R(i,:)];
    g=[g  G(i,:)];
    b=[b  B(i,:)];
end
 A=[r;g;b];
 
 %对矩阵进行svd变换
[u,s,v]=svd(A,0);

%选择压缩的K值
k = input('請輸入 k 值:');
L=[];
for i= 1: k
    L=[L i];
end
%选择前K个值进行压缩
U=u(:,L);    %选取前k行
S=s(L,L);
V=v(:,L);
A1=uint8(U*S*V'); %得到压缩后的3*N的矩阵

%将矩阵还原成RGB图像矩阵
a1=A1(1,:);
a2=A1(2,:);
a3=A1(3,:);
for i= 1: m
     R1(i,:)= a1(1,1+(i-1)*n:n+(i-1)*n) 
     G1(i,:)= a2(1,1+(i-1)*n:n+(i-1)*n) 
     B1(i,:)= a3(1,1+(i-1)*n:n+(i-1)*n) 
end
I2(:,:,1)=R1;
I2(:,:,2)=G1;
I2(:,:,3)=B1;
%输出前后图像对比
imshow(I),title('原图像' );
figure,imshow(I2);

⌨️ 快捷键说明

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