通过openCV calcCovarMatrix协调误差(data,covar,means,CV_COVAR_COLS);

时间:2014-03-26 18:59:08

标签: image opencv image-processing computer-vision

似乎calcCovarMatrix(),openCV 2.4.2正确计算方法,但会混淆协方差矩阵。从它的结果我看到它可能会误将数据误解为行,尽管函数参数中的标志表示数据存储为列。以下是此函数的简单输入和输出:

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]

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

1 个答案:

答案 0 :(得分:0)

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

所以你的电话应该是

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