通过openCV calcCovarMatrix(data,covar,means,CV_COVAR_COLS)的协方差误差; [英] error in covariance via 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屋!