平面曲线参数拟合

对于平面曲线,参数方法一般可以表示为:
\begin{align} \begin{cases} x = x(t) \\ y = y(t) \end{cases} \end{align}

在拟合时,需要选择一些基函数$B_{i}(t)$,使得:

\begin{align} \begin{cases} x = x(t) = \sum_{i=0}^{m} a_{i} B_{i}(t) \\ y = y(t) = \sum_{i=0}^{m} b_{i} B_{i}(t) \end{cases} \end{align}

比如使用幂基函数:

\begin{align} B_{i}(t) = t^{i} \end{align}

假如现在平面上已经有了一些点集(序号是顺序):

 

最简单和直白的方式是连起来,如上图右。但是这样不够平滑,我们一般会进行拟合。

拟合方法一般使用最小二乘法,可以将$x(t)$和$y(t)$分别进行拟合。对于$i\in [1,2,...,n]$:

\begin{align} \begin{cases} x_{i} = \sum_{i=0}^{m} a_{i} B_{i}(t_{i}) \\ y_{i} = \sum_{i=0}^{m} b_{i} B_{i}(t_{i}) \end{cases} \end{align}

我们需要确定 $t$ 的取值位置。比如令 $t_{i}$ 均匀地分布在$[0,1]$之间(分布在任意的$[a,b]$之间都可以):

\begin{align} t_{i} = \frac{i}{n}\ \ \ \end{align}

但是这样往往不够细致,比如如果有两个点$p_{3}$和$p_{4}$距离比较远,那么$t_{3}$和$t_{4}$也应该要比较远:

 

因此可以根据两点距离除以总距离来生成不均匀的$t_{i}$:

\begin{align} & t_{1} = 0 \notag \\ & t_{i} = \frac{ \sum_{k=1}^{i} || D_{k} - D_{k-1} || }{\sum_{k=1}^{n} || D_{k} - D_{k-1} || } \ \ \ \ 2\leq i \leq n \end{align}

\section{拟合方法}

当我们使用基函数时,可以写为一个矩阵形式:

\begin{align} & \begin{bmatrix} 1 & B_{1}(t_{1}) & B_{2}(t_{1}) & ... & B_{m}(t_{1}) \\ 1 & B_{1}(t_{2}) & B_{2}(t_{2}) & ... & B_{m}(t_{2}) \\ \vdots & \vdots & \vdots & \ddots & \vdots \\ 1 & B_{1}(t_{n-1}) & B_{2}(t_{n-1}) & ... & B_{m}(t_{n-1})\\ 1 & B_{1}(t_{n}) & B_{2}(t_{n}) & ... & B_{m}(t_{n}) \end{bmatrix} \begin{bmatrix} a_{0} & b_{0} \\ a_{1} & b_{1} \\ \vdots & \vdots \\ a_{m} & b_{m} \end{bmatrix} = \begin{bmatrix} x_{1} & y_{1} \\ x_{2} & y_{2} \\ \vdots & \vdots \\ x_{n-1} & y_{n-1} \\ x_{n} & y_{n} \end{bmatrix} \\ & write\ as\ :\ \mathbf{A}\mathbf{X}=\mathbf{P} \end{align}

令$m=n-1$,$\mathbf{A}$是一个$n\times n$的矩阵,可以直接求解线性系统,但是此时有可能$\mathbf{A}$是一个很接近奇异矩阵的矩阵,因此求逆会有很大的误差。

当$n<m$时,可以应用最小二乘法。我们计算拟合的误差函数:

\begin{align} & E = \sum_{i=1}^{n} \Big|\Big| \begin{pmatrix} x(t_{i}) \\ y(t_{i}) \end{pmatrix} - \begin{pmatrix} x_{i} \\ y_{i} \end{pmatrix} \Big|\Big|^{2} \\ &E = (\mathbf{A}\mathbf{X}-\mathbf{Y})^{T} (\mathbf{A}\mathbf{X}-\mathbf{Y}) \end{align}
对误差函数进行求导,令导数为$0$,得到:

\begin{align} & (\mathbf{A}^{T}\mathbf{A})\mathbf{X}=(\mathbf{A}^{T})\mathbf{P} \notag \\ & \mathbf{X}= (\mathbf{A}^{T}\mathbf{A})^{-1} (\mathbf{A}^{T})\mathbf{P} \end{align}
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Dezeming

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值