首页 > 其他分享 >椭球面拟合方法及一般多项式函数拟合拓展

椭球面拟合方法及一般多项式函数拟合拓展

时间:2023-07-27 20:23:49浏览次数:56  
标签:right mathbf 多项式 矩阵 椭球面 拟合 left

基于对一般二次曲面拟合效果的不满,特地整理这一篇文章。不加任何限制的一般二次曲面拟合在机器视觉实际应用时会出现很多意外的情况。比如文章《匹配位姿拟合求精方法 - 兜尼完 - 博客园 (cnblogs.com)》和《9点拟合梯度边缘亚像素方法 - 兜尼完 - 博客园 (cnblogs.com)》,这两种方法都来自于硕士论文,在实际应用时都会出现亚像素量超出理论范围[-0.5,0.5]的意外情况。主要原因是二次曲面的种类太多了,包含很多不同的形状,如果不施加任何限制那么拟合结果可能不符合预期。比如在梯度边缘亚像素时,你可能期望拟合一个抛物面,但结果却可能是一个马鞍面,从而使亚像素量超范围(这句话是猜测没有实际验证过)。

一、椭球面拟合

这里首先叙述椭球面拟合方法。它可以很方便地扩展成三元二次函数的拟合从而应用于匹配位姿拟合的求精中。下面是关于拟合椭球面的几篇论文:

这里叙述上方第四个文章的方法。设待拟合椭球面方程为:

$${ ax^{2}+by^{2}+cz^{2}+2fyz+2gxz+2hxy+2px+2qy+2rz+d=0 }$$

我们有N组数据。用矩阵D表示样本矩阵,矩阵v表示待定系数矩阵。有:

$${ \mathbf D = \left( \begin{matrix} \mathbf X_{1} & \mathbf X_{2} & \cdots & \mathbf X_{N} \end{matrix} \right),其中\mathbf X_{i}= \left( \begin{matrix} x^{2}_{i} & y^{2}_{i} &  z^{2}_{i} & 2y_{i}z_{i} & 2x_{i}z_{i} & 2x_{i}y_{i} & 2x_{i} & 2y_{i} & 2z_{i} & 1 \end{matrix} \right)^{T} }$$

$${ \mathbf v= \left( \begin{matrix} a & b & c & f & g & h & p & q & r & d \end{matrix} \right)^{T} }$$

定义误差函数如下:

$${ e = \mathbf v^{T} \mathbf D \mathbf D^{T} \mathbf v,需要\mathbf v^{T} \mathbf C \mathbf v = 1 }$$

上式中${ \mathbf C = \begin{pmatrix} \mathbf C_{1} & \mathbf 0_{6×4} \\ \mathbf 0_{4×6} & \mathbf 0_{4×4} \end{pmatrix},其中\mathbf C_{1}=\begin{pmatrix} -1 & 0.5k-1 & 0.5k-1 & 0 & 0 & 0 \\ 0.5k-1 & -1 & 0.5k-1 & 0 & 0 & 0 \\ 0.5k-1 & 0.5k-1 & -1 & 0 & 0 & 0 \\ 0 & 0 & 0 & -k & 0 & 0 \\ 0 & 0 & 0 & 0 & -k & 0 \\ 0 & 0 & 0 & 0 & 0 & -k \end{pmatrix} }$。对于一般的椭圆而言可取${ k=4 }$,它可以确保拟合结果是一个椭球体。需要了解的是不是所有的椭圆都满足${ k=4 }$时的条件,详情见论文原文。对误差函数加上拉格朗日乘子变为:

$${ e = \mathbf v^{T} \mathbf D \mathbf D^{T} \mathbf v - \lambda \left( \mathbf v^{T} \mathbf C \mathbf v - 1 \right) }$$

对矩阵v求偏导数可得:

$${ \frac{\partial e}{\partial \mathbf v}= 2\mathbf D \mathbf D^{T} \mathbf v - 2\lambda \mathbf C \mathbf v = 0,满足\mathbf v^{T} \mathbf C \mathbf v=1 }$$

由于矩阵C是没有逆矩阵的,所以可以做如下变换使其变成矩阵特征值和特征向量的形式:

$${ \frac{1}{\lambda} \mathbf v =  \left( \mathbf D \mathbf D^{T} \right)^{-1} \mathbf C \mathbf v }$$

上式的解${ \mathbf v }$就是右侧系数矩阵${ \left( \mathbf D \mathbf D^{T} \right)^{-1} \mathbf C }$的最小正特征值对应的特征向量。但是要注意到矩阵${ \mathbf D \mathbf D^{T} }$不一定有逆矩阵。可以对矩阵D按照矩阵C的形式分为4个分块矩阵进行更细一点的处理提高可求逆的概率。详情可参考论文原文。

二、一般多项式函数拟合的拓展

对于一般的多项式函数有多种拟合方法。设待拟合的多项式函数如下:

$${ f(x,y,\cdots)=c_{1}x^{p} + c_{2}y^{p}+ \cdots + c_{M} = 0 }$$

我们有N组数据。用矩阵D表示采集数据的样本矩阵,矩阵x表示待定系数${c_{i} }$组成的列向量。

$${ \mathbf D=\begin{pmatrix} x_{1}^{p} & y_{1}^{p} & \cdots & 1 \\ x_{2}^{p} & y_{2}^{p} & \cdots & 1 \\ \vdots & \vdots & \ddots & 1 \\ x_{N}^{p} & y_{N}^{p} & \cdots & 1 \end{pmatrix},\mathbf x=\begin{pmatrix} c_{1} \\ c_{2} \\ \vdots \\ c_{M} \end{pmatrix} }$$

此时,我们要求解的方程组可以写成矩阵形式:

$${ \mathbf D \mathbf x = \mathbf 0 }$$

它是齐次线性方程组,不能直接使用最小二乘法。但可以增加限定条件将其转换成最小二乘问题,一般有如下两种方法求最优解。

1)代数距离法

这种求解方法一般被称为代数距离(algebraic distance)法。其误差函数如下:

$${ e=\left\| \mathbf D \mathbf x \right\|^{2} = \mathbf x^{T} \mathbf D^{T} \mathbf D \mathbf x,需要\mathbf x^{T} \mathbf x=1 }$$

可以看出来上式就是一个二次型求最小值的问题。它的解就是矩阵${ \mathbf D^{T} \mathbf D }$的最小特征值对应的特征向量。需要注意的是矩阵${ \mathbf D^{T} \mathbf D }$可能没有逆矩阵,此时需要用广义逆矩阵代替。在OpenCV中可以使用SVD分解求广义逆矩阵。

2)几何距离法

这种求解方法一般被称为几何距离(geometric distance)法。其误差函数如下:

$${ e=\frac{\left\| \mathbf D \mathbf x \right\|^{2} }{ \left\| \nabla f(x,y,\cdots) \right\|^{2} } }$$

这个误差函数直接求解会比较困难。所以为了简化问题,一般会限定分母等于1。此时问题转换成等式限制的最小二乘问题,求解方式和代数距离法相似。具体例子可以参考论文《37401.37420 (acm.org)》,此文第149页讲述了拟合圆的方法,在限定圆的一般式的梯度模长等于1的情况下得到等式条件${ D^{2}+ E^{2}-4AF=1 }$。

标签:right,mathbf,多项式,矩阵,椭球面,拟合,left
From: https://www.cnblogs.com/mengxiangdu/p/17582190.html

相关文章

  • 多项式和生成函数
    多项式概念:对于一个求和$\suma_nx^{n}\(,如果这个式子是**有限项**,则称该式为多项式,记作\)f(x)={\textstyle\sum_{n=0}^{m}}a_nx^{n}\(可列项相加的求和式称为级数。在\)\sum_{n=0}^\inftya_nx^n$中,每项均为非负整数次幂函数乘常数系数,这种形式的级数称为幂级数。乘......
  • 数据结构练习笔记——求解由单链表表示的一元多项式的值
    求解由单链表表示的一元多项式的值【问题描述】一个形如\[a_0x^0+a_1x^1+...+a_nx^n\]的一元多项式含有n+1项,每一项由系数和指数唯一确定,可表示成由系数项和指数项构成的一个二元组(系数,指数),一元多项式则可以表示成二元组的集合{(a0,0),(a1,1),(a2,2)...(an,n)},可看成是数据......
  • 初识机器学习及机器学习线性拟合的实现
    从最小二乘法到机器学习1,什么是机器学习?机器学习有下⾯⼏种定义:机器学习是⼀⻔⼈⼯智能的科学,该领域的主要研究对象是⼈⼯智能,特别是如何在经验学习中改善具体算法的性能。机器学习是对能通过经验⾃动改进的计算机算法的研究。机器学习是⽤数据或以往的经验,以此优化计算机程......
  • R语言GARCH模型对股市sp500收益率bootstrap、滚动估计预测VaR、拟合诊断和蒙特卡罗模
    原文链接:http://tecdat.cn/?p=26271最近我们被客户要求撰写关于GARCH的研究报告,包括一些图形和统计输出。Box等人的开创性工作(1994)在自回归移动平均模型领域的相关工作为波动率建模领域的相关工作铺平了道路,分别由Engle(1982)和Bollerslev(1986)引入了ARCH和GARCH......
  • 数据拟合曲线_LMFit(GaussianModel )
    今天,我们来谈一谈曲线拟合,想了很久要不要记录一下数据拟合曲线这个问题,最近又遇到了,还是决定浅浅记录一下,以免遗忘。主要还是说一下类似双峰的曲线或者形状怪异的曲线怎么进行拟合。首先说一下,在数据拟合的时候,往往遇到的曲线并非常规曲线,此时会发现,基本函数无法完美拟合,经......
  • 题解 P3803 【模板】多项式乘法(FFT)
    感觉题解区不是写的太高深,就是写的太高深。所以给初中、小学和幼儿园的萌新准备一篇简单易懂的良心题解~前置知识一、多项式的系数表示法和点值表示法。\(A(x)=\sum\limits_{i=0}^{n-1}a_i\cdotx^i\)系数:\((a_0,a_1,a_2...a_{n-2},a_{n-1})\)。点值:\((x_0,y_0),(x_1,y_1)...(......
  • 简单多项式
    前置知识复数\(i^2=-1\)复数为\(z=a+bi\)\(a+bi,a-bi\)互为共轭复数一个复数对应复平面上的任意一个点,一个复数与复平面上\((a,b)\)一一对应。复数与向量之间的运算有相似的地方,假设复数到复平面原点的距离为\(r\),那么复数也可以用\((r\cos\alpha,r\sin\alp......
  • Python用Keras神经网络序列模型回归拟合预测、准确度检查和结果可视化|附代码数据
    原文链接:http://tecdat.cn/?p=23573最近我们被客户要求撰写关于Keras神经网络序列模型的研究报告,包括一些图形和统计输出。我们可以很容易地用Keras序列模型拟合回归数据并预测测试数据。  在这篇文章中,我们将简要地学习如何用Python中的Keras神经网络API拟合回归数据。我们将......
  • python实现两函数通过缩放,平移和旋转进行完美拟合
    Curve_fitting前几天在工作的时候接到了一个需求,希望将不同坐标系,不同角度的两条不规则曲线,并且组成该曲线的点集数量不一致,需求是希望那个可以通过算法的平移和旋转搞到一个概念里最贴合,拟合态进行比较。这是初步将两组数据画到图里的情况,和背景需求是一致的。其实从肉眼看过......
  • 多项式全家桶
    多项式基本运算这个博客主要用来放一些多项式的运算的板子,大部分都来自于洛谷。多项式乘法NTT求个卷积即可。#include<bits/stdc++.h>usingnamespacestd;typedeflonglongll;constintN=3e6+10,mod=998244353,GG=3,Gi=332748118;llqmi(lla,llk,......