三维线段多平面重建

科研之路开始的地方~

问题表达

线段表示(两端点)

\[l=\mathbf{p}_1:(x_1,y_1,z_1)\rightarrow \mathbf{p}_2:(x_2,y_2,z_2)\]

平面表示(点法式)

\[f=\{\mathbf{v}:(a,b,c),\mathbf{n}:(n_x,n_y,n_z)\}\]

对于给定三维线段集$D={l_1,l_2,\cdots,l_n}$,如何重建出平面集${f_1,f_2,\cdots,f_k}$,$k$未知,使得线段到所属平面距离最小。作为聚类问题来处理。

概率建模

假设平面的数量$k$已知,同时假设各个面的概率分布为: $\mathrm{P}(f_1),\mathrm{P}(f_2),\cdots,\mathrm{P}(f_k),\sum_{i=1}^k\mathrm{P}(f_i)=1$,接下来对条件概率$\mathrm{P}(l\,|f_i)$作出如下假设:

\[\mathrm{P}(l\,| f_i)=\frac1{\sqrt{2\pi}\sigma_i}\exp\{-\frac{[(\mathbf{p}_1-\mathbf{v}_i)\cdot \mathbf{n}_i]^2+[(\mathbf{p}_2-\mathbf{v}_i)\cdot \mathbf{n}_i]^2}{2\sigma_i^2}\}\]

利用贝叶斯公式,可以得到线段样本的概率:

\[\mathrm{P}(l)=\sum_{i=1}^k\mathrm{P}(l\,|f_i)\mathrm{P}(f_i)\]

对于目前给定的三维线段集$D={l_1,l_2,\cdots,l_n}$, 假设其中每个元素都是独立的样本,采样最大似然估计来估计上面模型的各个参数。假设以上平面和先验概率分布参数集合为$\theta$,接下来就是估计一个$\hat \theta$ 使得 $\mathrm{P}(D|\theta)$最大。

参数估计

考虑对数似然,

\[\ln[\mathrm{P}(D|\theta)]=\sum_{i=1}^n\ln[\mathrm{P}(l_i|\theta)]=\sum_{i=1}^n\ln[\sum_{j=1}^k\mathrm{P}(l_i|f_j,\theta_j)\mathrm{P}(f_j)]\]

转化为优化问题求取参数。类似于高斯混合模型,采用EM算法来进行参数估计。

  • 明确隐变量

反映观测线段$l_i$来自平面$f_j$的数据是未知的,用隐变量$\gamma_{ij}$表示,定义如下:

\[\gamma_{ij}= \begin{cases} \begin{aligned} 1,& \quad l_i\in f_j\\ 0,& \quad otherwise \end{aligned} \end{cases}\]

那么可以写出完全数据的似然函数:

\[\begin{align} \mathrm{P}(l,\gamma|\theta)=& \prod_{i=1}^n\mathrm{P}(l_i,\gamma_{i1},\gamma_{i2},\ldots,\gamma_{ik}|\theta)\\=& \prod_{i=1}^n\prod_{j=1}^k\left[\mathrm{P}(l_i|f_j,\theta_j)\mathrm{P}(f_j)\right]^{\gamma_{ij}}\\=& \prod_{j=1}^k\mathrm{P}(f_j)^{c_j}\prod_{i=1}^n\left[\mathrm{P}(l_i|f_j,\theta_j)\right]^{\gamma_{ij}}\\=& \prod_{j=1}^k\mathrm{P}(f_j)^{c_j}\prod_{i=1}^n\left[\frac1{\sqrt{2\pi}\sigma_j}\exp\left({-\frac{((\mathbf{p}_{i1}-\mathbf{v}_j)\cdot \mathbf{n}_j)^2+((\mathbf{p}_{i2}-\mathbf{v}_j)\cdot \mathbf{n}_j)^2}{2\sigma_j^2}}\right)\right]^{\gamma_{ij}} \end{align}\]

这里$c_j=\sum_{i=1}^n\gamma_{ij}$,完全数据的对数似然函数为

\[\ln\mathrm{P}(l,\gamma|\theta)=\sum_{j=1}^k\left\{c_j\ln \mathrm{P}(f_j)+\sum_{i=1}^n\gamma_{ij}\left[\ln\frac{1}{\sqrt{2\pi}\sigma_j}-\frac1{2\sigma_j^2}\left(((\mathbf{p}_{i1}-\mathbf{v}_j)\cdot \mathbf{n}_j)^2+((\mathbf{p}_{i2}-\mathbf{v}_j)\cdot \mathbf{n}_j)^2\right)\right] \right\}\]
  • 确定Q函数

EM算法的E的步骤,确定Q函数

\[\begin{gathered} \mathrm{Q}(\theta,\theta^{(i)})=\mathcal{E}[\ln\mathrm{P}(l,\gamma|\theta)|l,\theta^{(i)}]=\mathcal{E}\left\{\sum_{j=1}^k\left\{c_j\ln P(f_j)+\sum_{i=1}^n\gamma_{ij}\left[\ln\frac1{\sqrt{2\pi}\sigma_j}-\frac{((\mathbf{p}_{i1}-\mathbf{v}_j)\cdot \mathbf{n}_j)^2+((\mathbf{p}_{i2}-\mathbf{v}_j)\cdot \mathbf{n}_j)^2}{2\sigma_j^2}\right]\right\}\right\} =\sum_{j=1}^k\left\{\sum_{i=1}^n\mathcal{E}(\gamma_{ij})\ln P(f_j)+\sum_{i=1}^n\mathcal{E}(\gamma_{ij})\left[\ln\frac1{\sqrt{2\pi}\sigma_j}-\frac{((\mathbf{p}_{i1}-\mathbf{v}_j)\cdot \mathbf{n}_j)^2+((\mathbf{p}_{i2}-\mathbf{v}_j)\cdot \mathbf{n}_j)^2}{2\sigma_j^2}\right]\right\} \end{gathered}\]

计算期望$\mathcal{E}(\gamma_{ij}|l_i,\theta)$, 记为$\hat\gamma_{ij}$:

\[\begin{align} \hat\gamma_{ij}=&\mathcal{E}(\gamma_{ij}|l_i,\theta)=P(\gamma_{ij}=1|l_i,\theta_j)\\ =&\frac{P(\gamma_{ij}=1,l_i|\theta_j)}{\sum_{j=1}^kP(\gamma_{ij}=1,l_i|\theta_j)}\\=& \frac{P(l_i|\gamma_{ij}=1,\theta_j)P(\gamma_{ij}=1|\theta)}{\sum_{j=1}^kP(l_i|\gamma_{ij}=1,\theta_j)P(\gamma_{ij}=1|\theta)}\\=& \frac{P(f_j)P(l_i|f_j,\theta)}{\sum_{j=1}^kP(f_j)P(l_i|f_j,\theta)} \end{align}\]

将$\hat \gamma_{ij},c_j=\sum_{i=1}^n\hat \gamma_{ij}$代入Q函数得到

\[\mathrm{Q}(\theta,\theta^{(i)})=\sum_{j=1}^kc_j\ln P(f_j)+\sum_{i=1}^n\hat \gamma_{ij}\left[\ln\frac1{\sqrt{2\pi}\sigma_j}-\frac{((\mathbf{p}_{i1}-\mathbf{v}_j)\cdot \mathbf{n}_j)^2+((\mathbf{p}_{i2}-\mathbf{v}_j)\cdot \mathbf{n}_j)^2}{2\sigma_j^2}\right]\]
  • 求极大

因为$\sum_{i=1}^k\mathrm{P}(f_i)=1$约束最优化问题可以写成

\[\max_{\theta}\,\mathrm{Q}(\theta,\theta^{(i)})\\ \begin{align} s.t. \sum_{j=1}^k\mathrm{P}(f_j)=1 \end{align}\]

写成拉格朗日函数:

\[\mathcal{L}=\mathrm{Q}(\theta,\theta^{(i)})+\lambda\left[1-\sum_{j=1}^k\mathrm{P}(f_j)\right]\]

对$P(f_j)$求偏导并令其为0:

\[\frac{\partial\mathcal{L}}{\partial P(f_j)}=\frac{c_j}{P(f_j)}-\lambda=0\Rightarrow c_j=\lambda P(f_j)\Rightarrow \sum_{j=1}^n c_j=\sum_{j=1}^n \lambda P(f_j)\Rightarrow \lambda=n\Rightarrow P(f_j)=\frac{c_j}{n}\]

对$\sigma_j$求偏导并令其为0:

\[\frac{\partial \mathcal{L}}{\partial \sigma_j}=\sum_{i=1}^n \hat\gamma_{ij}\frac{((\mathbf{p}_{i1}-\mathbf{v}_j)\cdot \mathbf{n}_j)^2+((\mathbf{p}_{i2}-\mathbf{v}_j)\cdot \mathbf{n}_j)^2-\sigma_j^2}{\sigma_j^3}=0\\ \Downarrow\\ \sigma_j^2=\frac{\sum_{i=1}^n \hat\gamma_{ij}[((\mathbf{p}_{i1}-\mathbf{v}_j)\cdot \mathbf{n}_j)^2+((\mathbf{p}_{i2}-\mathbf{v}_j)\cdot \mathbf{n}_j)^2]}{\sum_{i=1}^n \hat\gamma_{ij}}\]

对$\mathbf{n}_j$求偏导并令其为0:

\[\frac{\partial\mathcal{L}}{\partial \mathbf{n}_j}= -\sum_{i=1}^n\frac{\hat \gamma_{ij}}{\sigma_j^2}[(\mathbf{p}_{i1}-\mathbf{v}_j)^T \mathbf{n}_j(\mathbf{p}_{i1}-\mathbf{v}_j)+(\mathbf{p}_{i2}-\mathbf{v}_j)^T \mathbf{n}_j(\mathbf{p}_{i2}-\mathbf{v}_j)]=0\\ \Downarrow\\ -\frac1{\sigma_j^2}\left\{\sum_{i=1}^n\hat\gamma_{ij}\left[(\mathbf{p}_{i1}-\mathbf{v}_j)(\mathbf{p}_{i1}-\mathbf{v}_j)^T +(\mathbf{p}_{i2}-\mathbf{v}_j)(\mathbf{p}_{i2}-\mathbf{v}_j)^T \right]\right\}\mathbf{n}_j=0\]

\[A=\left\{\sum_{i=1}^n\hat\gamma_{ij}\left[(\mathbf{p}_{i1}-\mathbf{v}_j)(\mathbf{p}_{i1}-\mathbf{v}_j)^T +(\mathbf{p}_{i2}-\mathbf{v}_j)(\mathbf{p}_{i2}-\mathbf{v}_j)^T \right]\right\}\]

解线性方程$A\mathbf{n}_j=0$得到$\mathbf{n}_j$,但是该方程不一定有非零解。考虑到这一点,将该问题再转化为优化的问题

\[\min_{\mathbf{n}_j}\Vert A\mathbf{n}_j\Vert\]

因为尺度大小的影响,对$\mathbf{n}_j$再加入一个约束$\Vert\mathbf{n}_j\Vert=1$,可以得到

\[\min_{\mathbf{n}_j} \mathbf{n}_j^TA^TA\mathbf{n}_j\\ \begin{align} s.t. \mathbf{n}_j^T\mathbf{n}_j=1 \end{align}\]

等价于对$A^TA$进行特征值分解,因为$A^TA$半正定,而且$A$是半正定对称矩阵,所以$A$最小特征值对应的特征向量即为$\mathbf{n}_j$;

对$\mathbf{v}_j$求偏导并令其为0

\[\frac{\partial\mathcal{L}}{\partial \mathbf{v}_j}=\sum_{i=1}^n\frac{\hat \gamma_{ij}}{\sigma_j^2}[\mathbf{n}_j^T(\mathbf{p}_{i1}-\mathbf{v}_j)\mathbf{n}_j+\mathbf{n}_j^T(\mathbf{p}_{i2}-\mathbf{v}_j)\mathbf{n}_j]=0\\ \Downarrow\\ \frac1{\sigma_j^2}\sum_{i=1}^n\hat\gamma_{ij}\left[\mathbf{n}_j\mathbf{n}_j^T(\mathbf{p}_{i1}+\mathbf{p}_{i2}-2\mathbf{v}_j)\right]=0\\ \Downarrow\\ \frac1{\sigma_j^2}\mathbf{n}_j\mathbf{n}_j^T\left[\sum_{i=1}^n\hat\gamma_{ij}(\mathbf{p}_{i1}+\mathbf{p}_{i2})\right]=\frac2{\sigma_j^2}\mathbf{n}_j\mathbf{n}_j^T\left(\sum_{i=1}^n\hat\gamma_{ij}\right)\mathbf{v}_j\\ \Downarrow\\ \mathbf{v}_j=\frac{\sum_{i=1}^n\hat\gamma_{ij}(\mathbf{p}_{i1}+\mathbf{p}_{i2})}{2\sum_{i=1}^n\hat\gamma_{ij}}\]

算法描述

输入:三维线段集$D={l_1,l_2,\cdots,l_n}$,概率模型

输出:概率模型参数

  1. 取参数的初值开始迭代

  2. E步:依据当前模型参数,计算平面对线段的响应度

\[\hat\gamma_{ij}=\frac{P(f_j)P(l_i|f_j,\theta)}{\sum_{j=1}^kP(f_j)P(l_i|f_j,\theta)},\quad i=1,2,\ldots,n,\quad j=1,2,\ldots,k\]
  1. M步:计算新一轮迭代的模型参数,
\[\hat P(f_i)=\frac{\sum_{i=1}^n\hat\gamma_{ij}}{n},\quad j=1,2,\ldots,k\\ \hat \sigma_j^2=\frac{\sum_{i=1}^n \hat\gamma_{ij}[((\mathbf{p}_{i1}-\mathbf{v}_j)\cdot \mathbf{n}_j)^2+((\mathbf{p}_{i2}-\mathbf{v}_j)\cdot \mathbf{n}_j)^2]}{\sum_{i=1}^n \hat\gamma_{ij}},\quad j=1,2,\ldots,k\\ A=\sum_{i=1}^n\hat\gamma_{ij}\left[(\mathbf{p}_{i1}-\mathbf{v}_j)(\mathbf{p}_{i1}-\mathbf{v}_j)^T +(\mathbf{p}_{i2}-\mathbf{v}_j)(\mathbf{p}_{i2}-\mathbf{v}_j)^T \right],A\mathbf{\hat n}_j=\lambda_{min}\mathbf{\hat n}_j,\quad j=1,2,\ldots,k\\ \mathbf{\hat v}_j=\frac{\sum_{i=1}^n\hat\gamma_{ij}(\mathbf{p}_{i1}+\mathbf{p}_{i2})}{2\sum_{i=1}^n\hat\gamma_{ij}}\]
  1. 重复2、3步直到收敛。

根据最终的$\mathbf{v}_j,\mathbf{n}_j(j=1,2,\ldots,k)$即可确定最后的平面集合。

TODO

类似于GMM到K-Means的简化,算法简化假设先验概率相等,后验概率0-1近似。和K-Means一样,模型对初值敏感,对outlier敏感。目前初值是选取模型包围盒对角线上的n点,每个点三个互相正交的平面。方差初始值设为两个面之间的距离

Results

cluster/3, iteration times

(11,22) 先进院部分面采样

1567493165581

(19,25)大疆旗舰店

1567492906629

(15,30)先进院

1567491306765

(19)

1568282745676

(41,56)

1568191594641

(41,50)大疆modified

1568198597644

(53,49)

1568867746122

(61)

1568881560433

1568881567873

如果您觉得该文章对您有用,欢迎打赏作者,激励创作!
Welcome to tip the author!

微信(WeChat Pay) 支付宝(AliPay)
比特币(Bitcoin) 以太坊(Ethereum)
以太坊(Base) 索拉纳(Solana)