ps网站头部图片,自己做免费的网站,网站403错误,做网站备案时间原创 风一样的航哥 航哥小站 2024年11月12日 15:23 江苏
为了研究图像的渐进式传输技术#xff0c;前文提到过小波变换#xff0c;但是发现小波变换非常适合传输缩略图#xff0c;实现渐进式传输每次传输的数据量不一样#xff0c;这是因为每次变换之后低频成分大约是上一…原创 风一样的航哥 航哥小站 2024年11月12日 15:23 江苏
为了研究图像的渐进式传输技术前文提到过小波变换但是发现小波变换非常适合传输缩略图实现渐进式传输每次传输的数据量不一样这是因为每次变换之后低频成分大约是上一次的1/4这样导致重建最小的图之后继续重建上一层传输参数会增加为4倍在带宽有限的情况下采用分段传输就会让用户等待的时间变得越来越长这个某些应用场景是不太能接受的结合压缩算法可以缓解一部分这个问题但是这不算完美的解决方案。于是我继续研究发现可以采用主成分分析来完成我想要的功能。
主成分分析Principal Component Analysis, PCA是一种常用的数据降维技术主要用于减少数据集的维度同时尽可能保留数据的主要特征和结构。PCA通过将原始数据转换到一个新的坐标系中使得新坐标系的第一个轴第一主成分最大化数据的方差第二个轴第二主成分在与第一个轴正交的条件下最大化剩余数据的方差以此类推。
什么是PCA对于科普类的知识可以直接请教AI快速了解大概。
PCA的基本原理 数据标准化PCA通常要求数据是标准化的即每个特征的均值为0方差为1。这是因为PCA对不同尺度的特征敏感标准化可以避免某些特征因尺度较大而占据主导地位。 协方差矩阵计算原始数据的协方差矩阵。协方差矩阵描述了各个特征之间的线性关系和数据的分布情况。 特征值和特征向量求解协方差矩阵的特征值和特征向量。特征值表示对应特征向量方向上的方差大小特征向量表示新的坐标轴方向。 选择主成分根据特征值的大小选择前k个最大的特征值对应的特征向量这些特征向量就是新的坐标轴称为主成分。通常选择的主成分数量k使得累计方差贡献率达到一定的阈值如95%。 数据投影将原始数据投影到新的坐标系中得到降维后的数据。
PCA的应用 数据可视化通过将高维数据降到二维或三维便于在图表中展示和分析。 特征提取提取数据的主要特征去除噪声和冗余信息。 数据压缩减少数据存储和传输的成本。 机器学习作为预处理步骤提高模型的训练效率和预测性能。
PCA的优缺点
优点 降维有效减少数据维度简化模型复杂度。 去噪去除数据中的噪声提高数据质量。 可视化将高维数据降到低维便于可视化和理解。
缺点 信息损失降维过程中会丢失部分信息特别是在选择较少主成分时。 线性假设PCA假设数据之间的关系是线性的对于非线性关系的数据效果不佳。 解释性降维后的主成分通常难以直接解释其物理意义。
有了上述的基本了解再查查别的资料重要的不是手写PCA当然手写也不是很困难而是用PCA先用matlab仿真试一下编写pcasample函数能够实现基于样本变量的主成分分析
本文处理的原图 function [coeff,score,rate]pcasample(X,p)% X:样本矩阵% p提取前p个主成分% coeff特征向量矩阵系数矩阵% score得分向量% reta贡献率% % 将样本归一化% Xzscore(X); %这里好像不用归一化% 计算样本方差的特征向量[V,D]eig(X*X);% 将特征向量中的最大值置为正数for i1:size(V,2)[~,idx]max(abs(V(:,i))); V(:,i)V(:,i)*sign(V(idx,i));end% 将特征根按照从大到小的顺序排列[lambda,locs]sort(diag(D),descend);VV(:,locs);% 只提取前p个主成分coeffV(:,1:p);% 计算得分矩阵scoreX*V(:,1:p);% 计算贡献率ratesum(lambda(1:p))/sum(lambda);end 找个图片运行一下然后发现主成分个数每次都是1说好的有多个主成分按照重要性排列呢怎么只能有一个那不就变成纯纯的压缩了嘛没办法继续研究在《计算机视觉和深度学习实战》这本书里面终于明白了怎么回事。
PCA主要是降维默认输入一张图片就是一整块矩阵最多算是2维数据。所以要处理图像生成多个主成分需要预处理一下。
在一般情况下数字图像矩阵可以被视为二维数组为了将图像数组转换为样本矩阵需要首先对图像进行子块划分然后将每个子块都拉伸成一维的最后将所有子块都组合成一个样本矩阵。其中MATLAB自带的im2col函数可以实现二维数组的分块及向量整合。
继续阅读“主成分分析PCA计算协方差矩阵的特征值和特征向量并选择少数几个主分量代表多变量的方差即协方差结构是一种有效的特征提取方法。数字图像是二维矩阵对其通过PCA处理来提取特征可以在一定比例上保留原始图像的特征信息并且能够大大减少计算量。因此PCA图像压缩处理属于一种降维方法它通过对高维图像块向量空间进行降维处理将多变量的图像块数据表进行最佳综合、简化导出少数几个主分量进而实现在一定比例上保留原始图像信息又能保持图像块之间的不相关性进而保证图像压缩的有效性。”
参考例程
先写一个例程进行PCA分析和重建。 clc;clear;close all;% 读取图像image imread(pic1.png);%%k1;for p1:5:20[Ipca,ratio,contribution]pcaimage(image,p,[24 24]); subplot(2,2,k);imshow(Ipca)title([主成分个数,num2str(p),压缩比,num2str(ratio),贡献率,num2str(contribution)]);kk1;endfunction [Ipca,ratio,contribution] pcaimage(I,pset,block)%pcaimage 使用主成分实现图像的压缩% 此处提供详细说明% I进行压缩的图像% pset主成分个数% Ipca主成分分析重构图像% ratio压缩比% contribution贡献率if nargin1disp(argument is too few.)endif nargin2pset3;endif nargin3block[16 16];end% 将彩色图像转换为灰度图if ndims(I)3Irgb2gray(I);end% 将图像数组转换为样本矩阵Xim2col(double(I),block,distinct);% 样本和变量个数[n,p]size(X);% 主成分个数不能超过变量个数mmin(pset,p);% 提取前p个主成分在压缩之后只需要保存coeff和score[coeff,score,contribution]pcasample(X,m);% 根据系数矩阵重建Xscore*coeff;% 将样本矩阵转换为图像数组Ipcacast(col2im(X,block,size(I),distinct),class(I));% 计算压缩比ration*p/(n*mp*m);endfunction [coeff,score,rate]pcasample(X,p)% X:样本矩阵% p提取前p个主成分% coeff特征向量矩阵系数矩阵% score得分向量% reta贡献率% % 将样本归一化% Xzscore(X);% 计算样本方差的特征向量[V,D]eig(X*X);% 将特征向量中的最大值置为正数for i1:size(V,2)[~,idx]max(abs(V(:,i)));V(:,i)V(:,i)*sign(V(idx,i));end% 将特征根按照从大到小的顺序排列[lambda,locs]sort(diag(D),descend);VV(:,locs);% 只提取前p个主成分coeffV(:,1:p);% 计算得分矩阵scoreX*V(:,1:p);% 计算贡献率ratesum(lambda(1:p))/sum(lambda);end 得到如下的结果 看结果嗯恢复得还行。
回到渐进式传输的实现主成分是可以生成多个的那么可以按照第1主成分、第2主成分、第3主成分……直到传输到够清晰为止看实际应用我觉得20已经差不多了。然后写代码来模拟这个过程
clc;clear;close all;row4;column5;% 读取图像image imread(pic1.png);Irgb2gray(image);psetrow*column;block[30 30]; %需要选择合适的参数让系数最少初步测试30比较少% 将图像数组转换为样本矩阵Xim2col(double(I),block,distinct);% 样本和变量个数[n,p]size(X);% 主成分个数不能超过变量个数mmin(pset,p);% 提取前p个主成分在压缩之后只需要保存coeff和score[coeff,score,contribution]pcasample(X,m);% 根据系数矩阵重建Xscore*coeff;% 将样本矩阵转换为图像数组Ipcacast(col2im(X,block,size(I),distinct),class(I));% 计算压缩比ration*p/(n*mp*m);figuresubplot(1,2,1);imshow(I)title(原图)subplot(1,2,2);imshow(Ipca);title([主成分个数,num2str(m),压缩比,num2str(ratio),贡献率,num2str(contribution)]);figure% 模拟传输过程每次传输一点重建一点gScore[];gcoeff[];for k1:psetgScore[gScore score(:,k)];gcoeff[gcoeff;coeff(:,k)]; %根据系数矩阵重建XgScore*gcoeff; %将样本矩阵转换为图像数组Ipcacast(col2im(X,block,size(I),distinct),class(I));subplot(row,column,k);imshow(Ipca)end 得到结果 嗯模拟重传过程就在“想象”中实现了具体应用还需要更多的处理。注意block[30 30]参数的选择根据矛盾论的主要矛盾当传输带宽是主要限制的时候需要合理选择参数让每一次的传输数据量最小。30这个数据是我大概对比了一下选择了差不多小的。