计算OpenCV中的协方差

时间:2015-02-20 13:10:23

标签: c++ opencv covariance

我有cv::Mat这样:

500.0   350.2
500.5   355.8
498.7   352.0
............

我需要计算协方差。结果将是:

0.8633    1.2167
1.2167    8.1733

当然,我需要的功能是 calcCovarMatrix ....但是如果我执行此代码:

cv::Mat a = (cv::Mat_<double>(3, 2) << 500.0, 350.2, 500.5, 355.8, 498.7, 352.0);
cv::Mat mu, new_covs;
cv::calcCovarMatrix(a, new_covs, mu, CV_COVAR_NORMAL | CV_COVAR_COLS);

结果是难以理解的3x3矩阵......

new_covs=
[11220.02, 10838.03, 10987.83;
  10838.03, 10469.045, 10613.745;
  10987.83, 10613.745, 10760.445]

我希望你能解决我的问题!

2 个答案:

答案 0 :(得分:4)

我找到了正确的方法:

cv::Mat a = (cv::Mat_<double>(3, 2) << 500.0, 350.2, 500.5, 355.8, 498.7, 352.0);
cv::Mat mean, covs;
cv::calcCovarMatrix(a, covs, mean, CV_COVAR_NORMAL | CV_COVAR_ROWS);
mean=mean/a.rows;

我希望对某人有帮助!!!

问候!!

答案 1 :(得分:2)

根据文档,您需要标记“CV_COVAR_SCALE”以获得缩放协方差。

实际上已经提供了平均值,因此无需进一步扩展。

然后是正确的解决方案:

cv::Mat a = (cv::Mat_<double>(3, 2) << 500.0, 350.2, 500.5, 355.8, 498.7, 352.0);
cv::Mat mean, covs;
cv::calcCovarMatrix(a, covs, mean, CV_COVAR_NORMAL | CV_COVAR_ROWS | CV_COVAR_SCALE);