在 OpenCV 中计算协方差
Calculate covariance in OpenCV
我有一个 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]
希望你能帮我解决我的问题!
我找到了正确的方法:
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;
希望对大家有所帮助!!!
您好!!
根据文档,您需要标志 "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);
我有一个 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]
希望你能帮我解决我的问题!
我找到了正确的方法:
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;
希望对大家有所帮助!!!
您好!!
根据文档,您需要标志 "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);