1 说明
基于最小least-squares去拟合出多次曲线,考虑到了所有的样本点,因此这种方法对噪声敏感,尤其是遇到较为突兀明显的噪声时,曲线的形状易受干扰。
2 代码
代码细节仔细读基本都能读懂,或者查一下也不是什么大问题。
#include <iostream>
#include<opencv2/opencv.hpp>
using namespace std;
using namespace cv;
//这里的n表示要拟合的目标曲线的最高次数,比如3.
bool polynomial_curve_fit(std::vector<cv::Point>& key_point, int n, cv::Mat& A)
{
//Number of key points
int N = key_point.size();
//构造矩阵X
cv::Mat X = cv::Mat::zeros(n + 1, n + 1, CV_64FC1);
for (int i = 0; i < n + 1; i++)
{
for (int j = 0; j < n + 1; j++)
{
for (int k = 0; k < N; k++)
{
X.at<double>(i, j) = X.at<double>(i, j) +
std::