Robust Ellipse Fitting Using Hierarchical Gaussian Mixture Models

  • Motivation
  • Related works
  • Ellipse fitting based on GMMs
  • Ellipse fitting based on HGMMs
    • Distance-Density-Based Error Metric
    • Density-Based Region Growing Method
  • 一点点理解

两篇不错的文章,idea 很新颖
原文链接: HGMMs.
原文链接: GMMs.

Motivation

本文是基于论文"Robust ellipse detection with Gaussian mixture models” (GMMs) 的一种改进方法,主要解决了GMMs在面对outliers (离群点)时不稳定的问题。

Related works

在一个二维欧氏空间中一个圆锥曲线可以表示为一种二阶隐函数方程:
Ax2+2Bxy+Cy2+2Dx+2Ey+F=0.Ax^{2}+2Bxy+Cy^2+2Dx+2Ey+F=0. Ax2+2Bxy+Cy2+2Dx+2Ey+F=0.
为了方便矩阵计算一般标识为向量形式Θv=0\Theta \bm{v}=0Θv=0, 其中Θ=[ABCDEF]\Theta=[A\quad B\quad C\quad D\quad E\quad F]Θ=[ABCDEF],v=[x22xyy22x2y1]\bm{v}=[x^2\quad 2xy\quad y^2\quad 2x\quad 2y\quad 1]v=[x22xyy22x2y1]。
这样根据判别式 (discriminant) B2−AC<0B^2-AC<0B2−AC<0可以判断该双曲线是否为椭圆。这样给定一组数据点C={(xi,yi)∈R2}C= \{(x_{i},y_{i}) \in \mathbb{R}^2\}C={(xi​,yi​)∈R2},需要处理的问题就是根据这些点拟合出一个合适的椭圆。很多方法都是先假设一个初始椭圆Θ0\Theta_0Θ0​通过不断迭代地最优化数据点到椭圆的距离来获得最终的椭圆参数,也就是最优化下面两个式子:
J(Θ)=∑i=1n∥ΘTvi∥2,J(\Theta)=\sum^n_{i=1} \|\Theta^T\bm{v_i}\|^2, J(Θ)=i=1∑n​∥ΘTvi​∥2,
S=∑i=1n((xi−x^i)2−(yi−y^i)2).S=\sum^n_{i=1}((x_i-\hat{x}_i)^2-(y_i-\hat{y}_i)^2). S=i=1∑n​((xi​−x^i​)2−(yi​−y^​i​)2).
上面一个是代数距离,下面一个是几何距离,其中(xi,yi)(x_i,y_i)(xi​,yi​)是数据点,(x^,y^)(\hat{x},\hat{y})(x^,y^​)是椭圆上离(xi,yi)(x_i,y_i)(xi​,yi​)最近的一点。

Ellipse fitting based on GMMs

与上述方法不同的是,Arellano开创性的在2016年提出通过GMMs对观测点和目标椭圆建模,并根据两个GMMs之间的L2范数来迭代的获得椭圆拟合结果 (虽然论文里说的是detection,但本质上还是椭圆拟合的方法)。给定一组观测点C={xj∈R2}j=1nC=\{\bm{x}_j\in\mathbb{R}^2\}_{j=1}^nC={xj​∈R2}j=1n​,其GMMs表示为
p(x)=1n∑j=1nKh(x−xj),p(\bm{x})=\frac{1}{n}\sum_{j=1}^{n}K_h(\bm{x}-\bm{x_j}), p(x)=n1​j=1∑n​Kh​(x−xj​),
其中Kh(x−xj)K_h(\bm{x}-\bm{x_j})Kh​(x−xj​)是核函数, h表示核带宽(也许可以理解成每个高斯核的宽窄?),当它等于下式时p(x)p(\bm{x})p(x)就是高斯混合模型 (GMMs)
N(x;μ,Σ)=12π∥Σ∥1/2exp⁡{−12(x−μ)TΣ−1(x−μ)},N(\bm x;\bm \mu,\bm \Sigma)=\frac{1}{2\pi \|\bm{\Sigma}\|^{1/2}}\exp\{-\frac{1}{2}(\bm x-\bm \mu)^T\bm \Sigma^{-1}(\bm x-\bm \mu) \}, N(x;μ,Σ)=2π∥Σ∥1/21​exp{−21​(x−μ)TΣ−1(x−μ)},
由此得出观测值所对应的GMMs为
f(x)=1n∑j=1nN(x;,xj,h2I)。f(\bm x)=\frac{1}{n}\sum_{j=1}^{n}N(\bm x;,\bm x_j, h^2\bm I)。 f(x)=n1​j=1∑n​N(x;,xj​,h2I)。
Ok,到这里对观测值的建模已经完成,但是我们需要得到的是观测值所满足的一种分布关系也就是椭圆的参数,因此作者初选一个椭圆参数θ={x0,y0,a,b,γ}\theta=\{x_0,y_0,a,b,\gamma\}θ={x0​,y0​,a,b,γ}, 在其上均匀取mmm个采样点{ui∈R2}i=1m\{\bm {u}_i\in \mathbb{R}^2\}_{i=1}^m{ui​∈R2}i=1m​,通过对这些采样点的建模同样可以得到一个GMMs:
g(x∣θ)=∑i=1mωiN(x;μi,Σi),g(\bm x|\bm \theta)=\sum_{i=1}^m\omega_iN(\bm x;\bm \mu_i, \bm \Sigma_i), g(x∣θ)=i=1∑m​ωi​N(x;μi​,Σi​),
其中μi\bm \mu_iμi​是两个采样点之间的中点位置μi=ui+ui+1x\bm \mu_i=\frac{\bm {u}_i + \bm {u}_{i+1}}{x}μi​=xui​+ui+1​​, Σi=QiTΛQi\bm \Sigma_i=\bm {Q}^T_i \Lambda\bm Q_iΣi​=QiT​ΛQi​是协方差矩阵, 其中Qi=[n1i∣n2i]\bm Q_i=[\bm n_{1i}|\bm {n}_{2i}]Qi​=[n1i​∣n2i​]由在点ui\bm u_iui​处两个正交的单位切向量和法向量构成。ωi=hi∑i=1mhi\omega_i=\frac{h_i}{\sum_{i=1}^mh_i}ωi​=∑i=1m​hi​hi​​是GMMs每一个高斯核的权重系数。作者通过找到最优化下式来得到最终的椭圆参数:
θ^=arg⁡min⁡θ∥f(x)−g(x∣θ)∥2,\hat{\bm \theta}=\arg\min_{\bm \theta}\| f(\bm x)-g(\bm x|\bm \theta)\|_2, θ^=argθmin​∥f(x)−g(x∣θ)∥2​,

利用两个高斯分布之间内积公式上式可以通过梯度下降的方法得到解决(文中为了提高精度加入了模拟退火算法迭代的进行梯度下降,设置hih_ihi​在[hmin,hmax][h_{min},h_{max}][hmin​,hmax​]以0.8位step进行迭代)。
⟨N(μ1,Σ1)∣N(μ2,Σ2)⟩=N(0;μ1−μ2,Σ1+Σ2).\left \langle N(\bm \mu_1,\bm \Sigma_1) | N(\bm \mu_2,\bm \Sigma_2) \right \rangle = N(\bm 0;\bm \mu_1-\bm \mu_2,\bm \Sigma_1+\bm \Sigma_2). ⟨N(μ1​,Σ1​)∣N(μ2​,Σ2​)⟩=N(0;μ1​−μ2​,Σ1​+Σ2​).

Ellipse fitting based on HGMMs

Distance-Density-Based Error Metric

作者通过实验发现最优的L2L_2L2​ error并不能完全代表最优的椭圆参数,因此提出了一种同时结合(1) distance, and (2) density的error metric方法,也就是说需要 (1) 靠近模型的points(inliers)越多越好,(2)inliers对椭圆的损失要越小越好,可以表示为:
E(θ)=∑j=1ndθ(xj)exp⁡{∑jn1(dj2<T2)f(xj)},E(\bm \theta)=\frac{\sum_{j=1}^nd_{\bm \theta}(\bm x_j)}{\exp\{\sum_j^n \mathbf{1}(d_j^2<T^2)f(\bm x_j)\}}, E(θ)=exp{∑jn​1(dj2​<T2)f(xj​)}∑j=1n​dθ​(xj​)​,
其中dθ(xj)d_{\bm \theta}(\bm x_j)dθ​(xj​)是一个距离函数,1:R→{0,1}\mathbf{1}:\mathbb{R}\to\{0,1\}1:R→{0,1}是一个映射函数,djd_jdj​是一点到椭圆的距离 (这一块论文里说的比较清楚)。

Density-Based Region Growing Method

考虑到GMMs随意选取初始椭圆参数并且粗暴的直接将所有点进行建模和最优化,效率很低且容易受到outliers(离群点)的影响。因此,作者提出了一个包含两阶段的递进式椭圆拟合方法 (内层和外层)。给定一组points C={xi∈R2}i=1nC=\{\bm x_i\in\mathbb{R}^2\}_{i=1}^nC={xi​∈R2}i=1n​, 外层HGMMs的遵循以下步骤:

  1. 计算每一个数据点的概率密度值ρ(xi)=f(xi)\rho(\bm x_i)=f(\bm x_i)ρ(xi​)=f(xi​), 然后选定最大密度值点ρ0=max⁡i=1nρ(xi)\rho_0=\max_{i=1}^n\rho(\bm x_i)ρ0​=maxi=1n​ρ(xi​)作为种子点开始区域增长,如果一个点在种子点半径为ϵ\epsilonϵ圆内并且改点的密度值也就是ρ(xi)\rho(\bm x_i)ρ(xi​)不能比 ρ0\rho_0ρ0​ 小太多 (ρ0\rho_0ρ0​ 已经是最大密度点),那么该点就被加入到增长区域 RRR 中,也就是满足下式:
    NEps(x0)={xi∈C∣∥xi−x0∥≤ϵ∩ρ(xi)ρ0≥τ}.{\rm NEps}(\bm x_0)=\{\bm x_i\in C|\|\bm x_i - \bm x_0\|\le\epsilon\cap \frac{\rho(\bm x_i)}{\rho_0}\ge\tau \}. NEps(x0​)={xi​∈C∣∥xi​−x0​∥≤ϵ∩ρ0​ρ(xi​)​≥τ}.
    当 RRR 无法加入新的 xi\bm x_ixi​ 时,选择 RRR 中离 x0\bm x_0x0​ 距离最远的一个点作为新的种子点开始新的区域增长 (更新同一个 RRR),当 ∣R∣|R|∣R∣ (也就是 RRR 中点的个数)超过给定阈值 NNN 时,区域增长结束输出点集 RRR (如果无法更新 RRR时 也没达到 NNN 就将这一组点认为是 outliers 暂时从 CCC 中删除)。
  2. 根据步骤1中输出的 inliers 集合 RRR,利用GMMs算法拟合出一个椭圆θ0\bm \theta_0θ0​.

内层HGMMs以外层输出 θ0\bm \theta_0θ0​ 作为初始椭圆,以 CCC 中所有数据点作为inputs 点集,再次进行GMMs拟合出一个最终的椭圆。

一点点理解

GMMs中的参数 mmm (也就是下图的 ‘NNN’) 是控制椭圆模型 g(x∣θ)g(\bm x|\bm \theta)g(x∣θ) 中采样点 ui\bm u_iui​ 的个数,也就是GMMs中高斯核的个数,过小的高斯核过于孤立不能很好的表达一个椭圆的轮廓(如图e),过多的高斯核又有太多的冗余信息影响算法效率,论文中经过实验选择为了20。hhh 是控制是控制单个高斯核的“胖瘦”(协方差矩阵),胖一点的高斯核可以接收到更多input points的反馈但也容易受离群点的影响,瘦一点的高斯核更精确但容易过拟合,论文中用模拟退火算法来得到最佳 hhh。

HGMMs主要贡献是两个:(1)在GMMs外部套了一层寻找最优初始椭圆 θ0\bm \theta_0θ0​ 的预处理步骤,从论文的实验来看这一步的效果很好,最优化问题的初始值选取一直是一个十分重要的问题(CNN网络的权值初始化也是这个道理);(2)优化目标不仅仅是考虑 density 的 L2L_2L2​ loss 而是同时考虑了distance 和 density,论文中也用实验证明了最优的 L2L_2L2​ loss 并不能映射为最优的椭圆参数 θ\bm \thetaθ.

HGMMs的一点点理解~相关推荐

  1. 对Thrift的一点点理解

    对Thrift的一点点理解 这是一篇学习Thrift的笔记,包含了这样几点内容: 简单介绍Thrift 怎样使用Thrift Thrift整体架构 Thrift中的知识点 struct可以设置默认值 ...

  2. 重学概率论的一点点理解(持续更新)

    前言:这里是毕业N年后重学概率的一点点理解,因为上学的时候贪玩了,现在到了还的时候,要花费大量的时间,悲剧...所以请同学们抓紧在校时间,务必多夯实基础. 文章内容都是自己手工敲的,算是一点点学习笔记 ...

  3. javascript中函数参数以及函数中局部变量作用域一点点理解

    2019独角兽企业重金招聘Python工程师标准>>> 函数中局部变量如果与外部变量重名,则用的是函数内部局部变量,用完就会被释放.我的理解函数是一个function定义的代码段,以 ...

  4. 对线性时不变系统(LTI)中时不变(Time Invariant)的一点点理解

    这个博客又找回来了,重新恢复更新 ==========================================x 这个问题讨论的是一个系统对于一个随时间变化的输入信号x的一个处理问题. 时不变 ...

  5. 对sizeof的一点点理解

    sizeof sizeof的常量性 常量性的概念:简单的说就是编译的时候就可以确定他的值了,就好像是const一样 在一些老式的编译器里面你是不能够声明一个不确定大小的数组的,也就是说以下写法是错误的 ...

  6. 软件定义安全的一点点理解

    万事开头难,中间也难,最后也难.第一次写博客,内容.排版都不太好,请见谅.文章内容部分来源绿盟的<软件定义下的新型安全架构和实践>.<软件定义安全>以及<软件定义安全:S ...

  7. 强化学习(Reinforcement Learning)之策略梯度(Policy Gradient)的一点点理解以及代码的对应解释

    一.策略梯度算法推导以及解释 1.1 背景 设πθ(s)\pi_{\theta }(s)πθ​(s)是一个有网络参数θ\thetaθ的actor,然后我们让这个actor和环境(environment ...

  8. 网关是什么意思 这我对网关的一点点理解

    现在信息网络的发达,人们在使用电脑的过程中必然会遇到一些问题,而对于一些电脑的专用名词,如果你不是专业人士,可能在遇到这些问题时是一筹莫展的.其实网关有一个很简单的理解思路,就是当我们从一个空间到另一 ...

  9. 用我对HTML的点点理解来做个简单的百度首页

    为什么80%的码农都做不了架构师?>>>    在我心里,HTML一直以来都是一个新鲜而神秘的东西,好多次想静下心来研究研究,最终因为各种原因搁置下来.终于,最近终于有时间看看其中的 ...

最新文章

  1. HUMAnN2:人类微生物组统一代谢网络分析2
  2. With在sql server 2005中的用法
  3. centos设置mysql初始l密码_CentOS 7下安装MySQL后重置root密码方法
  4. kotlin集合操作符——过滤操作符
  5. SAP云平台CloudFoundry环境里新建SAP UI5应用后,自动生成了哪些组件
  6. SAP gateway请求上下文的初始化策略
  7. bmp180气压传感器工作原理_陕西压力传感器的工作原理信息推荐
  8. SQL SERVER查看当前连接情况
  9. 三星S4 GT-I9500 Google服务包及刷机教程
  10. 防火墙 firewall 及端口查看
  11. codeforces 1384A(构造)
  12. 像素,尺寸大小的转换
  13. Python+networkx 网络可视化方法
  14. ERNIE: Enhanced Representation through Knowledge Integration, Yu Sun 2020【representation+Bert+ner】
  15. 产品设计实战(上):Axure9绘制高保真原型
  16. 将1自动补位为01_苹果图标自动补位怎么关闭
  17. ElasticSearch服务(一)
  18. Android中singleTask模式没起作用!!
  19. 向量空间模型原理(VSM)
  20. 【渝粤教育】电大中专Office办公软件 (15)作业 题库

热门文章

  1. python自动化处理,获得免费wps会员,云函数2021.4.25反馈失效(以后不进行此文章维护了)
  2. 无人值守,智能变电站可视化管控系统
  3. combiner函数的使用注意事项和代码演示
  4. STC16f40k128——PWM
  5. elementui中el-table实现翻页、全选
  6. 简单典型二阶系统_城市轨道交通弱电系统集中UPS容量的计算
  7. php中输出每一层的平方数,打印本页 - 求复矩阵的每一个元素的模的平方
  8. 设计一个算法,将一般算术表达式转化为逆波兰表达式,并求逆波兰表达式的值
  9. 企业为什么要进行CCRC认证?
  10. 计算机领域应用论文,GIS技术在计算机领域的应用_优秀论文