发布网友 发布时间:2022-12-05 09:04
共1个回答
热心网友 时间:2024-08-20 23:48
简介:此问题是在做旋转模板匹配的时候,选择最好的匹配结果时产生的。查找资料发现多项式拟合问题可以变成一个超定方程的求解问题,而opencv中本身有一个cv::solve()函数可以求解线性方程组,因此对于大多数用到opencv又要进行曲线拟合的地方都可以参考此处的求解过程来解决。
原始数据是一些离散的散点,下图是用matplotlib的plot方法画出来的,我想得到下图中最高处附近的近似的曲线方程,以得到一个最大值和最大值对应的横坐标。从下图看,在最高处附近很像一条抛物线,那就用2次函数去拟合最高处附近的曲线看看效果
二次函数的一般形式为 ,二次函数由 完全决定,这样只需要三组 的数据我们就可以求出 的表达式。例如现在我们获得了三组数据, ,写成方程组的形式就是
求解这个线性方程组就可以得到我们需要的二次方程,很容易求出来 。
在实际的情况下我们观测获得的数据并不是绝对准确的,也就是存在偏差,当数据足够多时就可以去除很大一部分随机误差,但是当方程数超过未知数的个数时,怎么求解呢?这就要引入下面超定方程的知识了。
设方程Ax = b.根据有效的方程个数和未知数的个数,可以分为以下3种情况:
设方程组 中, , 是 维已知向量, 是n维解向量,当 ,即方程个数大于自变量个数时,称此方程组为超定方程组。
记 ,称使 最小的解 为方程组 的最小二乘解。
是 的最小二乘解的充要条件是: 是 的解。
, ,
构造 ,求解此线性方程组就可以得到最小二乘解,也就得到我们需要的二次方程了。
可以和python实现版对照着看最后拟合的方程是一样的!完美!
参考:
超定方程理论参考: https://blog.csdn.net/u014652390/article/details/52789591