【发布时间】:2015-03-31 04:32:42
【问题描述】:
我正在尝试使用 opencv 的 cv::calcCovarMatrix 来获得协方差矩阵。我创建了一个虚拟测试用例:
A = [1 2; 3 4] // matlab style
B = [1 0; 5 8]
如果我用 matlab 运行它,我会得到:
>> cov(A,B)
ans =
1.6667 4.3333
4.3333 13.6667
根据我的计算,这似乎还可以,但是当我使用cv::calcCovarMatrix 时,我无法获得相同的结果:
cv::Mat covar, mean;
cv::Mat A = (cv::Mat_<float>(2,2) << 1, 2, 3, 4);
cv::Mat B = (cv::Mat_<float>(2,2) << 1, 0, 5, 8);
cv::Mat x[2] = {A, B};
cv::calcCovarMatrix(x, 2, covar, mean, CV_COVAR_SCRAMBLED );
std::cout << covar << std::endl;
// gives [6, -6;
// -6, 6]
我错过了什么?
【问题讨论】:
-
opencv 在行上工作,matlab 在 cols 上工作,所以将 CV_COVAR_COLS 添加到您的标志中
-
根据opencv doc,CV_COVAR_COLS 只能与调用
cv::calcCovarMatrix的不同原型一起使用,在查看函数的源代码后,提到的标志被删除了。 -
如果你使用opencv3.0,cv::COVAR_COLS
-
同样在 opencv 中,您需要在 cov=cov/(nsamples-1) 之后缩放 cov 矩阵。
标签: c++ matlab opencv covariance