我計算柯閥和使用CV方法cv__calcCovarMatrixcv :: calcCovarMatrix如何工作?
第一種方法
cv::Mat_<uchar> samples(2,9); samples << 1,3,2,5,8,7,12,2,4,8,6,9,4,3,3,2,7,7;
cv::Mat_<float> covar, mean;
std::cout << "\nsamples\n" << samples;
cv::calcCovarMatrix(samples, covar, mean, cv::COVAR_NORMAL|cv::COVAR_COLS|cv::COVAR_SCALE, CV_32FC1);
std::cout << "\nMean\n" << mean << "\nCovar\n" << covar << std::endl;
方法二
cv::Mat_<uchar> x_sample(1,9); x_sample << 1,3,2,5,8,7,12,2,4;
cv::Mat_<uchar> y_sample(1,9); y_sample << 8,6,9,4,3,3,2,7,7;
std::vector<cv::Mat> matPtr;
matPtr.push_back(x_sample);
matPtr.push_back(y_sample);
cv::calcCovarMatrix(&matPtr, 9, covar, mean, cv::COVAR_NORMAL, CV_32FC1);
std::cout << "\nMean\n" << mean << "\nCovar\n" << covar << std::endl;
- 我期待獲得-8.07的協方差和平均的意思x樣本和y樣本的x = 4.89和y = 5.44。
但答案是-7.17,除以樣本數量而不是樣本-1。爲什麼?
樣品
[ 1, 3, 2, 5, 8, 7, 12, 2, 4;
8, 6, 9, 4, 3, 3, 2, 7, 7]
平均
[4.8888888;
5.4444447]
COVAR(我使用CV_COVAR_SCALE),但是協方差是由樣品1和樣品不正常劃分。
[11.209877, -7.1728396;
-7.1728396, 5.5802469]
- 我無法編譯第二方法。 Ofcourse cv :: Mat *與std :: vector *不兼容,但是我應該如何將指針傳遞給包含兩個矩陣的數組。
您需要將'x'和'y'點存儲爲行和列。操作正在通過列 - 平均1和8是4.5,平均3和6是4.5,2和9是5.5等。 –
@亞歷山大雷諾茲:謝謝你的提示..我犯了一個錯誤..它應該是cv :: COVAR_COLS而不是cv :: COVAR_ROWS。但是,我仍然無法獲得協變。我將編輯該問題。 – infoclogged