matlab特征值分解用于数据压缩

特征值与特征向量的定义:

Ax=λx

 

特征值与特征向量的理解1——简化运算:

A作用于特征向量x的效果只是起到了λ倍的缩放效果,Ax将矩阵运算简化成了代数运算λx,也就是说特征值代表了缩放倍数,特征向量代表了方向

 

特征值与特征向量的理解2——线性变换:

将A看作线性变换(线性变换包含平移、旋转、缩放),Ab=c代表向量b在A的作用(线性变换)下转换为向量c,具体来说是将b在A的各个特征向量xi的方向上进行了对应的特征值λi倍数的缩放

 

 615fd7b5a402435e3790c65be64fcdaa.png

b在A的作用下,向特征值大的方向拉伸的倍数更大,拉伸后,在x轴=(1,0)方向上的投影远远大于y轴=(0,1)方向上的投影,认为此时x轴方向上反映了向量c更多的信息

推广到n维矩阵A,那么就是向着A的n个特征向量方向进行拉伸

 

特征值与特征向量的应用:

由于拉伸的倍数受到特征值大小的调控,那么在进行数据压缩的时候,只保留特征值大的方向上的投影(如上例中只保留x轴方向上的投影,舍去y轴方向上的投影),这样就在损失小部分信息的情况下,完成了数据的压缩

 

使用特征值分解用于图像压缩:

对于nxn的方阵,可以使用特征值分解对其进行数据压缩,通过保留前k大的特征值实现

function myeigs

data = im2double(imread('data.jpg'));       %读取图片
data = ((data-min(min(data)))/(max(max(data))-min(min(data))))*250;     %将灰度值调整到0-250
imshow(uint8(data));       %显示原始图像
title('原始图像');

[V,D] = eig(data);      %求矩阵的特征值和特征向量

%保留不同个数的奇异值
D_50 = D;
D_50(51:end,:) = 0;     %将从第51大的特征值置0

D_100 = D;
D_100(101:end,:) = 0;       %将从第101大的特征值置0

D_200 = D;   
D_200(201:end,:) = 0;     %将从第201大的特征值置0

data_50 = V*D_50*V^(-1);
imshow(uint8(data_50));        %显示保留最大的50个特征值的图像
title('由前50大的特征值重建的图像');

data_100 = V*D_100*V^(-1);
imshow(uint8(data_100));        %显示保留最大的100个特征值的图像
title('由前100大的特征值重建的图像');

data_200 = V*D_200*V^(-1);
imshow(uint8(data_200));       %显示保留最大的200个特征值的图像
title('由前200大的特征值重建的图像');

end

8d18ae5ad1c95e433c4db42e3e8d3e11.png1cbaaa7ae648dbaa7d27774c59b3c878.png

5c1642fb652b17dd59b2d7800070087b.pnga3f280c62d1d42e93c594432f182b816.png

随着保留的特征值的增加,图像保留的信息增多,重建的质量越来越好

 

 

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Tizzy477

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值