通过openCV calcCovarMatrix(data,covar,means,CV_COVAR_COLS)的协方差误差; [英] error in covariance via openCV calcCovarMatrix(data, covar, means, CV_COVAR_COLS);

查看:1264
本文介绍了通过openCV calcCovarMatrix(data,covar,means,CV_COVAR_COLS)的协方差误差;的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

这似乎 calcCovarMatrix(),openCV 2.4.2正确计算方法,但是弥散协方差矩阵。从它的结果,我看到它可能会错误解释数据为行,虽然在函数参数中的标志表示数据存储为列。这里是这个函数的简单输入和输出:

It seems that calcCovarMatrix(), openCV 2.4.2 calculates means correctly but messes-up a covariance matrix. From its result I see that it may misinterpret data as rows though the flag in function arguments indicates that data are stored as columns. Here is a simple input and output of this function:

Mat covar, means;
Mat data = (Mat_<float>(2, 3)<<1,2, 3, 10, 20, 30);
cout<<"data:"<<endl<<data<<endl;
calcCovarMatrix(data, covar, means, CV_COVAR_COLS); // fails!
cout<<"means:"<<endl<<means<<endl;
cout<<"covar:"<<endl<<covar<<endl;

资料:

[1,2,3;

10,20,30]

表示:

[2; 20]

covar:
[101,0,-101;

0,0,0;

-101,0,101]

data:
[1, 2, 3;
10, 20, 30]
means:
[2; 20]
covar: [101, 0, -101;
0, 0, 0;
-101, 0, 101]

我想要2x2协方差(因为平均值是2x1),但是得到了一个3x3矩阵,就好像数据是行。 CV_COVAR_ROWS的情况以相同的方式是错误的 - 计算方法正确,但是covar计算的数据是列。

I expected 2x2 covariance (since means are 2x1) but got a 3x3 matrix as if data were rows. The situation with CV_COVAR_ROWS is erroneous in the same way - calculating means correctly but covar is calculated as if data are columns.

推荐答案

文档声明您必须添加CV_COVAR_NORMAL或CV_COVAR_SCRAMBLED。
对于正常的行为使用CV_COVAR_NORMAL。

The documentation states that you MUST add either CV_COVAR_NORMAL or CV_COVAR_SCRAMBLED. For normal behaviour use CV_COVAR_NORMAL.

因此您的通话应为

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

这篇关于通过openCV calcCovarMatrix(data,covar,means,CV_COVAR_COLS)的协方差误差;的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆