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

📄 klt.m

📁 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 + -