图像的高级处理中,协方差矩阵计算是必不可少的,但opencv关于这方面的资料却相当少。

首先,利用matlab计算一下,便于比较:

>> data=[1,2,3;10,20,30]

data =

1 2 3

10 20 30

>> convar=cov(data)

convar =

40.5000 81.0000 121.5000

81.0000 162.0000 243.0000

121.5000 243.0000 364.5000

在计算协方差矩阵时,在源数据矩阵中,默认以行为样本数,以列为维度。如果你是相反的,那么结果可能和我的不一样。

在opencv2中,先利用公式来进行计算:

代码:

Mat data = (Mat_(2, 3) << 1, 2, 3, 10, 20, 30);

cout<< "data:"<

Mat means(1, data.cols, data.type(), Scalar::all(0));for (int i = 0; i < data.cols; i++)

means.col(i)= sum(data.col(i)) / data.rows; //计算列均值

cout << "means:"<

Mat tmp= repeat(means, data.rows, 1);

data= data - tmp; //源数据减去均值

Mat covar = (data.t()*data) / (data.rows - 1); //(X'*X)/n-1

cout << "covar:"<

结果:

data:

[1, 2, 3;

10, 20, 30]

means:

[5.5, 11, 16.5]

covar:

[40.5, 81, 121.5;

81, 162, 243;

121.5, 243, 364.5]

请按任意键继续. . .

结果和matlab计算是一样的。

还有一种比较简便的方法,那就是使用opencv自带的函数calcCovarMatrix来计算。

void calcCovarMatrix(InputArray samples, OutputArray covar, OutputArray mean, int flags, int ctype=CV_64F)

代码:

Mat covar, means;

Mat data= (Mat_(2, 3) << 1, 2, 3, 10, 20, 30);

cout<< "data:" << endl << data <

calcCovarMatrix(data, covar, means, CV_COVAR_NORMAL| CV_COVAR_ROWS);

cout << "means:" << endl << means <

cout<< "covar:" << endl << covar << endl;

结果:

data:

[1, 2, 3;

10, 20, 30]

means:

[5.5, 11, 16.5]

covar:

[40.5, 81, 121.5;

81, 162, 243;

121.5, 243, 364.5]

和上面的结果完全一样。注意最后一个参数CV_COVAR_ROWS表示以行为样本,即一行为一个向量。如果你是以列为向量,则应换成CV_COVAR_COLS

标记位参数值极其意义

标志参数的具体标志值

意义

CV_COVAR_NORMAL

计算均值和协方差

CV_COVAR__SCRAMBLED

快速PCA”Scrambled”协方差

CV_COVAR_USE_AVERAGE

输入均值而不是计算均值

CV_COVAR_SCALE

重新缩放输出的协方差矩阵

这个函数的具体介绍可以参考官方文档:传送门

python 计算协方差矩阵_opencv2学习:计算协方差矩阵相关推荐

  1. 如何用Python一门语言通吃高性能并发、GPU计算和深度学习

    [CTO讲堂]如何用Python一门语言通吃高性能并发.GPU计算和深度学习 发表于2016-01-04 15:11| 4374次阅读| 来源CSDN| 4 条评论| 作者蒲婧 CTO俱乐部CTOCT ...

  2. python学习每日一题【20200226】python实现“分解质因数”的计算

    题目: 每日一练(2-26): 题目:将一个整数分解质因数.例如:输入90,打印出90=2*3*3*5 实现方法: 百度百科里对分解质因数的定义: 把一个合数分解成若干个质因数的乘积的形式,即求质因数 ...

  3. Python快速编程入门#学习笔记02# |第十章 :Python计算生态与常用库(附.小猴子接香蕉、双人乒乓球小游戏源码)

    全文目录 学习目标 1. Python计算生态概述 1.1 Python计算生态概述 2. Python生态库的构建与发布 2.1 模块的构建与使用 * 2.1.1第三方库/模块导入的格式 2.2 包 ...

  4. 协方差、协方差矩阵定义与计算

    协方差的意义和计算公式 学过概率统计的孩子都知道,统计里最基本的概念就是样本的均值,方差,或者再加个标准差.首先我们给你一个含有n个样本的集合,依次给出这些概念的公式描述,这些高中学过数学的孩子都应该 ...

  5. 协方差矩阵概念及计算

    原文来自:http://blog.sina.com.cn/s/blog_4aa4593d01012am3.html 今天看论文的时候又看到了协方差矩阵这个破东西,以前看模式分类的时候就特困扰,没想到现 ...

  6. lda 协方差矩阵_协方差矩阵概念及计算

    理解协方差矩阵的关键就在于牢记它计算的是不同维度之间的协方差,而不是不同样本之间,拿到一个样本矩阵,我们最先要明确的就是一行是一个样本还是一个维度,心中明确这个整个计算过程就会顺流而下,这么一来就不会 ...

  7. ECS_FML——协方差与协方差矩阵(附计算过程)

    协方差 定义 在概率论和统计学中,协方差用于衡量两个变量的总体误差.而方差是协方差的一种特殊情况,即当两个变量是相同的情况. 期望值分别为E[X]与E[Y]的两个实随机变量X与Y之间的协方差Cov(X ...

  8. python方差的计算公式_python计算均值方差

    原博文 2014-06-07 14:13 − 用Python求均值与方差,可以自己写,也可以借助于numpy,不过到底哪个快一点呢? 我做了个实验,首先生成9百万个样本: ```python nlis ...

  9. 如何从系统层面优化深度学习计算?

    编者按:在图像.语音识别.自然语言处理.强化学习等许多技术领域中,深度学习已经被证明是非常有效的,并且在某些问题上已经达到甚至超越了人类的水平.然而,深度学习对于计算能力有着很大的依赖,除了改变模型和 ...

最新文章

  1. 实时荧光定量聚合酶链式反应和2-▲CT方法分析相关基因表达数据
  2. 【Groovy】Groovy 扩展方法 ( 静态扩展方法配置 | 扩展方法示例 | 编译静态扩展类 | 打包静态扩展类字节码到 jar 包中 | 测试使用 Thread 静态扩展类 )
  3. POJ 3275 Ranking the Cows (floyd传递闭包)
  4. python 把列表变为字符串_python 把列表转化为字符串
  5. Linux学习之系统编程篇:创建匿名映射区(只适用于有血缘关系)
  6. boost::python::to_python_converter相关的测试程序
  7. c语言通讯录动态文件操作,学C三个月了,学了文件,用C语言写了个通讯录程序...
  8. “鸿蒙”系统的产生并不是为了手机?任正非透露实情...
  9. 力扣700. 二叉搜索树中的搜索(JavaScript)
  10. Java 核心系列教程
  11. 函数式编程学习之路(四)
  12. 模块讲解----XML模块
  13. 金蝶k3单据编码规则_金蝶k3物料编码规则
  14. JavaEE中级.20190615.易买网项目(一).隐藏域.
  15. 有关textField左视图leftView和书写位置的设置
  16. python蟒蛇编程_《大蟒蛇编程第1课》如何用3分钟写出第一个动画程序
  17. 长为一名JAVA架构师2017-10-16 2
  18. 技术总监/技术leader职责与工作记录第一天
  19. 琢石成器之自动化去广告神器
  20. Laravel中的where高级使用方法

热门文章

  1. 测试===JUnit单元测试
  2. MYSQL 在当前时间加上或减去一个时间段
  3. 23种设计模式之原型模式代码实例
  4. xv6/调度算法及并发程序设计
  5. [转载]析构函数的虚析构和非虚析构调用的差别
  6. 面试常考题---交换变量
  7. Java for LeetCode 042 Trapping Rain Water
  8. UVa 11481 (计数) Arrange the Numbers
  9. Jquery通过遍历数组给checkbox赋默认值
  10. [Leetcode][第106题][JAVA][ 从中序与后序遍历序列构造二叉树][分治][递归]