📄 klt.m
字号:
%%%%%%%%%%%%%%%%%%%%%%灰度图像的klt正反变换%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function y=klt(x,mask)
IM=x;%%%%%%%%%%%%%%%%%%%%%读取图像
IM=im2uint8(IM);
%%%%%%%%%%%%%%%%%%%%%若图像尺寸不是8的整数倍,补成8的整数倍%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%若图像尺寸不是8的整数倍,补成8的整数倍%%%%%%%%%%%%%%%%%%%%%%%
[cc1,cc2]=size(IM);
a=8-mod(cc1,8);
b=8-mod(cc2,8);
cc3=cc1+a;
cc4=cc2+b;
IM(cc3,cc4)=IM(cc1,cc2);
IM(1:cc1,cc2+1:cc4)=IM(1:cc1,cc2-b+1:cc2);
IM(cc1+1:cc3,1:cc2)=IM(cc1-a+1:cc1,1:cc2);
IM(cc1+1:cc3,cc2+1:cc4)=IM(cc1,cc2);
%%%%%%%%%%%%%%%%%%%%%若图像尺寸不是8的整数倍,补成8的整数倍%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%若图像尺寸不是8的整数倍,补成8的整数倍%%%%%%%%%%%%%%%%%%%%%%%
k=1;
for l1=1:8:(cc3-7) %%%%%%%%%%%%%%%%%%%%%%%%%将图像矩阵一8X8的矩阵存起来
for l2=1:8:(cc4-7) %%%%%%%%%%%%%%%%%%%%%%%%%将图像矩阵一8X8的矩阵存起来
F(:,:,k)=IM(l1:l1+7,l2:l2+7);
k=k+1;
end %%%%%%%%%%%%%%%%%%%%%%%%%将图像矩阵一8X8的矩阵存起来
end %%%%%%%%%%%%%%%%%%%%%%%%%将图像矩阵一8X8的矩阵存起来
F=uint8(F);
k=k-1;
qq=k;
d=0;
d=uint32(d);
IM=uint32(IM);
for n1=1:cc3 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%求均值
for n2=1:cc4
d=IM(n1,n2)+d;
end
end
d=d/(cc1*cc2);
d=uint8(d); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%求均值
IM=uint8(IM);
B2=zeros(64);
jz=d;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%jz为灰度均值
for ee=1:qq
A=F(:,:,ee);
TZZ;%%%%%%%%%%%%%%%%%%%%%%%%%调用函数求一个8X8的矩阵的特征矩阵
B2=B2+B;
end
B=B2/ee;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%B为均方差矩阵
[V,D]=eig(B);%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%求特征向量与特征值
Q=V';
% mask = [1 1 1 1 1 1 1 1
% 1 1 1 1 1 1 1 0
% 1 1 1 1 1 1 0 0
% 1 1 1 1 1 0 0 0
% 1 1 1 1 0 0 0 0
% 1 1 1 0 0 0 0 0
% 1 1 0 0 0 0 0 0
% 1 0 0 0 0 0 0 0];%%%%%%二值掩模,用来压缩系数
for k=1:qq
A=F(:,:,k);
ee=1;
for n1=1:8 %%%%%%%%%%%%%%%%%%%%将元素变换成一维
for n2=1:8 %%%%%%%%%%%%%%%%%%%%将元素变换成一维
X(ee,1)=A(n1,n2);
YSZ(ee,1)=mask(n1,n2);%%%%%%%YSZ为mask变换成的一维数组
ee=ee+1;
end %%%%%%%%%%%%%%%%%%%%将元素变换成一维
end %%%%%%%%%%%%%%%%%%%%将元素变换成一维
X=double(X);
Y=Q*X;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%变换后的矩阵放在Y中
Y=flipud(Y);
Y=Y.*YSZ;
Y=flipud(Y);
X1(:,:,k)=Q'*Y;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%求还原后的矩阵
end
k=1;
for l1=1:8:(cc3-7) %%%%%%%%%%%%%%%%%将矩阵8X8矩阵放入IM2中
for l2=1:8:(cc4-7) %%%%%%%%%%%%%%%%%将矩阵8X8矩阵放入IM2中
H2=X1(:,:,k);
ee=1;
for n1=1:8
for n2=1:8
C2(n1,n2)=H2(ee,1);
ee=ee+1;
end
end
IM2(l1:l1+7,l2:l2+7)=C2;
k=k+1;
end %%%%%%%%%%%%%%%%%将矩阵8X8矩阵放入IM2中
end %%%%%%%%%%%%%%%%%将矩阵8X8矩阵放入IM2中
IM=IM(1:cc1,1:cc2);
IM2=IM2(1:cc1,1:cc2);
y=uint8(IM2);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -