感知算法-特征提取-直线拟合

文章目录


概述

直线方程可以表示为
r = cos ⁡ θ ∗ x + sin ⁡ θ ∗ y (1) r = \cos\theta*x + \sin\theta*y \tag{1} r=cosθx+sinθy(1)


假设一条直线 L L L
r = cos ⁡ θ ∗ x + sin ⁡ θ ∗ y (2) r = \cos\theta*x + \sin\theta*y \tag{2} r=cosθx+sinθy(2)
一组数据集合为
S k = { ( x 0 , y 0 ) , . . . , ( x k , y k ) } (3) S_k= \{ (x_0,y_0),...,(x_k,y_k)\}\tag{3} Sk={(x0,y0),...,(xk,yk)}(3)
那么这组数据集与直线 L L L的误差值为
e i = ∥ cos ⁡ θ ∗ x i + sin ⁡ θ ∗ y i − r ∥ (4) e_i = \| \cos\theta*x_i + \sin\theta*y_i - r\|\tag{4} ei=cosθxi+sinθyir(4)
方差为
E 2 = ∑ S k e i 2 (5) E_2 =\sum_{S_k}e_i^2\tag{5} E2=Skei2(5)
那么与这些数据点最优的线段就是最小化方差值 E 2 E_2 E2

求解推导

根据最值原理,求最小值,可以理解为算式的导数为零的解。
假设函数
f ( θ , r ) = ∑ S k ( cos ⁡ θ ∗ x i + sin ⁡ θ ∗ y i − r ) 2 (6) f(\theta,r) = \sum_{S_k}(\cos\theta*x_i + \sin\theta*y_i - r)^2\tag{6} f(θ,r)=Sk(cosθxi+sinθyir)2(6)
导数为
f ˙ ( θ , r ) = 2 ∑ S k ( cos ⁡ θ ∗ x i + sin ⁡ θ ∗ y i − r ) ′ (7) \dot{f}(\theta,r) = 2\sum_{S_k}(\cos\theta*x_i + \sin\theta*y_i - r)'\tag{7} f˙(θ,r)=2Sk(cosθxi+sinθyir)(7)
根据函数参数 θ \theta θ r r r,分别对其求偏导数得
f ˙ ( θ , r ) = ∂ f ∂ θ + ∂ f ∂ r (8) \dot{f}(\theta,r) = \frac{\partial f}{\partial \theta} + \frac{\partial f}{\partial r}\tag{8} f˙(θ,r)=θf+rf(8)
故得
f ˙ ( θ , r ) = 2 ∑ S k ( cos ⁡ θ ∗ x i + sin ⁡ θ ∗ y i − r ) ( cos ⁡ θ ∗ y i − sin ⁡ θ ∗ x i − 1 ) (9) \dot{f}(\theta,r) = 2\sum_{S_k}(\cos\theta*x_i + \sin\theta*y_i - r)(\cos\theta*y_i - \sin\theta*x_i -1)\tag{9} f˙(θ,r)=2Sk(cosθxi+sinθyir)(cosθyisinθxi1)(9)
f ˙ ( θ , r ) = 0 \dot{f}(\theta,r)= 0 f˙(θ,r)=0
∑ S k ( cos ⁡ θ ∗ x i + sin ⁡ θ ∗ y i − r ) ( cos ⁡ θ ∗ y i − sin ⁡ θ ∗ x i − 1 ) = 0 (10) \sum_{S_k}(\cos\theta*x_i + \sin\theta*y_i - r)(\cos\theta*y_i - \sin\theta*x_i -1) = 0\tag{10} Sk(cosθxi+sinθyir)(cosθyisinθxi1)=0(10)

详细推导过程参考博客
最终结果得
V x = ∑ i = 0 k x i k (11) V_x = \frac{\sum_{i=0}^kx_i}{k} \tag{11} Vx=ki=0kxi(11)

V y = ∑ i = 0 k y i k (12) V_y = \frac{\sum_{i=0}^ky_i}{k} \tag{12} Vy=ki=0kyi(12)

V x y = ∑ i = 0 k ( x i − V x ) ( y i − V y ) (13) V_{xy} = \sum_{i=0}^{k}(x_i - V_x)(y_i - V_y)\tag{13} Vxy=i=0k(xiVx)(yiVy)(13)

V x x = ∑ i = 0 k ( x i − V x ) 2 (14) V_{xx} =\sum_{i=0}^{k}(x_i - V_x)^2 \tag{14} Vxx=i=0k(xiVx)2(14)

V y y = ∑ i = 0 k ( y i − V y ) 2 (15) V_{yy} = \sum_{i=0}^{k}(y_i - V_y)^2 \tag{15} Vyy=i=0k(yiVy)2(15)
根据上述计算,分别求出直线的 θ \theta θ r r r
θ = arctan ⁡ ( V y y − V x x ) − ( V y y − V x x ) 2 + 4 V x y 2 2 V x y (16) \theta = \arctan\frac{(V_{yy} - V_{xx}) - \sqrt{(V_{yy} - V_{xx})^2 + 4V_{xy}^2}}{2V_{xy}}\tag{16} θ=arctan2Vxy(VyyVxx)(VyyVxx)2+4Vxy2 (16)

r = cos ⁡ θ ∗ V x + sin ⁡ θ ∗ V y (17) r = \cos\theta*V_x + \sin\theta*V_y \tag{17} r=cosθVx+sinθVy(17)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

henry.zhu51

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

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

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

打赏作者

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

抵扣说明:

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

余额充值