opencv实战——PCA算法的应用
Posted 唯有自己强大
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了opencv实战——PCA算法的应用相关的知识,希望对你有一定的参考价值。
摘要
上一篇详细叙述了PCA的数学原理opencv——PCA(主要成分分析)数学原理推导 - 唯有自己强大 - 博客园 (cnblogs.com)
本篇就来说一说PCA在opencv项目中的应用:
- 获取物体主要方向(形心)
- 对数据集降维处理
1️⃣什么是PCA?
PCA的主要思想是寻找到数据的主轴方向,由主轴构成一个新的坐标系,这里的维数可以比原维数低,然后数据由原坐标系向新的坐标系投影,这个投影的过程就可以是降维的过程。
PCA 是一种非监督的算法, 能找到很好地代表所有样本的方向, 但这个方向对于分类未必是最有利的,通过下图可以更直观地了解PCA的作用:
假设有上图所示的一组2维点,其中每个维度与您感兴趣的功能相对应。有些人可能会争辩说,这些点是随机的,但有一个线性模式(由蓝线表示),这是很难忽视的。可以将一组点近似于单行,即将点的尺寸从2维降低到1维。维度降低是人工智能和数据挖掘的关键技术。你还可以看到,这些点沿蓝线变化最大,比沿Feature1 轴或Feature2轴变化的要多。这意味着,如果你知道沿蓝线的点的位置,则你掌握的关于该点的信息比你只知道它在Feature1 轴或Feature2轴上的位置要多。
因此,PCA 是一种数学工具,它使我们能够找到数据变化最大的方向。事实上,在图表中的一组点上运行 PCA 的结果由 2 个称为eigenvector(特征向量) 组成,这些载体是数据集的主要组件。
每个 eigenvector(特征向量) 的大小被编码在相应的eigenvalue(特征值)中,并指示数据沿主要组件变化的程度。(通过这个特性可以获取物体(轮廓)的主要方向)
eigenvectors(特征向量) 的开头是数据集中所有点的中心。(通过这个特性可以获取物体(轮廓)的形心)
2️⃣opencv中的PCA类
PCA类的成员函数包括构造函数、运算符重载()、project、backProject这几个函数,还包括成员变量eigenvectors、eigenvalues、mean。使用也很方便。比如我要计算一组向量的PCA,我们只需要定义个PCA实例,获得主成分,调用project测试新样本,也可以再调用backProject重建原始向量,是project的一个逆运算。
以上是关于opencv实战——PCA算法的应用的主要内容,如果未能解决你的问题,请参考以下文章 OPENCV:image_proc 中的 PCA 应用程序错误 OpenCV-Python实战——OpenCV用于图像分割的阈值技术(含大量示例,建议收藏) Opencv 图像识别Android实战(识别扑克牌 5.KNN算法在本例中的应用)