Study-基于主成分分析的图像压缩和重建

简介: Study-基于主成分分析的图像压缩和重建

案例背景


  主成分分析是一种通过降维技术把多个标量转化为少数几个主成分的多元统计方法,这些主成分能够反映原始的大部分信息,通常表示为原始变量的线性组合。为了使这些主成分所包含的信息互不重,则要求各主成分之间互不相关。


  主成分分析能够有效减少数据的维度,并使提取的成分与原始数据的误差达到均方最小,可用于数据的压缩和模式识别的特征提取。本章通过采用主成分分析去除了图像数据的相关性,将图像信息浓缩到几个主成分的特征图像中,有效地实现了图像的压缩,同时可以根据主成分的内容恢复不同的数据图像,满足对图像压缩、重建的不同层次的需要。



基础理论及代码实现


  主成分分析(PCA)通过计算,选择少数几个主分量来代表多变量的方差(即协方差)结构,是一种有效的特征提取方法。数字图像是二维矩阵,对其通过PCA处理来提取特征,可以在一定比例上保留原始图像的特征信息,并且能够大大减少计算量。因此,PCA图像压缩处理属于--种降维方法,它通过对高维图像块向量空间进行降维处理,将多变量的图像块数据表进行最佳综合简化,导出少数几个主分量,进而实现在一定比例上保留原始图像信息,又能保持图像块之间的不相关性,进而保证图像压缩结果的有效性。


主成分分析:


  本节通过编写函数pcaimage来实现对图像进行PCA压缩的目的,通过传入图像矩阵、主成分配置、子块大小来进行PCA处理,返回压缩重构的图像矩阵、压缩比、贡献率信息,具体代码如下所示。


function [coeff,score,rate]=pcasample(X,p)
[V,D]=eig(X'*X);
for i=1:size(V,2)
    [~,idx]=max(abs(V(:,i)));
    V(:,i)=V(:,i)*sign(V(idx,i));
end
[lambda,locs]=sort(diag(D),'descend');
V=V(:,locs);
coeff=V(:,1:p);
score=X*V(:,1:p);
rate=sum(lambda(1:p))/sum(lambda);


图像和样本转换:


  在一般情况下,数字图像矩阵可以视为二维数组,为了将图像数组转换为样本矩阵,需要首先对图像进行子块划分,然后将每个子块拉伸成一维,最后将所有子块组合成一个样本矩阵。其中,MATLAB自带的im2col()函数可以实现二维数组的分块及向量整合。


  有一点需要注意,im2col()是将 每个子块拉伸成列向量,col2im()是 将列向量重组成子块,而样本矩阵是每行一个样本,在进行主成分分析时,就要相对样本矩阵进行转置。另外,im2col()和 col2im()函数只能对二维数组进行操作,如果是三位彩色图像,则需要自己编写图像分块和重组函数,或者先将彩色图转换为灰度图。


基于主成分分析的图像压缩:


  主成分分析(PCA)通过计算,选择少数几个主分量来代表多变量的方差(即协方差)结构,是一种有效的特征提取方法。数字图像是二维矩阵,对其通过PCA处理来提取特征,可以在一定比例上保留原始图像的特征信息,并且能够大大减少计算量。因此,PCA图像压缩处理属于--种降维方法,它通过对高维图像块向量空间进行降维处理,将多变量的图像块数据表进行最佳综合简化,导出少数几个主分量,进而实现在一定比例上保留原始图像信息,又能保持图像块之间的不相关性,进而保证图像压缩结果的有效性。


  本节通过编写函数pcaimage来实现对图像进行PCA压缩的目的,通过传入图像矩阵、主成分配置、子块大小来进行PCA处理,返回压缩重构的图像矩阵、压缩比、贡献率信息,具体代码如下所示。


function [Ipca,ratio,contribution]=pcaimage(I,pset,block)
if nargin<1
    I=imread('football.jpg');
end
if nargin<2
    pset=3;
end
if nargin<3
    block=[16 16];
end
if ndims(I)==3
    I=rgb2gray(I);
end
X=im2col(double(I),block,'distinct')';
[n,p]=size(X);
m=min(pset,p);
[coeff,score,contribution]=pcasample(X,m);
X=score*coeff';
Ipca=cast(col2im(X',block,size(I),'distinct'),class(I));
ratio=n*p/(n*m+p*m);


  为了比较不同参数下执行PCA图像压缩的效果,本实验选择在循环结构中调用pcaimage()程,并配置不同数量的主成分参数来对图像进行压缩和重构,比较压缩比和贡献率,具体代码如下所示:


clc; clear all; close all;
I=imread('liftingbody.png');
k=1;
figure('Units', 'Normalized', 'Position', [0 0 1 1]);
for p=1:5:20
    [Ipca,ratio,contribution]=pcaimage(I,p,[24 24]);
    subplot(2,2,k);    
    imshow(Ipca)
    title(['主成分个数=',num2str(p),...
        ',压缩比=',num2str(ratio),...
        ',贡献率=',num2str(contribution)],'fontsize',14);
    k=k+1;
end


image.png


 由图可以看出,基于主成分分析的图像压缩技术具有很高的压缩比,同时达到高信噪比。例如,主成分个数为16时,压缩比达到16.43;主成分个数为50时,压缩比达.到5.26,此时肉眼基本无法辨识失真。


相关文章
|
机器学习/深度学习 编解码
ICCV 2023 超分辨率(Super-Resolution)论文汇总
ICCV 2023 超分辨率(Super-Resolution)论文汇总
881 0
|
存储 SQL 缓存
Hadoop入门(一篇就够了)
Hadoop入门(一篇就够了)
30365 4
Hadoop入门(一篇就够了)
|
机器学习/深度学习 算法 数据挖掘
【Python机器学习】Mean Shift、Kmeans聚类算法在图像分割中实战(附源码和数据集)
【Python机器学习】Mean Shift、Kmeans聚类算法在图像分割中实战(附源码和数据集)
525 0
【Python机器学习】Mean Shift、Kmeans聚类算法在图像分割中实战(附源码和数据集)
|
12月前
|
机器学习/深度学习 存储 大数据
在大数据时代,高维数据处理成为难题,主成分分析(PCA)作为一种有效的数据降维技术,通过线性变换将数据投影到新的坐标系
在大数据时代,高维数据处理成为难题,主成分分析(PCA)作为一种有效的数据降维技术,通过线性变换将数据投影到新的坐标系,保留最大方差信息,实现数据压缩、去噪及可视化。本文详解PCA原理、步骤及其Python实现,探讨其在图像压缩、特征提取等领域的应用,并指出使用时的注意事项,旨在帮助读者掌握这一强大工具。
706 4
Google Earth Engine(GEE)——利用归一化建筑指数NDBI(不透水层)提取建筑物
Google Earth Engine(GEE)——利用归一化建筑指数NDBI(不透水层)提取建筑物
3190 0
Google Earth Engine(GEE)——利用归一化建筑指数NDBI(不透水层)提取建筑物
|
5月前
|
搜索推荐 Linux iOS开发
qBittorrent:专业级磁力种子下载工具,高速稳定 + 全功能资源管理
qBittorrent 是一款免费、开源且无广告的 P2P BitTorrent 客户端,支持 Windows、Mac 和 Linux 系统。它功能强大,包含 DHT、Peer Exchange、加密等技术,支持下载优先级设置、RSS 订阅和远程控制。用户可通过 Torrent 文件或磁力链接下载资源,并能优化连接设置以提升速度。常见问题如“元数据下载”或 DHT 连接不佳时,建议使用热门种子或调整 trackers。
4395 0
|
监控 开发者 Python
Python 默认 `logging` 打印级别详解
本文详细介绍了 Python `logging` 模块的默认打印级别及其配置方法。`logging` 模块支持 `DEBUG`、`INFO`、`WARNING`、`ERROR` 和 `CRITICAL` 五个日志级别,默认级别为 `WARNING`。文章通过示例代码展示了如何设置和使用不同日志级别,并介绍了进一步的配置选项,如日志格式和文件输出。
507 8
|
文字识别 自然语言处理 数据可视化
Qwen2.5 全链路模型体验、下载、推理、微调、部署实战!
在 Qwen2 发布后的过去三个月里,许多开发者基于 Qwen2 语言模型构建了新的模型,并提供了宝贵的反馈。在这段时间里,通义千问团队专注于创建更智能、更博学的语言模型。今天,Qwen 家族的最新成员:Qwen2.5系列正式开源
Qwen2.5 全链路模型体验、下载、推理、微调、部署实战!
|
机器学习/深度学习 数据采集 算法
Python实现PCA降维和KNN人脸识别模型(PCA和KNeighborsClassifier算法)项目实战
Python实现PCA降维和KNN人脸识别模型(PCA和KNeighborsClassifier算法)项目实战