图像的高级处理中,协方差矩阵计算是必不可少的,但opencv关于这方面的资料却相当少。
首先,利用matlab计算一下,便于比较:
>> data=[1,2,3;10,20,30]
data =
1 2 3
10 20 30
>> convar=cov(data)
convar =
40.5000 81.0000 121.5000
81.0000 162.0000 243.0000
121.5000 243.0000 364.5000
在计算协方差矩阵时,在源数据矩阵中,默认以行为样本数,以列为维度。如果你是相反的,那么结果可能和我的不一样。
在opencv2中,先利用公式来进行计算:
代码:
Mat data = (Mat_(2, 3) << 1, 2, 3, 10, 20, 30);
cout<< "data:"<
Mat means(1, data.cols, data.type(), Scalar::all(0));for (int i = 0; i < data.cols; i++)
means.col(i)= sum(data.col(i)) / data.rows; //计算列均值
cout << "means:"<
Mat tmp= repeat(means, data.rows, 1);
data= data - tmp; //源数据减去均值
Mat