做瑜珈孕妇高清图网站,延安网站建设,手机网站图片 触摸 放大代码 js,中铁建设团门户网登录入口『youcans 的 OpenCV 例程300篇 - 总目录』
【youcans 的 OpenCV 例程300篇】234. 特征提取之主成分分析#xff08;PCA#xff09;
5.1 特征提取的方法
初步获取的图像特征维数通常很大#xff0c;而且往往包含一定的无关或冗余特征。特征提取是指从原始特征中通过数学变…『youcans 的 OpenCV 例程300篇 - 总目录』
【youcans 的 OpenCV 例程300篇】234. 特征提取之主成分分析PCA
5.1 特征提取的方法
初步获取的图像特征维数通常很大而且往往包含一定的无关或冗余特征。特征提取是指从原始特征中通过数学变换得到一组新的特征以降低特征维数消除相关性减少无用信息。
降维方法可以从事物之间错综复杂的关系中找出一些主要因素从而能有效利用大量统计数据进行定量分析解释变量之间的内在关系得到对事物特征及其发展规律的一些深层次的启发。
众多原始变量之间往往具有一定的相关关系。这意味着相关变量所反映的信息有一定程度的重叠因此可以用较少的综合指标聚合、反映众多原始变量所包含的全部信息或主要信息。
特征提取分为线性映射方法和非线性映射方法。
线性映射方法主要有
主成分分析PCA按均方误差损失最小化原则将高维原始数据空间变换到低维特征向量空间。线性判别函数LDA将高维原始数据向线性判别超平面的法向量上投影使样本数据在新投影空间具有最大的类间距离和最小的类内距离实现最大区分度高内聚低耦合。多维标度分析 MDS根据样本之间的距离关系或不相似度关系在低维空间里生成对样本的一种表示。度量型 MDS 把样本间的距离关系或不相似度关系看作一种定量的度量尽可能的在低维空间里保持这种度量关系非度量型 MDS 把样本间的距离关系或不相似度关系看作一种定性的关系在低维空间里只需保持这种关系的顺序。
非线性映射方法主要有
基于核的非线性降维通过核函数对样本进行非线性变换后再在变换空间进行线性映射如核主成分分析KPCA、核线性判别函数KLDA。核方法通过选择不同的核函数类型反映了对数据分布的不同假设可以看作对数据引入了一种非线性距离度量。二维化和张量化 将数据映射到二维空间如二维主成分分析2DPCA、二维线性判别分析2DLDA、二维典型相关分析2DCCA流形学习方法从高维采样数据中恢复低维流形结构并求出相应的嵌入映射。基本思想是通过局部距离来定义非线性距离度量在样本分布较密集的情况下可以实现各种复杂的非线性距离度量。 具体方法如等距特征映射 ISOMap 拉普拉斯特征映射 LE 局部线性嵌入 LPP。
此外还可以通过聚类分析、神经网络方法进行数据降维。本质上非线性映射的思想和算法与神经网络是相通的。 5.2 主成分分析的数学方法
主成分分析Principal Components AnalysisPCA是一种基于统计的数据降维方法又称主元素分析、主分量分析。主成分分析只需要特征值分解就可以对数据进行压缩、去噪应用非常广泛。
众多原始变量之间往往具有一定的相关关系。这意味着相关变量所反映的信息有一定程度的重叠因此可以用较少的综合指标聚合、反映众多原始变量所包含的全部信息或主要信息。主成分分析方法研究特征变量之间的相关性、相似性将一组相关性高的高维变量转换为一组彼此独立、互不相关的低维变量从而降低数据的维数。
主成分分析方法的思想是将高维特征p维映射到低维空间k维上新的低维特征是在原有的高维特征基础上通过线性组合而重构的并具有相互正交的特性称为主成分特性。
通过正交变换构造彼此正交的新的特征向量这些特征向量组成了新的特征空间。将特征向量按特征值排序后样本数据集中所包含的全部方差大部分就包含在前几个特征向量中其后的特征向量所含的方差很小。因此可以只保留前 k个特征向量而忽略其它的特征向量实现对数据特征的降维处理。
主成分分析的基本步骤是对原始数据归一化处理后求协方差矩阵再对协方差矩阵求特征向量和特征值对特征向量按特征值大小排序后依次选取特征向量直到选择的特征向量的方差占比满足要求为止。
主成分分析方法得到的主成分变量具有几个特点1每个主成分变量都是原始变量的线性组合2主成分的数目大大少于原始变量的数目3主成分保留了原始变量的绝大多数信息4各主成分变量之间彼此相互独立。
算法的基本流程如下
1归一化处理数据减去平均值 2通过特征值分解计算协方差矩阵 3计算协方差矩阵的特征值和特征向量 4将特征值从大到小排序 5依次选取特征值最大的 k个特征向量作为主成分直到其累计方差贡献率达到要求 6将原始数据映射到选取的主成分空间得到降维后的数据。
主成分分析方法的主要优点是 1仅以方差衡量信息量不受数据集以外的因素影响 2各主成分之间正交可消除原始数据各变量之间的相互影响 3方法简单易于实现。
在图像处理中把每幅二维图像拉伸为一维向量即展平为一维数组。一组 m 幅图像就构造为一个 m 维向量使用 Karhunen-Loève transformKLT 变换得到变换矩阵选取特征值最大的 k个特征向量作为主成分从而实现特征降维。
图像压缩过程是把一组原始图像变换成低维向量的过程图像重建就是由低维向量变换重建图像组的过程。使用主成分分析进行图像压缩和重建会有少量信息损失但可以把损失控制到很小。
对于一组 P 维向量 X通过线性变换转换为另一组 K 维向量 Y。
向量 Xi 包含 m 个数据样本记为
X[X1,X2,...,Xp][x11x12⋯x1px21x22⋯x2p⋮⋮⋱⋮xm1xm2⋯xmp]\begin{aligned} X [X_1,X_2,...,X_p] \\ \begin{bmatrix} x_{11} x_{12} \cdots x_{1p} \\ x_{21} x_{22} \cdots x_{2p} \\ \vdots \vdots \ddots \vdots\\ x_{m1} x_{m2} \cdots x_{mp} \\ \end{bmatrix} \end{aligned} X[X1,X2,...,Xp]⎣⎡x11x21⋮xm1x12x22⋮xm2⋯⋯⋱⋯x1px2p⋮xmp⎦⎤
计算平均值 ujE{Xj}1m∑i1mXij,j1,...pu_j E\{ X_j\} \frac{1}{m} \sum_{i1}^m X_{ij}, \quad j1,...p ujE{Xj}m1i1∑mXij,j1,...p
计算协方差矩阵 CxE{(X−u)(X−u)T}C_x E\{ (X-u) (X-u)^T \} CxE{(X−u)(X−u)T}
协方差矩阵 CxC_xCx 是实对称矩阵可以协方差矩阵的特征向量和对应的特征值。
通过变换矩阵 A 将 X 映射为由 Y 表示的向量 YA∗(X−u)Y A * (X-u) YA∗(X−u) Y 的协方差矩阵用对角阵 A 和 Cx 表示即 CyA∗Cx∗ATC_y A*C_x * A^T CyA∗Cx∗AT 则 Cy 是一个对角阵 Cy[λ10λ2⋱0λp]Cy \begin{bmatrix} \lambda_1 0 \\ \lambda_2 \\ \ddots \\ 0 \lambda_p \\ \end{bmatrix} Cy⎣⎡λ10λ2⋱0λp⎦⎤ λi\lambda_iλi 是 CxCxCx 的特征值将其按降序排列。
选择前 K 个特征向量作为主成分特征可以重建 p 维向量 X并使均方误差最小。 X^AkT∗Tu\hat{X} A_k^T * T u X^AkT∗Tu
例程 14.15特征描述之主分量
本例程的图像来自 R.C.Gonzalez 《数字图像处理第四版》P622 例11.16。
原始图像显示了对应于 6 个波段的 6 幅多光谱卫星图像可见蓝光450-520nm、可见绿光520-600nm、可见红光630-690nm、近红外760-900nm、中红外1550-1750nm和热红外10400-12500nm。
本例的目的是说明如何使用主分量作为图像特征。
python# # 14.15 特征描述之主成分分析# 读取光谱图像组img cv2.imread(../images/Fig1138a.tif, flags0)height, width img.shape[:2] # (564, 564)nBands 6 # 光谱波段种类snBands [a,b,c,d,e,f] # Fig1138a~fimgMulti np.zeros((height, width, nBands)) # (564, 564, 6)mbMatrix np.zeros((img.size, nBands)) # (318096, 6)print(imgMulti.shape, mbMatrix.shape)# 显示光谱图像组fig1 plt.figure(figsize(9, 6)) # 原始图像6 个不同波段fig1.suptitle(Spectral image of multi bands by NASA)for i in range(nBands):path ../images/Fig1138{}.tif.format(snBands[i])imgMulti[:,:,i] cv2.imread(path, flags0) # 灰度图像ax1 fig1.add_subplot(2,3,i1)ax1.set_xticks([]), ax1.set_yticks([])ax1.imshow(imgMulti[:,:,i], gray) # 绘制光谱图像 snBands[i]plt.tight_layout()# 主成分分析 (principal component analysis)mbMean np.zeros((nBands,))for i in range(nBands):mbArray imgMulti[:,:,i].flatten() # 转为一维数组mbMean[i] mbArray.mean()mbMatrix[:,i] mbArray - mbMean[i] # 数据标准化 (318096, 6)# cov np.cov(mbMatrix.transpose(),rowvar0) # 以列为变量计算协方差矩阵 (6,6)cov np.cov(mbMatrix, rowvar0) # 以列为变量计算协方差矩阵 (6,6)# eigenvalues: 特征值一维数组 (M,)eigenvectors: 特征向量二维矩阵 (M,M)eigenValues, eigenVectors np.linalg.eig(cov) # 计算特征值和特征向量principal np.matmul(mbMatrix, eigenVectors) # 主元素变换投影到特征向量方向 (318096, 6)print(eigenValues.shape, eigenVectors.shape, principal.shape)print(Eigenvalues:\n, eigenValues.round(4)) # 特征值从大到小# print(Eigenvectors:\n, eigenVectors.round(4))# 显示主成分变换图像fig2 plt.figure(figsize(9, 6)) # 主元素图像q6fig2.suptitle(Principal component images)imgPCA np.zeros((height, width, nBands)) # (564, 564, 6)for i in range(nBands):pca principal[:, i].reshape(-1, img.shape[1]) # 主元素图像 (564, 564)imgPCA[:,:,i] np.uint8(cv2.normalize(-pca, (height, width), 0, 255, cv2.NORM_MINMAX))ax2 fig2.add_subplot(2,3,i1)ax2.set_xticks([]), ax2.set_yticks([])ax2.imshow(imgPCA[:,:,i], gray) # 绘制主成分图像plt.tight_layout()# 保留的主成分数量remainRatio 0.95 # 设定的主成分累计方差贡献率remainValue remainRatio * sum(eigenValues)IndexDes np.argsort(-eigenValues) # 特征值降序排列的索引topKValue 0.0for i in range(len(eigenValues)):topKValue eigenValues[IndexDes[i]] # 降序排列的第 i 个特征值print(k{}, topKValue {:.2f}, topKRatio {:.4f}.format(i, topKValue, topKValue/sum(eigenValues)))if topKValue remainValue:K i 1 # 012- K3breakprint(number of PCA features: K, K) # 主成分方差贡献率 95% 时的特征维数 K3indexPCA IndexDes[:K] # 选择特征值最大的 K 个特征向量的索引eigenVectPCA eigenVectors[:, indexPCA] # 选择 K 个主要特征向量组成降维特征矩阵 (P6, K3)print(PCA eigenvalues:\n, eigenValues[indexPCA].round(4)) # 特征值从大到小print(PCA eigenvectors:\n, eigenVectPCA.round(4))运行结果
(564, 564, 6) (318096, 6) (6,) (6, 6) (318096, 6) Eigenvalues: [10344.3048 2965.8977 1400.635 203.4555 94.2774 31.0373] k0, topKValue 10344.30, topKRatio 0.6878 k1, topKValue 13310.20, topKRatio 0.8850 k2, topKValue 14710.84, topKRatio 0.9781 number of PCA features: K 3 PCA eigenvalues: [10344.3048 2965.8977 1400.635 ] PCA eigenvectors: [[-0.489 -0.0124 -0.2301] [-0.4777 0.0394 -0.3012] [-0.4899 -0.022 -0.315 ] [ 0.1375 0.7986 0.0431] [-0.2188 0.5981 0.0165] [-0.4753 -0.0486 0.8689]] 【本节完】 版权声明 本例程的图像来自 R.C.Gonzalez 《数字图像处理第四版》P622 例11.16。 youcansxupt 原创作品转载必须标注原文链接(https://blog.csdn.net/youcans/article/details/125761655) Copyright 2022 youcans, XUPT Crated2022-7-15 234. 特征提取之主成分分析PCA 235. 特征提取之主成分分析sklearn 236. 特征提取之主成分分析OpenCV