A. Levenberg-Marquardt算法

待估计的模型参数 x=[x1,x2,⋯,xn]T\mathbf{x}=[x_1, x_2, \cdots,x_n]^Tx=[x1​,x2​,⋯,xn​]T

误差函数 fi(x)f_i( \mathbf{x})fi​(x): 表示第iii个观测值与对应的模型的估计值的差

mmm:观测值的个数

目标函数 F(x)=12∑i=1m(fi(x))2F(\mathbf{x}) = \frac{1}{2} \displaystyle \sum^{m}_{i=1}(f_i(\mathbf{x}))^2F(x)=21​i=1∑m​(fi​(x))2

最小二乘问题可以描述为
x∗=argminx{F(x)}\mathbf{x}^* = \underset{\mathbf{x}}{argmin}\{ F(\mathbf{x}) \} x∗=xargmin​{F(x)}
一些用到的变量和公式
f(x)=[f1(x),⋯,fm(x)]TF(x)=12fT(x)f(x)=12∣∣f(x)∣∣2f′(x)=J(x)=[∂f1(x)∂x1⋯∂f1(x)∂xn⋮⋱⋮∂fm(x)∂x1⋯∂fm(x)∂xn]F′(x)=f′(x)f(x)=JT(x)f(x)\mathbf{f}(\mathbf{x})=[f_1(\mathbf{x}), \cdots,f_m(\mathbf{x})]^T \\ F(\mathbf{x}) = \displaystyle \frac{1}{2} \mathbf{f}^T(\mathbf{x}) \mathbf{f}(\mathbf{x}) = \frac{1}{2} ||\mathbf{f}(\mathbf{x})||^2 \\ \mathbf{f}^{'}(\mathbf{x}) = \mathbf{J}(\mathbf{x}) = \displaystyle \begin{bmatrix} \frac{\partial f_1(\mathbf{x})}{\partial x_1} &\cdots &\frac{\partial f_1(\mathbf{x})}{\partial x_n} \\ \vdots &\ddots &\vdots \\ \frac{\partial f_m(\mathbf{x})}{\partial x_1} &\cdots &\frac{\partial f_m(\mathbf{x})}{\partial x_n} \\ \end{bmatrix} \\ F^{'}(\mathbf{x}) = \mathbf{f}^{'}(\mathbf{x})\mathbf{f}(\mathbf{x}) = \mathbf{J}^T(\mathbf{x})\mathbf{f}(\mathbf{x}) \\ f(x)=[f1​(x),⋯,fm​(x)]TF(x)=21​fT(x)f(x)=21​∣∣f(x)∣∣2f′(x)=J(x)=⎣⎡​∂x1​∂f1​(x)​⋮∂x1​∂fm​(x)​​⋯⋱⋯​∂xn​∂f1​(x)​⋮∂xn​∂fm​(x)​​⎦⎤​F′(x)=f′(x)f(x)=JT(x)f(x)

f(x)\mathbf{f}(\mathbf{x})f(x)在x\mathbf{x}x处一阶泰勒展开
f(x+h)≈f(x)+J(x)hwhere hsufficiently small\displaystyle \mathbf{f}(\mathbf{x} + \mathbf{h}) \approx \mathbf{f}(\mathbf{x}) + \mathbf{J}(\mathbf{x}) \mathbf{h}\\ \text{where} \ \mathbf{h}\ \text{sufficiently small} f(x+h)≈f(x)+J(x)hwhere h sufficiently small
于是有
F(x+h)=12fT(x+h)f(x+h)≈12(f(x)+J(x)h)T(f(x)+J(x)h)=F(x)+hTJT(x)f(x)+12hTJT(x)J(x)hwhere hsufficiently small\displaystyle \begin{align} F(\mathbf{x} + \mathbf{h}) &= \frac{1}{2} \mathbf{f}^T(\mathbf{x} + \mathbf{h}) \mathbf{f}(\mathbf{x}+ \mathbf{h}) \\ &\approx \frac{1}{2} \left( \mathbf{f}(\mathbf{x}) + \mathbf{J}(\mathbf{x}) \mathbf{h} \right)^T \left( \mathbf{f}(\mathbf{x}) + \mathbf{J}(\mathbf{x}) \mathbf{h} \right) \\ &= F(\mathbf{x}) + \mathbf{h}^T \mathbf{J}^T(\mathbf{x}) \mathbf{f}(\mathbf{x}) + \frac{1}{2} \mathbf{h}^T \mathbf{J}^T(\mathbf{x}) \mathbf{J}(\mathbf{x}) \mathbf{h} \\ \end{align} \\ \text{where} \ \mathbf{h}\ \text{sufficiently small} F(x+h)​=21​fT(x+h)f(x+h)≈21​(f(x)+J(x)h)T(f(x)+J(x)h)=F(x)+hTJT(x)f(x)+21​hTJT(x)J(x)h​​where h sufficiently small

L(h)=F(x)+hTJT(x)f(x)+12hTJT(x)J(x)hL(\mathbf{h}) = F(\mathbf{x}) + \mathbf{h}^T \mathbf{J}^T(\mathbf{x}) \mathbf{f}(\mathbf{x}) + \frac{1}{2} \mathbf{h}^T \mathbf{J}^T(\mathbf{x}) \mathbf{J}(\mathbf{x}) \mathbf{h} L(h)=F(x)+hTJT(x)f(x)+21​hTJT(x)J(x)h
每一次的迭代的基本思路是,在x\mathbf{x}x处求
hlm=argminh{L(h)+P(μ,h)}\mathbf{h}_{lm} = \underset{\mathbf{h}}{\text{argmin}} \{L(\mathbf{h}) + P(\mu,\mathbf{h}) \} hlm​=hargmin​{L(h)+P(μ,h)}
其中 P(μ,h)P(\mathbf{\mu,h})P(μ,h)是惩罚项,是为了使得上式求得的hlm\mathbf{h}_{lm}hlm​偏小些,并且可以通过调大μ\muμ来获得更小的hlm\mathbf{h}_{lm}hlm​,或者调小μ\muμ来获得更大的hlm\mathbf{h}_{lm}hlm​。常见的P(μ,h)P(\mu,\mathbf{h})P(μ,h)的形式有:
P(μ,h)=12μhThP(\mu, \mathbf{h}) = \frac{1}{2} \mu \mathbf{h}^T\mathbf{h} P(μ,h)=21​μhTh

A.1 求解单应性矩阵的LM算法

n=8n = 8n=8,x\mathbf{x}x对应的是单应性矩阵里待解的8个未知量:
z⋅[uv1]=[x1x2x3x4x5x6x7x81]⋅[ab1]⇒{u=x1a+x2b+x3x7a+x8b+1v=x4a+x5b+x6x7a+x8b+1z \cdot \begin{bmatrix} u \\ v \\ 1 \\ \end{bmatrix} = \begin{bmatrix} x_1 &x_2 &x_3 \\ x_4 &x_5 &x_6 \\ x_7 &x_8 &1 \\ \end{bmatrix} \cdot \begin{bmatrix} a \\ b \\ 1 \\ \end{bmatrix} \\ \Rightarrow \begin{cases} \displaystyle u = \frac{x_1 a + x_2 b + x_3}{x_7 a + x_8 b + 1} \\ \displaystyle v = \frac{x_4 a + x_5 b + x_6}{x_7 a + x_8 b + 1} \\ \end{cases} z⋅⎣⎡​uv1​⎦⎤​=⎣⎡​x1​x4​x7​​x2​x5​x8​​x3​x6​1​⎦⎤​⋅⎣⎡​ab1​⎦⎤​⇒⎩⎨⎧​u=x7​a+x8​b+1x1​a+x2​b+x3​​v=x7​a+x8​b+1x4​a+x5​b+x6​​​
假设有sss个点对,那么m=2⋅sm=2 \cdot sm=2⋅s,因为一个点对产生两个误差函数,即对于第iii个点对,产生
f2i−1(x)=x1ai+x2bi+x3x7ai+x8bi+1−uif2i(x)=x4ai+x5bi+x6x7ai+x8bi+1−vif_{2i-1}(\mathbf{x}) = \frac{x_1 a_i + x_2 b_i + x_3}{x_7 a_i + x_8 b_i + 1} - u_i \\ f_{2i}(\mathbf{x}) = \frac{x_4 a_i + x_5 b_i + x_6}{x_7 a_i + x_8 b_i + 1} - v_i \\ f2i−1​(x)=x7​ai​+x8​bi​+1x1​ai​+x2​bi​+x3​​−ui​f2i​(x)=x7​ai​+x8​bi​+1x4​ai​+x5​bi​+x6​​−vi​
对应的一阶导数是
f2i−1′(x)=[aix7ai+x8bi+1,bix7ai+x8bi+1,1x7ai+x8bi+1,0,0,0,−ai(x1ai+x2bi+x3)(x7ai+x8bi+1)2,−bi(x1ai+x2bi+x3)(x7ai+x8bi+1)2]Tf2i′(x)=[0,0,0,aix7ai+x8bi+1,bix7ai+x8bi+1,1x7ai+x8bi+1,−ai(x4ai+x5bi+x6)(x7ai+x8bi+1)2,−bi(x4ai+x5bi+x6)(x7ai+x8bi+1)2]Tf^{'}_{2i-1}(\mathbf{x}) = \left[ \frac{a_i}{x_7 a_i + x_8 b_i + 1},\frac{b_i}{x_7 a_i + x_8 b_i + 1},\frac{1}{x_7 a_i + x_8 b_i + 1},0,0,0,-\frac{a_i(x_1 a_i + x_2 b_i + x_3)}{(x_7 a_i + x_8 b_i + 1)^2},-\frac{b_i(x_1 a_i + x_2 b_i + x_3)}{(x_7 a_i + x_8 b_i + 1)^2} \right]^T \\ f^{'}_{2i}(\mathbf{x}) = \left[ 0,0,0,\frac{a_i}{x_7 a_i + x_8 b_i + 1},\frac{b_i}{x_7 a_i + x_8 b_i + 1},\frac{1}{x_7 a_i + x_8 b_i + 1},-\frac{a_i(x_4 a_i + x_5 b_i + x_6)}{(x_7 a_i + x_8 b_i + 1)^2},-\frac{b_i(x_4 a_i + x_5 b_i + x_6)}{(x_7 a_i + x_8 b_i + 1)^2} \right]^T \\ f2i−1′​(x)=[x7​ai​+x8​bi​+1ai​​,x7​ai​+x8​bi​+1bi​​,x7​ai​+x8​bi​+11​,0,0,0,−(x7​ai​+x8​bi​+1)2ai​(x1​ai​+x2​bi​+x3​)​,−(x7​ai​+x8​bi​+1)2bi​(x1​ai​+x2​bi​+x3​)​]Tf2i′​(x)=[0,0,0,x7​ai​+x8​bi​+1ai​​,x7​ai​+x8​bi​+1bi​​,x7​ai​+x8​bi​+11​,−(x7​ai​+x8​bi​+1)2ai​(x4​ai​+x5​bi​+x6​)​,−(x7​ai​+x8​bi​+1)2bi​(x4​ai​+x5​bi​+x6​)​]T
这里P(μ,h)P(\mu, \mathbf{h})P(μ,h)的形式如下所示
P(μ,h)=12μhTWhP(\mu, \mathbf{h}) = \frac{1}{2} \mu \mathbf{h}^T \mathbf{W} \mathbf{h} P(μ,h)=21​μhTWh

W\mathbf{W}W是一个已知的对角矩阵,而且对角线元素都是大于0的。


ψ(h)=L(h)+12μhTWh\psi(\mathbf{h}) = L(\mathbf{h}) + \frac{1}{2} \mu \mathbf{h}^T \mathbf{W} \mathbf{h} ψ(h)=L(h)+21​μhTWh
求解上式的最小值,即令
ψ′(h)=JT(x)f(x)+(JT(x)J(x)+μW)h=0\psi^{'}(\mathbf{h}) = \mathbf{J}^T(\mathbf{x}) \mathbf{f}(\mathbf{x}) + \left( \mathbf{J}^T(\mathbf{x}) \mathbf{J}(\mathbf{x}) + \mu \mathbf{W} \right) \mathbf{h} = 0 ψ′(h)=JT(x)f(x)+(JT(x)J(x)+μW)h=0
于是可得
hlm=−(A+μW)−1gA=JT(x)J(x)g=JT(x)f(x)\mathbf{h}_{lm} = - \left( \mathbf{A} + \mu \mathbf{W} \right)^{-1} \mathbf{g} \\ \mathbf{A} = \mathbf{J}^T(\mathbf{x}) \mathbf{J}(\mathbf{x}) \\ \mathbf{g} = \mathbf{J}^T(\mathbf{x}) \mathbf{f}(\mathbf{x}) hlm​=−(A+μW)−1gA=JT(x)J(x)g=JT(x)f(x)

整个算法如下所示:

已知:x0\mathbf{x}_0x0​, ξ1=1e−15\xi_1=1e^{-15}ξ1​=1e−15,ξ2=1e−15\xi_2=1e^{-15}ξ2​=1e−15,kmaxk_{\mathrm{max}}kmax​

解法:

begin

k=0k = 0k=0

x=x0\mathbf{x} = \mathbf{x}_0x=x0​

A=JT(x)J(x);g=JT(x)f(x)\mathbf{A} = \mathbf{J}^T(\mathbf{x}) \mathbf{J}(\mathbf{x});\quad \mathbf{g} = \mathbf{J}^T(\mathbf{x}) \mathbf{f}(\mathbf{x})A=JT(x)J(x);g=JT(x)f(x)

W=diag([a11,a22,⋯,ann]);μ=1;τ=0.75\mathbf{W} = diag([a_{11},a_{22}, \cdots,a_{nn}]); \quad \mu = 1; \quad \tau = 0.75W=diag([a11​,a22​,⋯,ann​]);μ=1;τ=0.75

found = $ \left(||\mathbf{f}(\mathbf{x})|| < \xi_2 \right)$

while (not found) and (k<kmaxk < k_{\mathrm{max}}k<kmax​)

k=k+1k = k + 1k=k+1

Solve (A+μW)hlm=−g\left( \mathbf{A} + \mu \mathbf{W} \right) \mathbf{h}_{lm} = -\mathbf{g}(A+μW)hlm​=−g

xnew=x+hlm\mathbf{x}_{\mathrm{new}} = \mathbf{x} + \mathbf{h}_{lm}xnew​=x+hlm​

ρ=F(x)−F(xnew)L(0)−L(hlm)\rho = \displaystyle \frac{F(\mathbf{x}) - F(\mathbf{x}_{\mathrm{new}})}{L(\mathbf{0}) - L(\mathbf{h}_{lm})}ρ=L(0)−L(hlm​)F(x)−F(xnew​)​

if ρ>0.75\rho > 0.75ρ>0.75

μ=μ/2\mu = \mu /2μ=μ/2

if μ<τ\mu < \tauμ<τ

μ=0\mu = 0μ=0

elseif ρ<0.25\rho < 0.25ρ<0.25

ν=min{max{2×(1−F(xnew)−F(x)hlmTg),2},10}\nu = \mathrm{min} \left\{ \mathrm{max} \left\{ 2 \times \left( 1 - \displaystyle \frac{F(\mathbf{x}_{\mathrm{new}}) - F(\mathbf{x})}{\mathbf{h}^T_{lm} \mathbf{g}} \right),2 \right\},10 \right\}ν=min{max{2×(1−hlmT​gF(xnew​)−F(x)​),2},10}

if μ==0\mu == 0μ==0

B=A−1\mathbf{B} = \mathbf{A}^{-1}B=A−1

temp=max{[b11,⋯,bnn]}temp = \mathrm{max}\{ [b_{11},\cdots,b_{nn}] \}temp=max{[b11​,⋯,bnn​]}

μ=1/temp;τ=1/temp\mu = 1/temp; \quad \tau = 1/tempμ=1/temp;τ=1/temp

ν=ν/2\nu = \nu / 2ν=ν/2

μ=μ⋅ν\mu = \mu \cdot \nuμ=μ⋅ν

if F(xnew)<F(x)F(\mathbf{x}_{\mathrm{new}}) < F(\mathbf{x})F(xnew​)<F(x)

x=xnew\mathbf{x} = \mathbf{x}_{\mathrm{new}}x=xnew​

A=JT(x)J(x);g=JT(x)f(x)\mathbf{A} = \mathbf{J}^T(\mathbf{x}) \mathbf{J}(\mathbf{x});\quad \mathbf{g} = \mathbf{J}^T(\mathbf{x}) \mathbf{f}(\mathbf{x})A=JT(x)J(x);g=JT(x)f(x)

found = $ \left(||\mathbf{h}_{lm}|| < \xi_1 \ \mathrm{or} \ ||\mathbf{f}(\mathbf{x})|| < \xi_2 \right)$

end

Levenberg-Marquardt算法求解单应性矩阵相关推荐

  1. RANSAC算法的单应性矩阵讲解

    还可以参考:https://blog.csdn.net/lhanchao/article/details/52849446 我们已经得到了像素坐标系和世界坐标系下的坐标映射关系: 其中,u.v表示像素 ...

  2. 单应性矩阵 matlab,四点求解单应性矩阵

    网上有很多关于单应性矩阵的求解方法,但都没有说明怎样用四点求解单应性矩阵或者源码详细说明很少.这里说说自己的理解. 首先贴出matlab代码 % 返回值 H 是一个3*3的矩阵 % pts1 和 pt ...

  3. 直接线性变换(DLT)求解单应性矩阵

    https://blog.csdn.net/czl389/article/details/71524752 https://blog.csdn.net/zzzblog/article/details/ ...

  4. 计算机视觉学习笔记(四)homography 单应性矩阵的理解及求解

    单应性矩阵的理解及求解 1. 齐次坐标(Homogeneous Coordinate) 一幅2D图像上的非齐次坐标为(x,y),而齐次坐标为(x,y,1),也可以写成(x/z,y/z,1)或(x,y, ...

  5. 单应性矩阵的理解及求解1

    https://blog.csdn.net/zinnc/article/details/52319491 尽量写的通俗一点,因为从某种程度上讲,本人也是dummy..... 1. 先说homogene ...

  6. 单应性矩阵的理解及求解4

    https://blog.csdn.net/hudaliquan/article/details/52121832 网上有很多关于单应性矩阵的求解方法,但都没有说明怎样用四点求解单应性矩阵或者源码详细 ...

  7. 【RANSAC与单应性矩阵H求解】

    特征点匹配--使用基础矩阵.单应性矩阵的RANSAC算法去除误匹配点对 RANSAC算法的单应性矩阵讲解

  8. OpenCV-C++实现单应性矩阵的求解

    1. 单应性矩阵的理解 1.1 图像层面 单应性矩阵(Homography)约束了同一3D空间点在两个像素平面的2D齐次坐标. 单应性矩阵具有8个自由度,已知A和B两张图像上的四对点,即可列出八个方程 ...

  9. 计算机视觉教程1-2:单应性矩阵估计

    目录 1 导论 2 基本直接线性变换(Basic DLT) 3 归一化直接线性变换(Normalized DLT) 4 鲁棒单应性估计(Robust Homography Estimation) 1 ...

最新文章

  1. 2018年8月以太坊DApp数据分析报告
  2. ubuntu14.04 server安装vncserver
  3. 从零开始学习docker(二十)RoutingMesh--Ingress负载均衡
  4. 发现asp.net 2.0 在MSDN中的多个BUG 关于无刷新窗体的
  5. 变态公式之如何算出圆的内部被切割成几块?
  6. [BZOJ 1834] [ZJOI2010]network 网络扩容
  7. [解读REST] 3.基于网络应用的架构
  8. MySQL 之 索引
  9. C# Winform 窗体美化(九、嵌入窗体)
  10. MyBatis 实践 -Mapper与DAO
  11. python pandas 对带时间序列的数据进行重采样处理
  12. ensp 交换机与路由器ospf_华为路由器 eNSP 配置 rip OSPF 路由重发布
  13. JCreator 使用技巧
  14. knockoutjs入门要点
  15. python中的chardet模块
  16. XSS网站漏洞如何修复 大牛支招让您网站更安全
  17. Confluence 更改数据库地址
  18. Android繁星眨眼动画效果
  19. python画小猪佩奇、星星
  20. 第九届“图灵杯”NEUQ-ACM程序设计竞赛个人赛错题笔记

热门文章

  1. 学习笔记——自动化测试框架的构成
  2. 新品球鞋抢购系统设计
  3. xdag生成地址块解析
  4. 第7章第24节:完成漂亮的甜甜圈图表的制作 [SwiftUI快速入门到实战]
  5. 内网渗透系列:内网隧道之pingtunnel
  6. 用计算机算出陈赫手机号码,陈赫录制视频让素人遭殃,猜手机号却曝别人号码,网友被骚扰数日...
  7. c语言核桃的数量--程序设计,C/C++知识点之核桃的数量(最小公倍数)
  8. JD 2020春实习生笔试编程_1
  9. selenium - firefox下载 pdf 文件 或者任何文件 不弹窗的终极解决方法
  10. 制作棋盘格标定板(固定分辨率解决尺度问题)