cvCalcEigenObject——opencv内置PCA算法的第一个函数

【opencv实战 PCA算法的应用 】 假设有上图所示的一组2维点,其中每个维度与您感兴趣的功能相对应。这意味着,如果你知道沿蓝线的点的位置,则你掌握的关于该点的信息比你只知道它在Feature1 轴或Feature2轴上的位置要多。PCA的主要思想是寻找到数据的主轴方向,由主轴构成一个新的坐标系,这里的维数可以比原维数低,然后数据由原坐标系向新的坐标系投影,这个投影的过程就可以是降维的过程。在图像上运行 PCA 后的结果如图,由此产生的轴是数据点差异最大的轴,这不需要反映形状的关键结构特征,尽管如此,它还是对方向的有效描述,可以获取任何形状。 阅读详情

cvCalscEigenObject()函数,包含于<cvAux.h>中。在PCA人脸识别的程序中,属于核心算法。

先翻译一段注解,原文来自:

http://www710.univ-lyon1.fr/~bouakaz/OpenCV-0.9.5/docs/ref/OpenCVRef_ObjectRecognition.htm

void cvCalcEigenObjects( int nObjects, void* input, void* output, int ioFlags, int ioBufSize, void* userData,

CvTermCriteria* calcLimit, IplImage* avg, float* eigVals )

输入为目标向量,计算正交特征基向量(orthonormal eigen basis)和目标平均值。

nObjects:
目标的数量。
input:
IplImage队列(数组)的指针,或者根随ioFlag的值变化的读回调函数(read callback function)

函数。
output:
对于目标的队列(数组)的指针,或者根随参数值变化的写回调函数(write callback functions)。
ioFlags:

。

ioBuffSize:
buffsize,0为未知大小。
userData:
指向回调函数(callback function)必须数据结构体的指针。
calcLimit:
终止迭代计算目标特征的条件。
avg:
avg。
eigVals:
以降序排列的特征值的行向量指针。可以为0。

cvCalcEigenObject计算出正交特征基(eigen face,而且是正交的,第二点是我猜的),以及输入目标的平均值。根据ioFlags参数,此函数可用在直接访问和回调函数两种模式下。根据calcLimit的参数,计算会在前maxIters主要特征目标被提取后结束(这句话有点绕,应该就是提取了前int_max_iter个特征值,),另一种结束的情况是:目前特征值同最s大特征值的比值降至calcLimit的epsilon值之下。


clacLimit的type参数必须为CV_TERMCRIT_NUMB, CV_TERMCRIT_EPS,

or CV_TERMCRIT_NUMB | CV_TERMCRIT_EPS。
函数返回maxIter&epsilond的真值。

平均值avg
计算得到的特征目标,排序是根据相应的特征值降序而得。

程序中这个函数的例子是这样的。

// compute average image, eigenvalues, and eigenvectors
cvCalcEigenObjects(
  nTrainFaces,
  (void*)faceImgArr,
  (void*)eigenVectArr,
  CV_EIGOBJ_NO_CALLBACK,
  0,
  0,
  &calcLimit,
  pAvgTrainImg,
  eigenValMat->data.fl);

参数第一个不用说。faceImgArr,是IplImage**,存有nTrainFaces个训练用人脸。eigenVectArr同样也是IplImage**,是需要计算的特征脸(eigenface),每个大小和训练脸相同,取前nEigens个储存。

这段代码有助于理解。

for(i=0; i<nEigens; i++)
  eigenVectArr[i] = cvCreateImage(faceImgSize, IPL_DEPTH_32F, 1);

后面3个参数,表明不需要回调函数。

calcLimit是一个迭代算法终止准则。

赋值如下calcLimit = cvTermCriteria( CV_TERMCRIT_ITER, nEigens, 1);

它的类型定义如下:

typedef struct CvTermCriteria

{

  int type;  int max_iter;    //最大迭代次数

  double epsilon;    //结果精确性

}

看刚才翻译的那段已经说明:

根据calcLimit的参数,计算会在前maxIters主要特征目标被提取后结束(这句话有点绕,应该就是提取了前int_max_iter个特征值),另一种结束的情况是:目前特征值同最大特征值的比值降至calcLimit的epsilon值之下。在这个迭代算法终止条件的约束下,于是就产生了nEigen个特征脸(object's eigen vector)

程序后两个参数,一个是平均目标,另一个是存nEigen个特征值的向量。

核心已经包含在opencv里面了,我们通过这个函数可以方便地调用这个算法、高效地实现目的。

c++ opencv人臉识别 PCA实现(六) 這是opencv中的一個sample: 上圖先: PCA的数学原理 PCA(Principal Component Analysis)是一种常用的数据分析方法。PCA通过线性变换将原始数据变换为一组各维度线性无关的表示,可用于提取数据的主要特征分量,常用于高维数据的降维。下面我将以opencv里人脸识别为例。 对一副宽p、高q的二维灰度图,要完整表示该图像,需要m = pq维的向量空间,比如10... 阅读详情

相关推荐

opencv实现PCASift算法

opencv实现的PCASift算法,步骤明确。在你电脑上运行可能会提示丢失cvaux.lib文件,在我的资源中提供了该文件,下载copy到你的opencv相应的库文件夹下。

cvCalcEigenObject——opencv内置PCA算法的函数小记。

cvCalscEigenObject()函数,包含于<cvAux.h>中。在PCA人脸识别的程序中,属于核心算法。 先翻译一段注解,原文来自: http://www710.univ-lyon1.fr/~bouakaz/OpenCV-0.9.5/docs/ref/OpenCVRef_ObjectRecognition.htm void cvCalcEigenObjects( ...

weixin_30908707的博客 185

Cadence Allegro 17.4学习记录开始01-原理图Capture CIS 17.4

Orcad的学习记录

qq_31444421的博客 1万+

机器学习公式推导与代码实现-无监督学习模型

机器学习公式推导与代码实现-无监督学习模型

qq_40107571的博客 655

wflow模型hbv

毛管水的处理 😄 快速流的处理 K4是为了产生基流的 找到了令人激动的kenematic模块 😄

m0_46268055的博客 778

深度强化学习在足式机器人中的应用 (一):基础原理与仿真环境

我们将首先深入探讨其背后的核心挑战与技术栈,然后详细推导机器人学和强化学习的基本数学原理,特别是剖析在机器人控制领域表现卓越的PPO算法。下面的独立Python脚本展示了Isaac Gym的基本API用法,加载一个Go1机器人(假设URDF已准备好),并让它执行一个简单的预设动作(正弦波运动),以此来熟悉仿真流程。:代码的核心是直接操作GPU上的PyTorch张量,避免了CPU和GPU之间的数据拷贝,这是实现高性能的关键。:所有计算(如伪策略中的正弦波计算)都应该是向量化的,一次性为所有。

VectorShift的博客 228

OPENCV中的PCA使用

对于PCA,一直都是有个概念,没有实际使用过,今天终于实际使用了一把,发现PCA还是挺神奇的。 在OPENCV中使用PCA非常简单,只要几条语句就可以了。1、初始化数据 //每一行表示一个样本 CvMat* pData = cvCreateMat( 总的样本数, 每个样本的维数, CV_32FC1 ); CvMat* pMean = cvCreateMat(1, 样本的维数, CV_32FC1); //pEigVals中的每个数表示一个特征值 CvMat* pEigVals = cvCreateMat(1,

landsuper的专栏 5323

华为MetaERP PTP采购到应付全流程解析

摘要:本文系统解析华为MetaERP中的PTP(采购到应付)全流程管理方案,涵盖从采购申请到付款执行的完整业务流程。文章详细分解了PR、PO、GR、IV、AP等关键环节的财务核算规则,并提供了预算校验、库存更新等Python代码示例。同时阐述了IT落地架构设计,包括会计引擎配置、系统集成方案及银企直连支付接口实现。该方案通过三单匹配自动化和智能会计引擎,将处理效率提升10倍(200笔/人天→2000笔/人天),实现98%的自动化率,为集团企业提供了高效的数字化财务管理样板。文中所有技术方案均需根据实际场景调

金牌架构师 1743

OPENCV中的PCA使用(ZZ)

对于PCA,一直都是有个概念,没有实际使用过,今天终于实际使用了一把,发现PCA还是挺神奇的。     在OPENCV中使用PCA非常简单,只要几条语句就可以了。1、初始化数据      //每一行表示一个样本     CvMat* pData = cvCreateMat( 总的样本数, 每个样本的维数, CV_32FC1 );      CvMat* pMean = cvCr

conanlrj的专栏 1900

【Matlab】从零开始掌握 MATLAB 安装激活:从环境搭建到问题解决全指南

打开 MATLAB,点击 “主页 - 设置路径”;点击 “添加文件夹”,选择自定义的工作文件夹,点击 “保存”,重启 MATLAB 生效。MATLAB R2024a 的安装与激活是开启 MATLAB 学习的第一步,也是构建稳定学习环境的基础。本文从安装前准备、分步操作、验证测试、问题解决到环境优化,完整覆盖了新手所需的所有知识点 —— 核心要点在于:确认系统兼容、使用合法授权、选择纯英文安装路径、完成功能验证。

unber的博客 596

CT探测器普遍采用“星形拓扑+多ADC模组”架构的TDC(时间数字转换器)设计方案

本文提出一种基于TDC反馈机制的CT探测器时钟同步方法,通过延时测量、偏差计算和动态补偿三步硬件流水线,实现高精度同步。系统采用Xilinx Kintex UltraScale FPGA内置CARRY8进位链构建3.5ps分辨率的TDC,结合多级比较器和延迟单元,形成闭环反馈控制。实验表明,在512通道、1.28m传输距离下,同步精度稳定在10ps以内,较传统方案提升两个数量级,并能动态补偿干扰抖动。该方案解决了传统方法在CT旋转腔体环境下精度不足的问题,为下一代超高清CT提供了有效的时钟同步解决方案。

whm128的博客 274

cvCalcEigenDecomposite——opencv内置PCA算法

PCA(Eigenface)方法是人脸识别的主流方法之一。cvEigenDecomposite()函数作用是将人脸图像通过Eigenface变换矩阵,投射到子空间中。子空间中的人脸向量,是一个1×nEigens(nEigens由自己取得)的行向量,极大地降低了数据维度,便于下一步的聚类、识别。结合具体例子,尽量清楚地跟大家讨论这个函数的用途。     函数说明如下: EigenDecomp

踩可夫司机的专栏 1892

3.38 工业缺陷检测实战:物体表面缺陷检测,从图像处理到深度学习

本文介绍了工业缺陷检测的完整流程,从传统图像处理到深度学习方法。首先定义了缺陷检测任务的目标和应用场景,然后详细讲解了传统图像处理方法(边缘检测、阈值分割等)和深度学习方法(分类、检测、分割模型)。文章最后总结了核心要点,提出了思考题和实践建议,建议从简单方法开始逐步优化。下一篇将介绍工业视觉基础技术——相机标定与角点检测。

yonggeit的博客 2885

基于PCA的人脸识别

人脸识别要牵涉到一些数学计算和一些算法的理解,虽然这些算法和计算opencv已经帮我们完成,但我们还是要对其有一定的了解,才能进行人脸识别的实践,毕竟基础不牢,上层建筑也不稳。 要理解如何进行人脸识别,首先一定要理解主成分分析算法,即PCA,使用这种算法的原因是因为,一般图像数据量太大,而且其中的大部分数据点对我们进行人脸识别没有太大的帮助,因此为了减少数据量,采用了主成分分析法将数据进行压缩(

吴半止的专栏 844

Vue3 - Element Plus 日期选择器 el-date-picker,设置 type=week 变成周选择器后,将选择周时修改为 “周一至周日“ 为一组范围(详细示例代码,新手小白秒会)

vue3,element-plus,DatePicker日期选择器,el-date-picker,周,type=week,周选择器,日期选择器week怎么拿到具体的时间范围,如何取week周选择器的value值,format如何设置,时间选择器按周选择时展示具体日期范围,vue3elementPlus日期选择器选择一周7天的数据格式怎么拿到,el-date-picker设置type等于week后怎么设置format属性,format和value-format怎么设置,范围选择器周,一周,选择一周7天时间

🏆 前端领域优质创作者 1万+

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

OpenCV人脸识别的原理 .

在之前讲到的人脸测试后,提取出人脸来,并且保存下来,以供训练或识别是用,提取人脸的代码如下: void GetImageRect(IplImage* orgImage, CvRect rectInImage, IplImage* imgRect,double scale) { //从图像orgImage中提取一块(rectInImage)子图像imgRect IplImage *res

liulina603的专栏 4万+

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

(学习笔记三)——人脸识别

人脸识别要牵涉到一些数学计算和一些算法的理解,虽然这些算法和计算opencv已经帮我们完成,但我们还是要对其有一定的了解,才能进行人脸识别的实践,毕竟基础不牢,上层建筑也不稳。 要理解如何进行人脸识别,首先一定要理解主成分分析算法,即PCA,使用这种算法的原因是因为,一般图像数据量太大,而且其中的大部分数据点对我们进行人脸识别没有太大的帮助,因此为了减少数据量,采用了主成分分析法将数据进行压缩(

keep thinking的专栏 1万+

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

openCV学习笔记(十一) —— 人脸识别的原理

在之前讲到的人脸测试后,提取出人脸来,并且保存下来,以供训练或识别是用,提取人脸的代码如下: void GetImageRect(IplImage* orgImage, CvRect rectInImage, IplImage* imgRect,double scale) { //从图像orgImage中提取一块(rectInImage)子图像imgRect IplImage *resul...

天空的博客 1万+

opencv求特征值和特征向量

IplImage:表示图片。  cvTermCriteria:用来决定学习演算法何时结束。  cvSize:用来表示图片大小。  cvCvtColor:用来转换图片的色彩空间。  cvLoadImage:载入一张图片。  cvCreateImage:依照IplImage结构配置记忆体。  cvCalcEigenObjects:计算传入影响阵列的eigen vector(特征向量)、  eige

一个爱编程的人专栏 3696

人脸识别

原文地址:http://blog.youkuaiyun.com/longxiaoshi/article/details/7411333 人脸识别要牵涉到一些数学计算和一些算法的理解,虽然这些算法和计算opencv已经帮我们完成,但我们还是要对其有一定的了解,才能进行人脸识别的实践,毕竟基础不牢,上层建筑也不稳。 要理解如何进行人脸识别,首先一定要理解主成分分析算法,即PCA,使用这种算法的原因是因为,

业精于勤,荒于嬉;行成于思,毁于随。 1134

接收机灵敏度全解析:从热噪声到工程优化

在无线通信系统中,接收机灵敏度是衡量设备接收微弱信号能力的核心指标,它在蜂窝网络、Wi-Fi、蓝牙、LoRa等场景中直接影响链路预算和覆盖范围。灵敏度的物理基础源于热噪声,其功率谱密度为-174dBm/Hz,构成了理论极限;实际灵敏度则由噪声系数、信道带宽和最小解调信噪比共同决定。工程上,低噪声放大器(LNA)的选型、前级无源器件的插入损耗、本振相位噪声以及ADC量化噪声等因素都会使灵敏度恶化。通过级联噪声系数分析,可以明确各级对整体性能的贡献,从而优化设计。测试环节中,功率搜索法和链路校准是获得真实灵敏度

weixin_33912246的博客 440

特征值和特征向量的实际意义

在之前讲到的人脸测试后,提取出人脸来,并且保存下来,以供训练或识别是用,提取人脸的代码如下: [html] view plain copy  print?void GetImageRect(IplImage* orgImage, CvRect rectInImage, IplImage* imgRect,double scale)  {      //从图像orgImage中提取一块(rectIn...

yu132563的专栏 5097

OpenCV中cvCalcPCA的几个问题

在人脸表情所用的特征中,LBP特征中是一个常用的特征。但是LBP特征提取后,维数太高,即使使用LBP直方图的特征仍然很高,因此需要降维。一个比较好的降维方法就是PCA。在OpenCV中,cvCalcPCA函数可以直接调用进行PCA降维。以前在人脸识别的程序中,我曾经调用过这个函数,这次再次使用,但是却出错了。主要有两个问题: 1 特征值和特征向量的行列数设置问题 如果按如下方式使用,也就是根据

6501
上一篇: VS2008中配置GDI+
下一篇: cvCalcEigenDecomposite——opencv内置PCA算法的第二个函数
大老鼠
博客等级 码龄15年 14粉丝 5原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值