pcl::MovingLeastSquares滑动最小二乘

http://www.sci.utah.edu/~shachar/Publications/crpss.pdf

一 简介

基于点的形状传输应当是尽量小的。当数据没有噪音或者冗余时,文献[1]介绍如何调整点的密度,来重建曲线,下图1显示了不同密度的显示,根据微分几何构建最小误差模型近似计算,下图1是使用(Moving least squares:MLS)移动最小二乘法生成的,本文将介绍数学公式的推导和证明来近似曲面(包括曲面误差)。
[1:M. Alexa, J. Behr, D. Cohen-Or, S. Fleishman, D. Levin, and C. T. Silva. Point set surfaces. In IEEE Visualization 2001, pages 21–28, October 2001. ISBN0-7803-7200-x.]
pcl::MovingLeastSquares滑动最小二乘_第1张图片

图一

3D点的生成来自采样过程,这些点再通过上采样或下采样处理。
假设有一个数据点集 P = { p i } ( 来 自 于 3 D 扫 描 设 别 ) P=\{p_i\}(来自于3D扫描设别) P={pi}(3D),根据输入定义一个光滑曲面 S p ( M L S : 移 动 最 小 2 乘 曲 面 ) S_p(MLS:移动最小2乘曲面) Sp(MLS2),这里我们建议使用一个缩小的点集 R { r i } ( 来 自 于 P 中 的 一 部 分 ) ( R\{r_i\}(来自于P中的一部分)( R{ri}(P)代替 P P P)生成 S R ( 代 替 S P ) S_R(代替S_P) SR(SP)
pcl::MovingLeastSquares滑动最小二乘_第2张图片
图2:采样点的精度与误差

对于曲线 S P : S_P: SP:我们给出了如下性质定义:

  1. 光滑流行(Smooth manifold:):期望曲线是2-manifold(2样的?没学过微分几何)并且接近与 C ∞ C^{\infty} C平滑,给定点足够接近所表示的光滑表面。

  2. 有界采样误差(Bounded samplingerror): S R S_R SR通过一系列的 { r i } \{r_i\} {ri}描述,并且应该满足 d ( S P , S R ) < ξ d(S_P,S_R)<\xi d(SP,SR)<ξ,d为Hausdorff距离。
    Hausdorff距离:来自于,度量了两个点集间的最大不匹配程度
    假设存在集合 A = { a 1 , . . . , a n } , B = { b 1 , . . . , b m } A=\{a_1,...,a_n\},B=\{b_1,...,b_m\} A={a1,...,an},B={b1,...,bm}
    定义Hausdorff距离为: H ( A , B ) = m a x ( h ( A , B ) , h ( B , A ) ) ( 双 向 H a u s d o r f f 距 离 ) H(A,B)=max(h(A,B),h(B,A))(双向Hausdorff距离) H(A,B)=max(h(A,B),h(B,A))(Hausdorff)
    其中: h ( A , B ) = m a x ( a ∈ A ) m i n ( b ∈ B ) ∣ ∣ a − b ∣ ∣ ( A 集 合 到 B 集 合 的 单 向 H a u s d o r f f 距 离 ) , h ( B , A ) = m a x ( b ∈ B ) m i n ( a ∈ A ) ∣ ∣ b − a ∣ ∣ ( ∣ ∣ . ∣ ∣ 范 数 ) h(A,B)=max(a\in A)min(b\in B)||a-b||(A集合到B集合的单向Hausdorff距离),h(B,A)=max(b\in B)min(a\in A)||b-a||(||.||范数) h(A,B)=max(aA)min(bB)ab(ABHausdorff),h(B,A)=max(bB)min(aA)ba(.)

  3. 局部计算(Local computation):对于曲面上的一点,必须具备邻域点,结果不依赖于点的特征尺寸而不是点的数量(与曲面的隐式定义完全不同),论文中额外引入了误差界限(error bounds),可以求出我们所序渲染的属性。

  4. 高质量(high quakity):由于图中的 S R S_R SR是光滑的,适当的重采样可以获取更加平滑的曲线和法线,从而获取更更高质量的渲染结果

  5. 单步性(Single step procedure):重采样可以保证足够的采样率,不会造成缺失,也就是在后序的步骤中不去填充。

二 文献综述

()使用测距仪获取物体3维数据,数据是视距误差、传感器固有误差并与实际物体相互作用的结果,为了获得更精确的结果,对于一个物体会进行多次扫描,扫描结果常常会覆盖同一个区域,我们常常采用粗点集表述出结果。
()对于粗点集常用的方法时生成一个三角曲面模型,文献[2,3,5,7,17]介绍了几种有效的三角化测量方法,其缺点就是不能生成凹凸不平的界面,比如孔洞、隧道,所以需要进一步的平滑和流行处理,最困难的是,一些点可能无法插值进平滑平面,需要对这些点进行修饰(massaging),使其可以插值进入名面, Hoppe et al [23], Curless and Levoy[12], and Wheeler et al [55] 整合自己的数据隐式的表示在体积网格上,后边略。

三 定义曲面

该方法依赖于点隐式定义平面,主要方法是定义一个投影过程,任何在同一个相邻曲面的点都可以放到同一个平面内,然后定义MLS曲面到其的投影。论文介绍了投影过程,证明了投影和给出流形的性质有关如何有效计算投影的详细信息。

3.1 投影过程

已知 p i ∈ R 3 , i ∈ ( 1 , 2 , . . . , N ) p_i\in R^3,i\in(1,2,...,N) piR3,i(1,2,...,N),是曲面S(含有测量噪声)的采样点。
目地:将一个 r ∈ R 3 r\in R^3 rR3(在曲面S上),投影到2维曲面 S P S_P SP,使其逼近 p i p_i pi,使用微分几何,将其逼近逼近为一个函数。
文中介绍了如下几个概念:

  1. 局部引用域(Reference domain)
    首先找找到一个 r r r局部参考平面H,见图3
    (1):首先找到局部参考平面(图中的H)
    H = { x ∣ < n , x > − D = 0 , x ∈ R 3 , ∣ ∣ n ∣ ∣ = 1 } : H=\{x|-D=0,x\in R^3,||n||=1\}: H={x<n,x>D=0,xR3,n=1}:H使点集 p i p_i pi到平面H的加权平方和最小
    g : 拟 合 的 局 部 多 项 式 曲 线 w 文 中 也 称 ( S p ) g:拟合的局部多项式曲线w文中也称(S_p) g:线w(Sp)
    n : 平 面 的 法 向 量 n:平面的法向量 n:
    r : R 3 上 一 点 r:R^3上一点 r:R3
    q : r 在 H 上 的 投 影 q:r在H上的投影 q:rH
    H可以通过最小化目标函数定义:
    θ : 平 滑 递 减 函 数 \theta:平滑递减函数 θ::公式(1)
    H = m i n ∑ i = 1 N ( < n , p i > − D ) 2 θ ( ∣ ∣ p i − q ∣ ∣ ) ( 其 中 ∣ ∣ p i − q ∣ ∣ 为 2 范 数 , θ 为 每 个 点 的 权 重 ) H=min\sum_{i=1}^N(-D)^2\theta(||p_i-q||)(其中||p_i-q||为2范数,\theta为每个点的权重) H=mini=1N(<n,pi>D)2θ(piq)piq2,θ
    有图3可知 q = r + t n q=r+tn q=r+tn:公式(2)
    H = m i n ∑ i = 1 N < n , p i − r − t n > 2 θ ( ∣ ∣ p i − r − t n ∣ ∣ ) H=min\sum_{i=1}^N^2\theta(||p_i-r-tn||) H=mini=1N<n,pirtn>2θ(pirtn)
    pcl::MovingLeastSquares滑动最小二乘_第3张图片

    图三

    (2)局部映射(local map):
    r的局部引用域是用来在r的邻域内,用一个一个2元多项式来拟合曲面,见图3。
    q i : 表 示 p i 在 平 面 H 的 投 影 q_i:表示p_i在平面H的投影 qi:piH
    f i : 表 示 p i 到 H 的 距 离 f i = r → ( p i − q ) f_i:表示p_i到H的距离f_i=\overrightarrow{r} (p_i-q) fi:piHfi=r (piq)
    g : 点 r 邻 域 内 拟 合 2 元 多 项 式 得 到 曲 线 ( 拟 合 曲 面 ) g:点r邻域内拟合2元多项式得到曲线(拟合曲面) g:r2线
    通过计算多项式航函数g的系数,获取权重的最小二乘误差(用于得到平面H),得到下列方程
    x i , y i : 表 示 q i 在 平 面 H 中 的 坐 标 x_i,y_i:表示q_i在平面H中的坐标 xi,yi:qiH
    拟 合 多 项 式 的 最 小 二 乘 误 差 如 下 : 拟合多项式的最小二乘误差如下:
    ∑ i = 1 N ( g ( x i . y I ) − f i ) 2 θ ( ∣ ∣ p i − q ∣ ∣ ) \sum _{i=1}^N(g(x_i.y_I)-f_i)^2\theta(||p_i-q||) i=1N(g(xi.yI)fi)2θ(piq)
    ρ 表 示 r 到 曲 线 S p 的 映 射 且 有 ρ ( r ) = q + g ( 0 , 0 ) n → = r + ( t + g ( 0 , 0 ) ) n → \rho表示r到曲线S_p的映射且有\rho(r)=q+g(0,0)\overrightarrow{n}=r+(t+g(0,0))\overrightarrow{n} ρr线Spρ(r)=q+g(0,0)n =r+(t+g(0,0))n

  2. 投影的性质
    (1)上述操作是非常重要的确保投影时不会改变曲面。
    (2)从公式(2)可知如果取(t,n)是r取最小值,那么等价于(s,n)时式 r + ( s − t ) n r+(s-t)n r+(st)n中r取最小值。假设在领域 U ∈ R U\in R UR存在全局最小值q,那么对于局部映射 ρ \rho ρ来数,(t,n)为 q = r − t n q=r-tn q=rtn最小值,那么 q + g ( 0 , 0 ) n = r + ( t + g ( 0 , 0 ) ) q+g(0,0)n=r+(t+g(0,0)) q+g(0,0)n=r+(t+g(0,0))使其相对应映射上的极小值。
    (3)文中用作投影的距离是 p i p_i pi到q距离(而不是p_i到r的距离,这个距离求出来的值不能表示投影, θ \theta θ将不能沿着所需方向移动)
    (4)曲线 S P S_P SP被定义为投影到 R 3 R^3 R3上的子集,因此可以论证 S P S_P SP时2维平面:
    公式(2)有6个自由度,r有3格自由度,n有2个,t有一个;
    存在极小值的必要条件:3维的偏导数和t=0,
    因此6-4=2得到2自由度的 S P S_P SP
    (5)这种方法不使用子集去获取一块平面,每个点都有其相对应的支撑面( support planes),可以避免形状分段参数化的常见问题,例如参数化依赖性、变形边界的参数化和连续性问题。
    (6)这种方法存在如下问题:需要证明其任意一点在曲面上连续,因为其人与内的点通常有不同的对应支撑面( support planes)
    (7)单点的逼近通常由 θ \theta θ决定,论文[33]指出:
    h : 表 示 相 邻 点 之 间 的 间 距 h:表示相邻点之间的间距 h:
    θ ( d ) = e − d 2 h 2 \theta(d)=e^{-\frac{d^2}{h^2}} θ(d)=eh2d2
    通过改变h,表面可以被调整h,获取平滑S中小于h的特征,更具体的说:当h小时,会导致高斯衰减更快,更近似局部特征,
    相反,h的大值会导致全局逼近,平滑尖锐或振荡的特征从表面上看。
    pcl::MovingLeastSquares滑动最小二乘_第4张图片

    图4 h较大,MLS产生图像

    pcl::MovingLeastSquares滑动最小二乘_第5张图片
    图4 h较小,MLS产生图像

  3. 计算投影。
    介绍如何计算投影、多项式系数和参数h。( θ ( d ) = e − d 2 h 2 \theta(d)=e^{-\frac{d^2}{h^2}} θ(d)=eh2d2)
    step1:投影问题是一个最小二乘问题:
    = ∑ i = 1 N < n , p i − r − t n > 2 θ ( ∣ ∣ p i − r − t n ∣ ∣ ) =\sum_{i=1}^N^2\theta(||p_i-r-tn||) =i=1N<n,pirtn>2θ(pirtn)
    (1):上述目标函数通常会产生多个局部最小值,有定义可知,我们必须从这些之中选择t之最小的(意味着最接近与r),本文使用迭代方法,找到局部最小值。
    (2) :在初始状态下(没有额外的信息),在 t = 0 t=0 t=0时开始迭代,这时曲线近似于法线,权重 θ i = θ ( ∣ ∣ p i − r ∣ ∣ ) \theta_i=\theta(||p_i-r||) θi=θ(pir)是固定的,令 B = { b j k } , B ∈ R 3 × 3 B=\{b_{jk}\},B\in R^{3×3} B={bjk},BR3×3,权重的协防差为:
    b j k = ∑ i θ i ( p i j − r j ) ( p i k − r k ) b_{jk}=\sum_{i}\theta_i(p_{i_j}-r_j)(p_{i_k}-r_k) bjk=iθi(pijrj)(pikrk)
    于是公式(2)变成了,最小化问题:
    m i n ∣ ∣ n ∣ ∣ = 1 n T B n min_{||n||=1}n^TBn minn=1nTBn
    (3)*如果法向量是计算出来的(或者事先已知的),n变成固定的,**那么最小问题变成了一元非线性最小化问题。通常来讲,这个问题是无法的到确定值的,因为局部最小值的数量 N N N p i p_i pi相关,然而通过实践应用发现在 t ∈ [ − h 2 , h 2 ] t\in[-\frac{h}{2},\frac{h}{2}] t[2h,2h]范围内,通常只有一个局部最小值。h值与特征尺寸相关,小于h的特征会被平滑,意味着小于h的特征点不会提供过多的最小值。因此本文假设:任何被投影点与它投影的距离最多为 h 2 \frac{h}{2} 2h(结果是令人满意的)。
    里上述先决条件得到了新的约束方程如下:
    2 ∑ i = 1 N < n , p i − r − t n > ( 1 + < n , p i − r − t n > 2 h 2 ) e ∣ ∣ p i − r − t n ∣ ∣ 2 / h 2 2\sum_{i=1}^N(1+\frac{^2}{h^2})e^{||p_i-r-tn||^2/h^2} 2i=1N<n,pirtn>(1+h2<n,pirtn>2)epirtn2/h2
    (4):当t是已知的且 t ≠ 0 t\neq 0 t=0,计算法向量 n n n也是一个非线性最小二乘问题,因为随着 q = r + t n q=r+tn q=r+tn改变,权重 θ \theta θ也会改变,切面可以可视化为一个原点为 r r r,半径为 t t t的球面(||n||=1)。实践中发现,法向量(或者说q)的变化很小,利用当前值拟合球面,得到球面 r + t n r+tn r+tn,得到t,n.:主要思想是使用共轭梯度法,定义一个子空间:n不能为无效值且 ∣ ∣ n ∣ ∣ = 1 ||n||=1 n=1总是成立,再求取共轭梯度,这种方法从理论上来讲会使搜索空间的收敛性变差,但是实践中,球面与支撑面之间差值很小。
    (5)计算支撑面步骤:
    第一步:初始r的法线n的估计值: r = q + t n r=q+tn r=q+tn
    <>作为输入的一部分给出(图像的方位中估计处)
    <>可以从数据点中提取(已处理的闭合点集)
    <>如果无法计算出右下的法线,使用协防差B替代: b j k = ∑ i θ i ( p i j − r j ) ( p i k − r k ) b_{jk}=\sum_{i}\theta_i(p_{i_j}-r_j)(p_{i_k}-r_k) bjk=iθi(pijrj)(pikrk)
    第二步:非线性迭代得到最小值:
    只要低于预设的误差 ξ \xi ξ
    已知进行如下两个步骤:
    <1>:在 [ − h / 2 , h / 2 ] [-h/2,h/2] [h/2,h/2]内沿t查找最小值,t的初值为±h/2
    <2>:求取q在H上的最小值。利用共轭梯度法求取(t,n),q=r+tn会产生一个新的(t,n),满足误差后的(t,n)得到支撑面H
    共轭梯度法
    step2:最小2乘问题
    如果H已知,那我就可以得到权重 θ i = θ ( ∣ ∣ p i − q ∣ ∣ ) \theta_i=\theta(||p_i-q||) θi=θ(piq) m i n ∑ i = 1 N ( g ( x i . y I ) − f i ) 2 θ ( ∣ ∣ p i − q ∣ ∣ ) min\sum _{i=1}^N(g(x_i.y_I)-f_i)^2\theta(||p_i-q||) mini=1N(g(xi.yI)fi)2θ(piq)的梯度是未知的,通常为3到4次多项式,可以抵抗震荡,计算速度快。

  4. 数据结构
    在整个投影算法中计算点r是消耗时间最长的,因为r来自于所有 p i p_i pi的系数,如果用简单方式实现,整个算法用 O ( n ) O(n) O(n)表示(n是点的数量),有两种方式实现快速下降
    <1>:把一定距离内的r的权重定义为0。称之为 d n : ( d_n:( dn:(neglect distance ) 忽 略 范 围 ) 忽略范围 ) d n d_n dn依赖于h,通常每一个cell大小为 2 d n 2d_n 2dn,对于每一个投影操作,需要最大8个单元格,这将导致非常小的内存占用,并产生简单有效的核心外实现,这使得这种方法的存储需求与点集的总大小无关。
    <2>:受n体问题启发,使用指定条目的单元格,即从远处观察,所有原理r的点都可以看作一个点。将每个cell看作成一个八叉树叶节点包含 p i p_i pi,inner节点包含点的数量信息在树节点和centroid上,当节点的维数大大小于其到r的距离,使用集合中心计算多项式系数,否则遍历子树,如果整个节点到r的距离为大于dn,可以忽略整个节点。
    另外要忽略的点也可以看作是一个独立的数学问题(由权重作为变量),并且权重函数必须是平滑的,比如 θ ( x ) = 2 x 3 − 3 x 2 + 1 \theta(x)=2x^3-3x^2+1 θ(x)=2x33x2+1

  5. 总结
    实际使用时,计算时间依赖于特征尺寸h,在Pentium PC上美妙处理1500-3500个,36K个点需要10-30s,较小h可以投影在邻域内快速计算出,当h足够小时,投影计算的时间可以忽略不计。

4 近似误差

pcl::MovingLeastSquares滑动最小二乘_第6张图片

  1. 如上图所示:
    { p i } \{p_i\} {pi}定义了曲面 S P S_P SP
    { r i } ∈ S P \{r_i\}\in S_P {ri}SP
    { r i } 定 义 了 S R \{r_i\}定义了S_R {ri}SR
    可以清楚的看到 S P 与 S R S_P与S_R SPSR之间的界限。
    由微分几何我们可以将平滑曲面表示成在局部坐标系的函数,我们在拟合二元函数 f f f时得到 m m m次曲线g,其误差为:
    ∣ ∣ g − f ∣ ∣ ≤ M ∗ h m + 1 ( M 为 常 量 , M 与 f 的 m + 1 导 数 相 关 , M ∈ O ∣ ∣ f ( m + 1 ) ∣ ∣ ) ||g-f||\leq M*h^{m+1}(M为常量,M与f的m+1导数相关,M\in O||f^{(m+1)}||) gfMhm+1M,Mfm+1,MOf(m+1)
    如果 S P S_P SP是平滑的,那么必存在常量 M m + 1 M_{m+1} Mm+1(来自于 S P S_P SP的m+1次导数相关),因此得到:
    S R : 来 自 数 据 集 R , M L S 生 成 , 与 S P 具 有 相 同 的 h S_R:来自数据集R,MLS生成,与S_P具有相同的h SRR,MLSSPh
    ∣ ∣ S P − S R ∣ ∣ ≤ M m + 1 h m + 1 ( S R , m 次 多 线 项 式 ) ||S_P-S_R||\leq M_{m+1}h^{m+1}(S_R,m次多线项式) SPSRMm+1hm+1(SR,m线)
    此外分段逼近函数保持不变:假设每一个 r i r_i ri定义一个支持平面, S P S_P SP是一个在 r i r_i ri距离 [ − h . h ] 2 [-h.h]^2 [h.h]2的平面,点r在平面上表示为一个大于直径为h的孔洞,在此假设下,可以得到局部,多项式点集 G i G_i Gi(在 r i r_i ri周围)拟合曲面 S P S_P SP的误差如下:
    G i : 多 项 式 块 ( p o l y n o m i a l p a t c h ) , 通 过 M L s 多 项 式 g i 为 点 r i 定 义 G_i:多项式块(polynomial patch),通过MLs多项式g_i为点r_i定义 Gi:polynomialpatch,MLsgiri
    其 相 应 的 局 部 参 考 界 面 为 : H i , 法 向 量 为 n i 其相应的局部参考界面为:H_i,法向量为n_i :Hi,ni
    对 应 正 交 坐 标 系 为 : { u i , v i , n i } , 原 点 为 q i 对应正交坐标系为:\{u_i,v_i,n_i\},原点为q_i {ui,vi,ni},qi
    ∣ ∣ S P − ∪ G i ∣ ∣ ≤ M m + 1 h m + 1 G i = { q i + x ∗ u i + y ∗ v i + g i ( x , y ) ∗ n i ∣ ( x , y ) ∈ [ − h , h ] 2 } ||S_P-\cup G_i||\leq M_{m+1}h^{m+1}\\ G_i=\{q_i+x*u_i+y*v_i+g_i(x,y)*n_i|(x,y)\in[-h,h]^2\} SPGiMm+1hm+1Gi={qi+xui+yvi+gi(x,y)ni(x,y)[h,h]2}

  2. 意义
    边界误差可以很好的解释曲率对分段逼近(网格)的重要意义,分段函数的误差依赖于空间点的距离和其2阶导数,意味着再去率搞得地方需要更多点来表示,
    然而,当用曲面使用高阶多项式近似时,曲率与逼近误差无关。使用三次多项式,逼近误差取决于曲面的四阶导数。请注意,我们的视觉系统无法感知超过二阶的平滑度[38]。因此,局部采样密度取决于一个“看不见的”标准,我们发现只要确定一个间距h就足够了,就可以决定 r i r_i ri, r i ∈ S P r_i\in S_P riSP。h越小,误差越小。然而,使用高阶多项式来近似sp原因当h减小时,误差减小得更快。
    我们发现当h固定时.

5 表示点集的生成( representation points )

给定的点集往往存在如下问题:
(1):局部错误点:通过投影到MLS平面,产生一个细点集
(2):点的数量过多:抽取点集来避免,下采样
(3):点的数量过少:上采样

  1. 下采样
    对于给定点集,下采样会反复删除对系统贡献信息最小的点,一个点对于物体或者误差取决于重建方法采用的形状,如果是3角法重建,应该使用特殊标准控制重采样率,这些标准包括:点的距离、曲率、中轴的距离,用于输出一个均匀分布的点在屏幕上,这里我们定义一个平面的标准。
    p i p_i pi对于曲面 S P S_P SP的贡献(contribution),可以用 S P 与 S P − p i S_P与S_{P-_{p_i}} SPSPpi决定。计算两个曲面的hausdorff距离对于大型点集代价是昂贵的,文中使用 p i p_i pi的投影到 S P − p i S_{P-_{p_i}} SPpi的距离来衡量 p i p_i pi对于 S P S_P SP的贡献(重投影误差)。
    所有点按照贡献值插入队列,在抽取过程中,删除具有最小误差值的点,然后重新计算贡献值,重复知道点的数量满足预设值。
    pcl::MovingLeastSquares滑动最小二乘_第7张图片
    图6,展示了我们应用于数据集的抽取过程(a)中描述的红点。首先,将红点投影到MLS表面产生蓝点。我们放大一部分区域,显示输入(红色)点和投影点,在(b)中,我们展示了3次抽取过程,其中点的颜色根据其误差值;蓝色表示低错误,红色表示高错误。请注意在最稀疏的集合中,所有的点都有很高的误差,即它们的删除将导致较大的错误,随着抽取的进行误差变大,每个点的contribution增大。图7显示了3D中的抽取过程点集的相应渲染。

pcl::MovingLeastSquares滑动最小二乘_第8张图片

阿佛洛狄忒是一尊光滑的雕像。删除冗余点后,一组37K点代表雕像(a)。相应的渲染如(b)所示。使用点移除对点集进行抽取。还原过程的中间阶段如(c)所示。请注意,这些点根据其重要性进行了颜色编码。蓝点对形状影响不大,可能会被删除;红点对于形状的定义很重要。(e)中设定的终点包含20000点。相应的渲染在(d)中描述,并且在视觉上接近(b)中的渲染。

  1. 上采样
    voronoi图
    voronoi图
    在点的密度不足以满足与其用途(比如选人或者分段重建),在之前的文章中我们可以通过实现缩小点之间的最短距离实现,增加的点放在点之间空间距离大的地方。
    该方法的基本思想是计算Voronoi图在MLS曲面上,并在此图的顶点处添加点。注意Voronoi图的顶点就是到几个现有点的最大距离的曲面。这个方法和劳埃德的方法有关Voronoi图实现了点的一定分布[40]。然而,在MLS曲面上计算Voronoi图是非常困难的,使用局部近似代替。更具体地说,我们的技术工作如下:在每个步骤中,随机选择一个现有点。局部线性近似是已建点和附近点投影到此平面上。每个顶点都是Voronoi与三个或三个以上点无接触的圆的中心包括任何一点。选择半径最大的圆其中心投影到MLS表面。这个过程是重复的迭代直到最大圆的半径小于一个用户指定的阈值。(见图8)。在这个过程的最后点的密度在曲面上是局部近似均匀的。图8显示包含800个点的原始稀疏点集,以及在MLS曲面上添加20K点后的同一对象。
    pcl::MovingLeastSquares滑动最小二乘_第9张图片

6 渲染

交互式渲染存在问题是使用采样点( representation points ),并且使用曲面的隐式定义来创建足够的新点满足分辨率。
通常采样点( representation points )不能够渲染空间中所有的对象。一些区域内,比如堵塞、镜头背面需要更高的密度,通常点的密度不足一直接投影为单个像素,需要在目标区域内插值生成更多的点。

  1. 剔除并查看相关性
    <>渲染系统类似与QSplat,讲输入的点放入一个边界球分层。每一个节点,存储一个位置、半径、法向量范围、和一个可选颜色,叶节点还额外存储支撑面的原点和多项式系数,层次结构用于使用视锥剔除背面的节点。剔除是十分重要的,因为计算多项式的代价很高(相对于基元),如果遍历到达的节点的范围投影到小于一个像素的大小,则该节点仅投影到帧缓冲区,而不遍历其子树。当遍历到达一个叶节点并且它的边界球的范围在屏幕空间中投影到一个以上的像素时,必须生成额外的点。
    <>叶节点中的边界球的半径只需设置为预期的特征大小h。内部节点的边界球自然地约束其子树的所有边界球。为了计算像素空间中边界球体的大小,通过模型视图变换缩放半径,然后除以z方向上中心和视点的距离以适应投影变换。

  2. 取样附加点
    <>其基本思想是生成一个足以覆盖叶节点范围的点网格。但是,在交互式应用程序中,使用第3节中描述的方法投影网格点太慢。我们的交互式渲染方法的主要思想是采样与表示点相关的多项式,而不是真正地投影点,很明显,这些多项式面片的并集不是一个连续曲面。然而,这种近似的Hausdorff误差并不比通过使用算子P投影每个点计算的曲面误差差(见第4节)。由于对象空间中的Hausdorff误差限制了屏幕空间误差,因此可以使用边界误差使近似误差在结果图中不可见。
    <>为了使数据点满足第四节的要求,点集与其相关多项式要求在表面上接近均匀。可能需要首先使用第5节中介绍的上采样方法处理给定的点集。通过这种方式,我们确保局部不一致(即重叠或相交)多项式很好地逼近点周围的面片 [ − h , h ] 2 [-h,h]^2 [hh]2内的曲面,因此,生成的图像显示出平滑的曲面。大多数稠密点集可以用这里介绍的方法来显示。例如,图11显示了原始Stanford Bunny数据的几个渲染。

    pcl::MovingLeastSquares滑动最小二乘_第10张图片 <>确定支撑平面上多项式面片的范围是至关重要的,可以确保相邻面片互相重叠(避免产生孔洞)同时重叠区域不会过大,由于没有可用的点间连接信息,因此不清楚哪些点是曲面上给定点的直接邻居.为了计算与 p i p_i pi相关的多项式面片在支持面H上的范围,将会收集所有在半径为h,原点为投影 q = Q ( p i ) q=Q(p_i) q=Q(pi),这些点投影到支撑平面H上,从而得到每个投影点的局部(u,v)坐标。范围由围绕q的圆定义,该圆包围所有投影点。更具体地说,假设q具有局部坐标(0,0),圆的半径由投影点的所有局部(u,v)坐标的最大2范数给出。由于点间距预计小于h,相邻点的面片保证重叠。
    <>注意,使用恒定范围(例如,支撑平面上的半径为h的圆盘)可能会导致错误,因为多项式g/h可能会离开半径为h的球,在该球中,期望得到点集的良好近似值。图10说明了补丁大小的计算。
    pcl::MovingLeastSquares滑动最小二乘_第11张图片
    <>网格间距d的计算应使相邻点的屏幕间距小于一个像素。因此,网格间距取决于多项式相对于屏幕的方向。由于每个多项式面片上的法线都会发生变化,因此我们使用一种简单的启发式方法保守地估计d:计算网格间距d,以便在图像空间中充分采样垂直于观察方向的网格。如果网格确实垂直于观察方向,则多项式上的采样也是正确的。如果网格不垂直于观察方向,则投影区域可能过采样或欠采样,这取决于支撑平面的方向和多项式的导数。但是,请注意,如果导数小于1,则可以保证足够的采样。在实践中,我们很少遇到高阶导数,所以我们决定不计算所有多项式面片的最大导数。但是,这可以在预处理中完成,并且可以相应地调整密度。基于视图相关的网格间距d,多项式通过前向差分方法进行评估,其中多项式在其局部u,v参数空间中的范围内进行扫描。将从支撑平面坐标到世界坐标的仿射映射分解为多项式求值,从而生成世界坐标中的点。然后将这些点输入图形管道以投影到屏幕上。
    <>令人惊讶的是,我们发现当前图形硬件处理四边形网格的速度比处理一组点要快。因此,我们使用四边形网格来表示多项式补丁。这个还有一个额外的优点,就是在惰性评估(见下文)期间,不会出现孔。

  3. Grid pyramids(网格金字塔)
    <>影响时间的关键因素是对多项式上的点的视觉依赖评估。最理想的情况是,每当投影屏幕空间大小发生变化时,都会重新计算这些值。为了加速渲染过程,我们存储了一个具有不同分辨率的网格金字塔。最初,会创建金字塔级别,但不会实际计算网格。当需要特定的网格分辨率时,系统会创建并存储一个级别,该级别会对特定分辨率的多项式进行略微过采样,以便观察位置的微小变化不会导致新的网格分辨率评估。到增强我们的方法的交互性我们在旋转或缩放时使用惰性评估。一旦观察者停止移动,就会从金字塔中选择一个合适的网格。

  4. 结果
    <>我们已经在各种点集上测试了我们的方法。图11显示了斯坦福兔子的效果图。在(a)中,显示原始点集。Splatting(b)不能得到很好的结果,因为模型的采样不够密集。将(c)和(g)中的传统Gouraud着色网格与(d)和(h)中的方法进行了比较。注意高光的准确性。非协调局部多项式面片在(e)和(f)中用颜色编码。图12给出了演示正常连续性的环境映射示例。请注意,轮廓和法线是平滑的,这会减少边界和边界中的扭曲反射。反射我们获得的帧速率主要由数字决定可见表示点的数量(即图形遍历时间)和要填充的像素数。本文中描述的所有模型都以每秒5帧以上的速度在512*512屏幕窗口中显示(有关更多信息,请参阅随附的视频)。

我们已经在各种点集上测试了我们的方法。图11显示了斯坦福兔子的效果图。在(a)中,显示原始点集。Splatting(b)不能得到很好的结果,因为模型的采样不够密集。将(c)和(g)中的传统Gouraud着色网格与(d)和(h)中的方法进行了比较。注意高光的准确性。非协调局部多项式面片在(e)和(f)中用颜色编码。图12给出了演示正常连续性的环境映射示例。请注意,轮廓和法线是平滑的,这会减少边界和边界中的扭曲反射。反射我们获得的帧速率主要由数字决定可见表示点的数量(即图形遍历时间)和要填充的像素数。本文中描述的所有模型都以每秒5帧以上的速度在512 *512屏幕窗口中显示(有关更多信息,请参阅随附的视频)。
pcl::MovingLeastSquares滑动最小二乘_第12张图片

使用

看这篇

你可能感兴趣的:(pcl::MovingLeastSquares滑动最小二乘)