首页 >> 大全

特征值分解用于数据压缩(matlab实现)

2023-06-24 大全 59 作者:考证青年

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

Ax=λx

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

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

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

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

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

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

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

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

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

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

function myeigsdata = 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大的特征值置0D_100 = D;
D_100(101:end,:) = 0;       %将从第101大的特征值置0D_200 = D;   
D_200(201:end,:) = 0;     %将从第201大的特征值置0data_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

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

关于我们

最火推荐

小编推荐

联系我们


版权声明:本站内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 88@qq.com 举报,一经查实,本站将立刻删除。备案号:桂ICP备2021009421号
Powered By Z-BlogPHP.
复制成功
微信号:
我知道了