• 大小: 34KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-06-07
  • 语言: Matlab
  • 标签: matlab  kl变换  

资源简介

用matlab实现的kl变换,自己测试可用

资源截图

代码片段和文件信息

%KL变换
clc;
clear;

%读入图像,预处理
I1=imread(‘lena.bmp‘);

I1=imresize(I1[256256]);

I1=double(I1);

figure(1);
imshow(I1/255);title(‘原始图‘);
x=zeros(409616);
%将原始图像划分为4*4的块,将每个块排列成一个16维的数据x((m-1)*64+n(i-1)*4+j)一幅256*256的图像可以产生64*64=4096个向量
    for m=1:64
        for n=1:64
            for i=1:4
                for j=1:4
                    x((m-1)*64+n(i-1)*4+j)=I1((m-1)*4+i(n-1)*4+j);
                end
            end
        end
    end    
%对每一个矢量求矩阵的均值协方差矩阵
X=x‘;
mx=mean(mean(X));
cx=1/4096*(X*X‘)-mx*mx;

%求该矩阵的特征值和对应的特征向量
[VD]=eig(cx);
V=fliplr(V);%因为matlab计算出的特征值按照递增顺序排列所以做一个相应的变换使其做递减的摆列
D=flipud(fliplr(D));

%求解KL正变换
g=zeros(409616);
for i=1:4096
    g(i:)=(V‘*(x(i:)-mx)‘)‘;
end

%截短至8位
y=zeros(40968);
y=g(:(1:8));

W=V(:(1:8));

%反变换
x=zeros(409616);
for i=1:4096
    x(i:)=(W*y(i:)‘+mx)‘;
end

%重组图像
newpic=zeros(256256);
for i=1:64
    for n=1:64
        for j=1:4
            for m=1:4
                newpic((i-1)*4+j(n-1)*4+m)=x((i-1)*64+n(j-1)*4+m);
            end
        end
    end
end

%截短至4位
y4=zeros(40964);
y4=g(:(1:4));

W4=V(:(1:4));

%反变换
x4=zeros(409616);
for i=1:4096
    x4(i:)=(W4*y4(i:)‘+mx)‘;
end

%重组图像
newpic4=zeros(256256);
for i=1:64
    for n=1:64
        for j=1:4
            for m=1:4
                newpic4((i-1)*4+j(n-1)*4+m)=x4((i-1)*64+n(j-1)*4+m);
            end
        end
    end
end


figure(2);
imshow(uint8(newpic));
title(‘8位数据重建图像‘);

figure(3);
imshow(uint8(newpic4));
title(‘4位数据重建图像‘);

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件       1734  2012-12-27 16:36  matlab实现kl变换\kl变换.m

     文件      47928  2012-12-26 10:21  matlab实现kl变换\lena.bmp

     目录          0  2013-01-04 11:59  matlab实现kl变换

----------- ---------  ---------- -----  ----

                49662                    3


评论

共有 条评论