利用Matlab进行图像变换(K-L变换)

本文章包含以下内容:

1.了解K-L变换的基本原理。

2.利用Matlab图像处理工具箱编程实现K-L变换;

3.  针对“Camerman.tif”图像进行K-L变换,分别取k=8,16,32,64个特征值时,重建图像比较重建图像的效果。

代码如下:

function U()
clear;
clc;

X = imread('cameraman.tif');    % 读取图像文件
% X = imread('peppers.png');      % 读取文件
% X=rgb2gray(X);
s = size(X);        % 得到图像的大小
M = s(1);
N = s(2);
X_d = im2double(X); % 转为浮点型
for i = (1:M)
    m(i)=sum(X_d(i,:))/N;   % m是X每一列的均值(期望)
    Y(i,:) = X_d(i,:) - m(i);   % Y = X - mx
end
% 计算协方差矩阵
C = cov(X_d');
[A,L] = eig(C); % 协方差矩阵的特征值和特征向量eig的输出是由小到大
L = wrev(diag(L));	% 特征值是矩阵的对角元素
A = fliplr(A);  % 把特征值大的排到前面
A = A';% 由于算特征矩阵时用的是X'这里转置回来
Y = A * Y;      % Y = A(X - mx)
figure('Name','K-L变换');     % 开一个叫K-L变换的窗口
subplot(3,2,1);imshow(X);title('原图');
subplot(3,2,2);imshow(Y);title('变换后的Y');
subplot(3,2,3);imshow(X_new(A,Y,m,N, 8));title('最大的 8个特征');
subplot(3,2,4);imshow(X_new(A,Y,m,N,16));title('最大的16个特征');
subplot(3,2,5);imshow(X_new(A,Y,m,N,32));title('最大的32个特征');
subplot(3,2,6);imshow(X_new(A,Y,m,N,64));title('最大的64个特征');

function X_d = X_new(A,Y,m,N,x)
    s = size(Y);
    Y1 = zeros(s);
    Y1(1:x,:) = Y(1:x,:);
    X_d = A' * Y1;  % 逆变换 
    for i = (1:N)
        X_d(:,i) = X_d(:,i) + m';   % 加上均值
    end

结果示例:

 

 K-L变换大概过程是对图像求协方差矩阵C,再求协方差矩阵的特征值L和特征向量A,用Y = A * X,将原图像投影到Y上,Y的每一行都是不相关的,类似主成分,取特征向量大的几行,生成新的Y1,逆变换回去X = A'*Y1,

  • 9
    点赞
  • 60
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
正交变换是指在保持向量内积不变的前提下,将一个向量或一组向量变换为另一个向量或一组向量的过程。K-L变换(Karhunen-Loève变换)也叫PCA(Principal Component Analysis,主成分分析),是一种常用的正交变换方法,可以用于图像压缩、特征提取等领域。 在Matlab中,可以使用函数`pca`进行K-L变换。下面是一个简单的示例代码: ```matlab % 读取图像 im = imread('lena.png'); % 将图像转换为列向量 im_vec = im(:); % 计算均值 im_mean = mean(im_vec); % 去除均值 im_vec = im_vec - im_mean; % 计算K-L变换矩阵和特征值 [coeff,score,latent] = pca(im_vec); % 保留前n个主成分 n = 100; coeff_n = coeff(:,1:n); score_n = score(:,1:n); % 重构图像 im_recon_vec = score_n * coeff_n' + im_mean; im_recon = reshape(im_recon_vec,size(im)); % 显示结果 subplot(1,2,1),imshow(im),title('原图'); subplot(1,2,2),imshow(uint8(im_recon)),title('重构图'); ``` 在这个示例代码中,我们首先读取一张图像,并将其转换为列向量。然后计算其均值,并将均值从列向量中减去,使得列向量的平均值为0。接下来,使用`pca`函数计算K-L变换矩阵和特征值,然后保留前n个主成分。最后,将保留的主成分乘上对应的权重并加上均值,得到重构后的图像。 需要注意的是,K-L变换通常只适用于平稳信号,即信号的统计特性不随时间变化。对于图像来说,我们通常会对其进行预处理,如平滑、去噪、裁剪等操作,以保证其平稳性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值