6
của OpenCV cvSolve
có thể giải quyết một tuyến tính bình phương nhỏ nhất vấn đề như thế này:trọng tuyến tính bình phương nhỏ nhất trong OpenCV
// model: y = a1*x1 + a2*x2 + a3
CvMat *y = cvCreateMat(N, 1, CV_64FC1);
CvMat *X = cvCreateMat(N, 3, CV_64FC1);
CvMat *coeff = cvCreateMat(3, 1, CV_64FC1);
// fill vector y and matrix X
for (int i=0; i<N; ++i)
{
cvmSet(y, i, 0, my_y_value(i));
cvmSet(X, i, 0, my_x1_value(i));
cvmSet(X, i, 1, my_x2_value(i));
cvmSet(X, i, 2, 1);
}
cvSolve(X, y, coeff, CV_SVD);
// now coeff contains a1, a2, a3
Tuy nhiên, tôi muốn áp dụng trọng lượng khác nhau đến các điểm dữ liệu của tôi. Làm cách nào để áp dụng trọng số?
my_y_value, my_x1_value và my_x2_value là gì? – Abc
Chúng có nghĩa là cung cấp các giá trị cho ma trận của bạn (x1, x2) và bên trái (y). Đây chỉ là hình thức chung nhất, bạn có thể viết lại mã và cung cấp các giá trị theo cách nào phù hợp nhất với bạn. Ngoài ra, hãy chắc chắn xem các tài liệu OpenCV cho cvSolve. – Hendrik