«上一篇 下一篇»
  计算机工程  2019, Vol. 45 Issue (7): 251-257, 263  DOI: 10.19678/j.issn.1000-3428.0051288
0

引用本文  

杨贤康, 潘茂东, 童伟华. 基于L0优化的网格曲面特征线提取算法[J]. 计算机工程, 2019, 45(7), 251-257, 263. DOI: 10.19678/j.issn.1000-3428.0051288.
YANG Xiankang, PAN Maodong, TONG Weihua. Feature Lines Extraction Algorithm on MeshesBased on L0 Optimization[J]. Computer Engineering, 2019, 45(7), 251-257, 263. DOI: 10.19678/j.issn.1000-3428.0051288.

基金项目

国家自然科学基金(11571338,61877056);浙江大学CAD&CG国家重点实验室开放课题(A1819)

通信作者

童伟华(通信作者), 副教授、博士

作者简介

杨贤康(1993-), 男, 硕士研究生, 主研方向为计算机图形学, E-mail:yangxk@mail.ustc.edu.cn;
潘茂东, 博士

文章历史

收稿日期:2018-04-23
修回日期:2018-05-23
基于L0优化的网格曲面特征线提取算法
杨贤康 , 潘茂东 , 童伟华     
中国科学技术大学 数学科学学院, 合肥 230026
摘要:基于网格曲面特征线的稀疏分布,提出一种优化的特征线提取算法。对于给定的网格,在每个面上计算一个值或向量作为输入。对输入的度量建立L0优化模型,使其在网格边上的跃变尽可能少且优化前后的变化较小。给出基于变量分裂技术与罚函数方法的交替方向优化算法,并引入一种迭代的策略提升解的稀疏性,以取得更高质量的特征线。实验结果表明,该算法能有效提取网格曲面的特征线,与Crest lines算法、变分算法等相比,提高了特征线提取的质量和带噪数据的鲁棒性。
关键词网格曲面    特征线提取    L0优化    变量分裂    交替方向优化算法    
Feature Lines Extraction Algorithm on MeshesBased on L0 Optimization
YANG Xiankang , PAN Maodong , TONG Weihua     
School of Mathematical Sciences, University of Science and Technology of China, Hefei 230026, China
Abstract: Based on the sparse distribution of feature lines on meshes, the paper proposes an optimized algorithm for feature lines extraction.For a given mesh, compute a scalar or a vector for each triangle as the input.Then, an optimized model is established for the measurement of the input so that the jumps on the edge of the meshes are as few as possible and the changes before and after optimization are minimized.An alternating direction optimization algorithm based on variable splitting technique and penalty function approach.In addition, a heuristic strategy is introduced to improve the sparsity of the solution, thus achieving higher quality of feature lines.Experimental results demonstrate that this method can effectively extract feature lines.Compared with some state-of-the-art methods such as Crest lines algorithm, variation algorithm and others, the proposed algorithm can improve the quality of feature lines extraction and the robustness for noisy data.
Key words: meshes    feature lines extraction    L0 optimization    variable splitting    alternating direction optimization algorithm    
0 概述

特征线是计算机图形学、计算机辅助设计及几何建模等领域广泛使用的高层次信息之一, 主要用于曲面设计和编辑, 网格去噪、参数化和变形等应用中。特征线虽易被人眼识别, 但其自动化提取却是一项具有挑战性的任务。特征是一个宽泛的概念, 抽象来说就是被观测物体的某种可度量的启发式属性。在网格处理中常用的特征线包括:尖锐特征线, 脊线与谷线, 轮廓线等。这些线可通过数学语言来刻画, 目前已出现一些特征线检测方法。尖锐特征线是指曲面法向上发生剧烈变化的曲线。文献[1]通过优化拟合误差及尖锐边的个数、位置来构造含有尖锐特征线的细分曲面控制网, 但该方法耗时较长。文献[2]将类似的技术用于重建点云的尖锐特征, 该方法虽易于实现, 但存在阈值参数选取困难、抗噪性差等问题。脊线与谷线是指曲面上沿主曲率方向取到极值的曲线。文献[3]提出先用光滑的隐式曲面来拟合网格模型, 然后利用网格顶点在隐式曲面的投影点来估计相应的曲率张量和曲率导数, 最后通过追踪算法提取脊线与谷线。基于曲率极值的几何本质, 文献[4]提出快速、有效的脊线与谷线提取算法, 然而, 这类算法的结果不可避免地依赖于高阶微分几何量的估计质量。轮廓线是指法向量与视线向量内积为零的曲线。文献[5]引入启发式轮廓线, 即在曲面上沿视线方向的径向曲率为零, 且在切平面上沿视线投影方向的导数大于零的点集。文献[6]采用主成分分析法和局部二次曲面拟合法对网格模型进行微分几何信息估算, 并结合双阈值检测方法提出网格曲面特征线提取算法。文献[7]将图像处理中的Mumford-Shah模型推广到网格曲面上, 由于其利用跟踪的方法提取特征线, 对含噪声的网格特征线提取存在一定的困难。

稀疏表示与优化理论[8]在信号处理、图像处理、机器学习和统计学等领域被广泛使用。近年来, 有研究者尝试将该方法应用于数字几何处理中的若干问题[9-10], 例如保特征去噪[11-12]、网格分割[13-14]、曲面重建[15-17]等, 取得了较好的效果。受此启发, 在特征线具有稀疏分布的情况下, 本文使用L0优化方法提取网格曲面的特征线, 使用L0范数来抑制噪声的影响, 以提高提取质量。

1 预备知识 1.1 三角网格表示

M是给定的网格曲面, 可由三元组(V, E, T)表示, 其中, V={v1, v2, …, v|V|}为顶点集、E={e1, e2, …, e|E|}为边集, T={t1, t2, …, t|T|}为面集, 顶点、边和面的个数分别记为| V |、| E |、| T |。网格的每个面可以是三角形、四边形或其他多边形。为保证简单性与一般性, 本文以三角网格为例。网格曲面的几何信息主要通过顶点的位置来定, 拓扑信息由顶点、边和面之间的连接关系构成。若顶点v为边e的端点, 则记为v≺e。类似地, 若边e为三角形t的一条边, 则记为e≺t

在网格表示中, 由于每条内边被2个三角形所共享, 为方便离散梯度算子的描述, 需要引入边e相对于其邻接三角形t的方向性概念。不失一般性, 假定M是可定向的, 其每个面t按逆时针方向给出外法向。对M中每条边e随机选定一个方向, e≺t, 若边e的定向和三角形t的定向一致, 则记为sgn(e, t)=1;否则sgn(e, t)=-1。

1.2 离散梯度算子

f(p)是定义于网格M上的函数, 在M的每个面t上取常数值, 即:

$ f\left( \mathit{\boldsymbol{p}} \right)\left| {_{{t_i}}} \right. \equiv {f_i} \in \mathbb{R},\forall \mathit{\boldsymbol{p}} \in {t_i},i = 1,2, \cdots ,\left| T \right| $

则称f(p)是网格M上的分片常函数。显然, 函数f(p)的梯度在每个面t的内部恒为零, 而在面t的边e上可能取非零值, 记为:

$ \nabla f{\left. {(\mathit{\boldsymbol{p}})} \right|_e} = \left\{ {\begin{array}{*{20}{l}} {\sum\limits_{e \prec t} {{f_t}} \operatorname{sgn} (e,t),e \notin \partial M} \\ {0,e \in \partial M} \end{array}} \right. $

其中, ∂M表示网格M的边界。

不失一般性, M上的分片常函数f(p)可由向量 f =(f1, f2, …, f|T|)T∈ℝ|T|表示, 此时离散梯度算子▽ f =(▽f(p)|e1, ▽f(p)|e2, …, ▽f(p)|e|E|)T可写成矩阵形式, 即▽ fG f, G ∈ℝ|E|×|T|, 称 G 为离散梯度算子▽的矩阵表示。

1.3 单位外法向量空间

为叙述方便, 除特别说明外, 下文均以输入度量为单位外法向量进行说明。具体地, 对于给定网格M, 在每个面t上计算或读入一个单位外法向量 n tin=(nt1in, nt2in, nt3in)T。若记 N in=(n 1in, n 2in, …, n|T| in)T∈ℝ|T|×3, 则 N in的每一列可视为M上的分片常函数。对于一般维数的输入度量, 可做类似的处理。

在优化单位外法向量时, 需要保持向量的单位性, 引入M上的单位外法向量空间:

$ \boldsymbol{U}_{N}=\left\{\boldsymbol{N} :\left\|\boldsymbol{n}_{t}\right\|_{2}=1, \quad \forall t \in T\right\} $

其中, N =(n1, n2, …, n|T|)T|T|×3, U N的特征函数记为:

$ \chi(\boldsymbol{N})=\left\{\begin{array}{l}{0, \boldsymbol{N} \in \boldsymbol{U}_{N}} \\ {+\infty, \boldsymbol{N} \notin \boldsymbol{U}_{N}}\end{array}\right. $
1.4 L0范数

在稀疏表示与优化理论中, L0范数常被用于描述向量的稀疏度。对于n维线性空间中的列向量 x =(x1, x2, …, xn)T∈ℝn, L0范数定义如下:

$ {\left\| \mathit{\boldsymbol{x}} \right\|_0} = \mathop {\lim }\limits_{p \to 0} \left\| \mathit{\boldsymbol{x}} \right\|_p^p = \mathop {\lim }\limits_{p \to 0} \sum\limits_{k = 1}^n {{{\left| {{x_k}} \right|}^p}} = \# \left\{ {k:{x_k} \ne 0} \right\} $

其中, 符号#表示取集合元素的个数, 即‖ x0等于向量 x 中非零分量的个数。特别地, 当n=1时, 若x1≠0, 有‖ x0=1;否则, ‖ x0=0。

在本文中, 对于m维行向量 y =(y1, y2, …, ym)∈ℝm, 有:

$ {\left\| \mathit{\boldsymbol{y}} \right\|_0} = {\left\| {\left( {\left| {{y_1}} \right| + \left| {{y_2}} \right| + \cdots + \left| {{y_m}} \right|} \right)} \right\|_0} $

即将行向量 y 视为一个整体, 用于刻画非零向量。对于矩阵 A =(aij)∈ℝn×m, 将其写成 A =(a1, a2, …, an)T的形式, 则有:

$ {\left\| \mathit{\boldsymbol{A}} \right\|_0} = \sum\limits_{i = 1}^n {{{\left\| {\mathit{\boldsymbol{a}}_i^{\text{T}}} \right\|}_0}} $

其中, a i=(ai1, ai2, …, aim)T, i=1, 2, …, n

2 基于L0优化的特征线提取算法 2.1 L0优化模型

对于给定的网格M, 输入度量 N in=(n 1in, n 2in, …, n |T|in)T, 假设算法输出的度量为 N =(n1, n2, …, n|T|)T, N 的梯度可表示为:

$ \nabla \mathit{\boldsymbol{N}} = \mathit{\boldsymbol{GN}} \triangleq {\left( {{\mathit{\boldsymbol{u}}_1},{\mathit{\boldsymbol{u}}_2}, \cdots ,{\mathit{\boldsymbol{u}}_{\left| E \right|}}} \right)^{\text{T}}} \in {\mathbb{R}^{\left| E \right| \times 3}} $

其中, u i=(ui1, ui2, ui3)T, i=1, 2, …, |E|, 稀疏度表示为${\left\| {\nabla \mathit{\boldsymbol{N}}} \right\|_0} = {\sum\limits_{i = 1}^{|E|} {\left\| {\mathit{\boldsymbol{u}}_i^{\rm{T}}} \right\|} _0}$, 用于刻画输出度量在网格边上发生跃变的个数。稀疏度值越小表示特征的稀疏性越高。本文使用分片常数空间, 输入度量在每个面t上取常值或常向量。假定待提取的特征线位于网格的边上, 在特征线具有稀疏分布的情况下建立如下L0优化模型:

$ \begin{array}{l} \mathop {\min }\limits_{N \in {U_N}} {\left\| {\nabla N} \right\|_0}\\ {\rm{s}}.\;{\rm{t}}.\;\;\left\| {\mathit{\boldsymbol{N}} - {\mathit{\boldsymbol{N}}^{{\rm{in}}}}} \right\|_{\rm{F}}^2 < \varepsilon \end{array} $ (1)

其中, ‖·‖F表示矩阵的Frobenius范数, ε为误差阈值。从稀疏表示与优化的角度来看, 该模型在允许的阈值范围内对输入度量进行扰动或去噪, 使得输出度量的梯度具有尽可能低的稀疏度。因此, 该模型不仅能检测出特征线, 还可以有效地抑制噪声的不良影响。容易看出, 通过引入参数αU N的特征函数χ(N), 将式(1)改写成如下形式:

$ \begin{array}{l} \mathop {\min }\limits_\mathit{\boldsymbol{N}} {\left\| {\nabla \mathit{\boldsymbol{N}}} \right\|_0} + \alpha \left\| {\mathit{\boldsymbol{N}} - {\mathit{\boldsymbol{N}}^{{\rm{in}}}}} \right\|_{\rm{F}}^2 + \chi \left( \mathit{\boldsymbol{N}} \right) = \\ \;\;\;\;\;\;\mathop {\min }\limits_{\left\{ {{\mathit{\boldsymbol{n}}_l}} \right\}} \sum\limits_{e = 1}^{\left| E \right|} {{{\left\| {\mathit{\boldsymbol{u}}_e^{\rm{T}}} \right\|}_0}} + \alpha \sum\limits_{t = 1}^{\left| T \right|} {\left\| {{\mathit{\boldsymbol{n}}_t} - \mathit{\boldsymbol{n}}_t^{{\rm{in}}}} \right\|_2^2} + \chi \left( N \right) \end{array} $ (2)

其中, α>0用于调节各项之间的权重, 值得注意的是, { u e }仅为中间变量, 可利用{ n t }表示。

2.2 模型求解

由于式(1)中含有非凸、非连续的L0范数, 因此求解该模型是NP困难问题, 必须使用近似算法。首先, 通过变量分裂技术在每条边上引入辅助变量 h e=(he1, he2, he3)T, 将式(1)写成如下等价形式:

$ \begin{array}{l} \mathop {\min }\limits_{\left\{ {{\mathit{\boldsymbol{n}}_t},{\mathit{\boldsymbol{h}}_e}} \right\}} \sum\limits_{e = 1}^{\left| E \right|} {{{\left\| {\mathit{\boldsymbol{h}}_e^{\rm{T}}} \right\|}_0}} + \alpha \sum\limits_{t = 1}^{\left| T \right|} {\left\| {{\mathit{\boldsymbol{n}}_t} - \mathit{\boldsymbol{n}}_t^{{\rm{in}}}} \right\|_2^2} + \chi \left( N \right)\\ {\rm{s}}.\;{\rm{t}}.\;\;{\mathit{\boldsymbol{h}}_e} = {\mathit{\boldsymbol{u}}_e},\;\;\;\forall e \in E \end{array} $ (3)

然后, 通过二次罚函数方法将其转化成无约束优化问题, 即引入参数β将式(1)进一步近似为如下形式:

$ \begin{array}{*{20}{c}} {\mathop {\min }\limits_{\left\{ {{\mathit{\boldsymbol{n}}_t},{\mathit{\boldsymbol{h}}_e}} \right\}} \sum\limits_{e = 1}^{\left| E \right|} {{{\left\| {\mathit{\boldsymbol{h}}_e^{\rm{T}}} \right\|}_0}} + \alpha \sum\limits_{t = 1}^{\left| T \right|} {\left\| {{\mathit{\boldsymbol{n}}_t} - \mathit{\boldsymbol{n}}_t^{{\rm{in}}}} \right\|_2^2} + }\\ {\beta \sum\limits_{e = 1}^{\left| E \right|} {\left\| {{\mathit{\boldsymbol{u}}_e} - {\mathit{\boldsymbol{h}}_e}} \right\|_2^2} + \chi \left( \mathit{\boldsymbol{N}} \right)} \end{array} $ (4)

其中, β为罚因子。当β不断增大时, 式(4)的解逐步逼近式(3)的解。

最后, 利用交替方向优化方法来求解式(4), 即不断交替固定变量{ n t }与{ h e }, 逐步迭代求解直到满足预先设定的停止准则为止, 具体见算法1。

算法1  L0优化模型求解算法

输入   N in, α, β0, βmax, ρ, ε

输出   N

步骤1   k←0, β←β0, N0N in

步骤2  重复以下步骤直到$\frac{{\left\| {{\mathit{\boldsymbol{N}}_k} - {\mathit{\boldsymbol{N}}_{k - 1}}} \right\|_{\rm{F}}^2}}{{\left| F \right|}} < M$或者β>βmax:

1) 固定 N k, 求解H-子问题(5)得到 H k

2) 固定 H k, 求解N-子问题(8)得 Nk+1

3) β←ρβ, k←k+1。

步骤3  返回 NN k

在算法1中, N in是输入网格的初始法向, α是优化模型中的权值, β0βmax分别是罚因子的初始值以及最大值, ρ是增长因子, ε是终止误差, N 是优化后的网格面法向。H-子问题与N-子问题的具体求解方法如下:

1) H-子问题。当变量 N ={ n t}固定时, 式(4)可以简化为:

$ \mathop {\min }\limits_{\left\{ {{\mathit{\boldsymbol{h}}_e}} \right\}} \sum\limits_{e = 1}^{\left| E \right|} {{{\left\| {\mathit{\boldsymbol{h}}_e^{\rm{T}}} \right\|}_0}} + \beta \sum\limits_{e = 1}^{\left| E \right|} {\left\| {{\mathit{\boldsymbol{u}}_e} - {\mathit{\boldsymbol{h}}_e}} \right\|_2^2} $ (5)

上述优化问题可以进一步分解成若干个独立的子问题, 具体如下:

$ \sum\limits_{e = 1}^{\left| E \right|} {\mathop {\min }\limits_{{\mathit{\boldsymbol{h}}_e}} {{\left\| {\mathit{\boldsymbol{h}}_e^{\rm{T}}} \right\|}_0}} + \beta \left\| {{\mathit{\boldsymbol{u}}_e} - {\mathit{\boldsymbol{h}}_e}} \right\|_2^2 $ (6)

对于这些子问题, 有如下命题:

命题1  式(6)的子问题具有如下显式解:

$ {\mathit{\boldsymbol{h}}_e} = \left\{ \begin{array}{l} {\left( {0,0,0} \right)^{\rm{T}}},{\left\| {{\mathit{\boldsymbol{u}}_e}} \right\|^2} \le 1/\beta \\ {\mathit{\boldsymbol{u}}_e},其他 \end{array} \right. $ (7)

证明  记E(h e)=‖ he T0+βu ehe22, 下面分2种情形进行讨论:

情形1  当‖ ue2≤1/β时, 若 h e≠(0, 0, 0)T, 则E(h e)=1+βu eh e2βu e2+βu eh e2; 若 h e=(0, 0, 0)T, 则E(h e)=βu e2。容易看出, 当 h e=(0, 0, 0)T时, 函数E(h e)取最小值。

情形2 当‖ u e2>1/β时, 有 u e≠(0, 0, 0)T。若 h e≠(0, 0, 0)T, 则E(h e)=1+βu eh e2。在此情形下, 当 h e= u e时, E(h e)取最小值1;若 h e=(0, 0, 0)T, 则E(h e)=βu e2>1。容易看出, 当 h e= u e时, 函数E(h e)取最小值。

综上分析, 证毕。

2) N-子问题。当变量 H ={ h e}固定时, 式(4)可以简化为:

$ \mathop {\min }\limits_{\left\{ {{\mathit{\boldsymbol{n}}_t}} \right\}} \alpha \sum\limits_{t = 1}^{\left| T \right|} {\left\| {{\mathit{\boldsymbol{n}}_t} - \mathit{\boldsymbol{n}}_t^{{\rm{in}}}} \right\|_2^2} + \beta \sum\limits_{e = 1}^{\left| E \right|} {\left\| {{\mathit{\boldsymbol{u}}_e} - {\mathit{\boldsymbol{h}}_e}} \right\|_2^2} + \chi \left( \mathit{\boldsymbol{N}} \right) $ (8)

其中, χ(N)为非线性项, 本文先将其忽略, 即将式(4)简化为式(9)的二次优化问题。

$ \mathop {\min }\limits_{\left\{ {{n_t}} \right\}} \alpha \sum\limits_{t = 1}^{\left| T \right|} {\left\| {{\mathit{\boldsymbol{n}}_t} - \mathit{\boldsymbol{n}}_t^{{\rm{in}}}} \right\|_2^2} + \beta \sum\limits_{e = 1}^{\left| E \right|} {\left\| {{\mathit{\boldsymbol{u}}_e} - {\mathit{\boldsymbol{h}}_e}} \right\|_2^2} $ (9)

然后将所得的{ n t }单位化来进行处理。若记 H =(h1, h2, …, h{E})T∈ℝ|E|×3, N i= N (:, i)∈ℝ|T| , Ni in= N in(:, i)∈ℝ|T|, H i= H (:, i)∈ℝ|E|, i=1, 2, 3, 则式(9)可写为:

$ \begin{array}{l} \mathop {\min }\limits_{\left\{ {{n_t}} \right\}} \sum\limits_{i = 1}^3 {\left\{ {\alpha \left[ {\mathit{\boldsymbol{N}}_i^{\rm{T}}{\mathit{\boldsymbol{N}}_i} - 2\mathit{\boldsymbol{N}}_i^{\rm{T}}\mathit{\boldsymbol{N}}_i^{{\rm{in}}} + {{\left( {N_i^{{\rm{in}}}} \right)}^{\rm{T}}}\mathit{\boldsymbol{N}}_i^{{\rm{in}}}} \right] + } \right.} \\ \;\;\;\;\;\;\;\;\;\;\left. {\beta \left( {\mathit{\boldsymbol{N}}_i^{\rm{T}}{\mathit{\boldsymbol{G}}^{\rm{T}}}\mathit{\boldsymbol{G}}{\mathit{\boldsymbol{N}}_i} - 2\mathit{\boldsymbol{N}}_i^{\rm{T}}{\mathit{\boldsymbol{G}}^{\rm{T}}}{\mathit{\boldsymbol{H}}_i} + \mathit{\boldsymbol{H}}_i^{\rm{T}}{\mathit{\boldsymbol{H}}_i}} \right)} \right\} \end{array} $ (10)

其中, G ∈ℝ|E|×|T|为离散梯度算子▽的矩阵表示。因此, 式(9)的解满足如下线性方程组:

$ \left( {\alpha \mathit{\boldsymbol{I}} + \beta {\mathit{\boldsymbol{G}}^{\rm{T}}}\mathit{\boldsymbol{G}}} \right){\mathit{\boldsymbol{N}}_i} = \alpha \mathit{\boldsymbol{N}}_i^{{\rm{in}}} + \beta {\mathit{\boldsymbol{G}}^{\rm{T}}}{\mathit{\boldsymbol{H}}_i},i = 1,2,3 $ (11)

其中, I 表示|T|阶单位矩阵。可以发现, 上述线性方程组的系数矩阵是稀疏、对称且正定的, 但每次迭代随β变化而改变, 因此采用双共轭梯度算法[18]来求解。

2.3 稀疏性提升算法

在式(2)中, 参数α可用于调节特征线的稀疏度与逼近误差之间的权重。当特征线的稀疏度较高时, 许多伪特征边会被提取出来。此时, 可通过减小α来降低特征线的稀疏度, 消除多余的伪特征边。但是, 该方法在实践中并不能得到理想的结果, 其主要原因是减小α相当于增大了式(1)中的ε, 使得输出度量的可扰动范围扩大, 即优化模型可行解的搜索区域变大, 从而使L0优化模型的求解变得更为困难。因此, 本文提出一种迭代的贪婪策略来逐步降低L0优化问题的解的稀疏度, 具体地, 在进行第l+1次迭代时, 求解如下改进的L0优化模型:

$ \mathop {\min }\limits_\mathit{\boldsymbol{N}} {\left\| {\nabla \mathit{\boldsymbol{N}}} \right\|_0} + \alpha \left\| {\mathit{\boldsymbol{N}} - {\mathit{\boldsymbol{N}}^l}} \right\|_{\rm{F}}^2 + \chi \left( \mathit{\boldsymbol{N}} \right),l = 1,2, \cdots $ (12)

其中, N l是第l次迭代所得的结果, 详见算法2。

算法2  稀疏性提升算法

输入   N in, α, β0, βmax, ρ>1, ε, 迭代次数L

输出  最终的特征线Γ

步骤1   l←0, N 0N in

步骤2  重复以下步骤, 直到El>‖▽ N l-10或者l≥L

1) 基于 N lαβ0βmaxρε, 调用算法1求解式(12), 得到解 N l+1

2) El+1←‖▽ N l+10+αN l+1NlF2, l←l+1。

3) 采用第2.4节的方法提取网格曲面的特征线Γ

容易看出, 利用算法2计算出的式(12)的解序列{ N l }满足‖▽ N l+10 < ‖▽ Nl0, 即解的稀疏度是递减的。通过选取合适的迭代次数L, 可有效提高特征线的提取质量, 提取结果如图 1所示。

Download:
图 1 迭代次数不断增加时的特征线提取效果
2.4 特征线提取

根据式(1), 本文算法待提取的特征线出现在优化后度量值N发生跃变的位置, 即网格M满足如下条件的边集:

$ \mathit{\Gamma } = \left\{ {e\left| {{{\left\| {\mathit{\boldsymbol{u}}_e^{\rm{T}}} \right\|}_0} \ne 0,e \in E} \right.} \right\} $

其中, ue T=▽ N (e, :), e=1, 2, …, |E|。然而, 由于本文采用近似算法求解式(1), 且受到数值计算误差的影响, 不能直接通过比较‖ ue T00来判别特征边。因此, 在算法中, 使用如下标准来提取特征边:

$ \mathit{\Gamma } = \left\{ {e\left| {{{\left\| {\mathit{\boldsymbol{u}}_e^{\rm{T}}} \right\|}_2} > \delta } \right.,e \in E} \right\} $

其中, δ为常数。本文所有实验结果均在δ=0.2情形下取得。

3 实验结果与分析

本文使用C++语言和Matlab实现算法研究, 下文实验均在一台配置Intel Core i5 3.1 GHz CPU及8 GB RAM的计算机上进行。

3.1 参数选取

在算法的执行过程中, 有一些参数需要用户设置, 主要包括αβ0βmaxρεL等。在本文实验中, 部分参数取默认值, 例如β0=0.1, ρ=1.4, ε=1.0e-7。其余参数依据具体情况进行设置, 通常都在一定的范围内选择, 例如, α∈[2, 40], βmax∈[5 000 β0, 20 000 β0], L∈[1, 12], 具体数值见表 1

下载CSV 表 1 实验参数设置与运行时间
3.2 实验结果

为验证本文算法的有效性, 对不同类型的网格模型进行测试, 包括干净的网格曲面、带噪声的网格曲面、带边界的网格曲面以及带颜色属性的网格曲面。此外, 将本文算法与RTSC-1.5算法[5]、Crest lines算法[4]和变分算法[7]进行对比。为确保公平性, 实验中尽可能按照论文作者提供的建议选取相应参数, 以获得最佳实验结果。不同网格模型的提取结果如图 2~图 7所示。

Download:
图 2 4种算法对干净的Fusee网格模型提取特征线结果比较
Download:
图 3 4种算法对干净的Lucy网格模型提取特征线结果比较
Download:
图 4 4种算法对带σ=0.05e高斯噪声的Trim-star网格模型提取特征线结果比较
Download:
图 5 4种算法对带σ=0.17e高斯噪声的Dodecahedron网格模型提取特征线结果比较
Download:
图 6 本文算法对带边界的Camel网格模型特征线提取结果
Download:
图 7 本文算法对带RGB颜色属性的Santa网格模型与Horse网格模型特征线提取结果

具体分析如下:

1) 干净的网格曲面

图 2图 3分别是对于Fusse网格模型和Lucy网格模型采用4种不同算法提取特征线的结果。从局部放大图中容易看出, 本文算法提取的特征线质量明显优于其他算法。与其他3种算法不同, 本文算法无须利用跟踪的方法提取特征线, 因此可避免特征线的后处理过程。

2) 带噪声的网格曲面

为了测试噪声对本文算法结果的影响, 按如下步骤人工合成带噪声的网格模型:

步骤1  随机产生向量集{ d v=(dv1, dv2, dv3)T|vV}, 其中, 随机变量dv1dv2dv3相互独立且均服从高斯分布N(μ, σ2)= ($\sqrt {2{\rm{ \mathit{ π} }} } $ σ)-1exp-(xμ)2/2σ2。本文实验μ恒取0。

步骤2  更新顶点位置${\mathit{\boldsymbol{\tilde p}}_v} = {\mathit{\boldsymbol{p}}_v} + {\mathit{\boldsymbol{d}}_v}$, ∀vV, 其中, p v为顶点v的位置坐标。

步骤3  按更新后的顶点位置重新计算网格的输入度量 N in

图 4为对带σ=0.05e的高斯噪声的Trim-star网格模型进行特征线提取的结果, 其中, e为网格M的平均边长。容易看出, 在处理带噪声的数据时, 本文算法的准确性明显高于其他3种算法。图 5对带σ=0.17e高斯噪声的Dodecahedron网格模型的提取结果, 其进一步显示了本文算法对噪声的鲁棒性。

3) 带边界的网格曲面

图 6为本文算法对带边界的网格模型进行特征线提取的结果, 其中虚线表示网格的边界。从图 6可以看出, 本文算法可有效地处理带边界或带洞的网格模型, 且网格缺失的部分并未对本文算法的结果造成明显的影响。

4) 带颜色属性的网格曲面

为验证本文算法的通用性, 对带RGB颜色属性的网格模型进行测试。在实验中输入的度量改为网格每个面上定义的RGB颜色信息, 如图 7(a)图 7(c)所示。通过本文的L0优化算法, 优化后的图像及相应的特征线见图 7(b)图 7(d)。可以看出, 本文算法对于一般的输入度量也能取得较满意的结果。

3.3 算法运行时间

本文算法主要由2个嵌套的循环构成, 其中外循环为稀疏性提升的迭代过程, 内循环为求解L0模型的交替方向优化算法。容易看出, 求解一系列大型稀疏线性方程组, 即式(11), 是本文算法主要的性能瓶颈, 占用了大部分运行时间。为了测试算法的性能, 对大型的网格模型进行对比实验, 结果如图 8所示。表 1展示了本文算法对于不同模型所需的计算时间, 可以看出, 本文算法的运行速度还不够理想, 其部分原因是本文算法使用C++语言调用Matlab来求解稀疏线性方程组, 未来可对如何加速进行研究。

Download:
图 8 本文算法对大型网格模型Dinosaur和Dancing children的特征线提取结果
4 结束语

由于特征线具有稀疏分布, 本文提出一个基于L0优化的特征线提取算法。对于给定的输入度量, 通过求解L0优化问题得到优化后的度量, 使之在网格边上发生跃变的总数极小化, 并使优化后的值与优化前的值之间的差异尽可能小。给出基于变量分裂技术与罚函数方法的交替方向优化算法, 并引入一种迭代策略来提升L0优化问题解的稀疏性, 以取得更高质量的特征线。实验结果表明, 该算法能有效提取网格曲面的特征线, 与变分算法、Crest lines算法、RTSC-1.5算法相比, 该算法提取质量更高, 对带噪声的数据鲁棒性更好。然而, 本文主要使用参数α来调节特征边的稀疏度与逼近误差之间的权重, 未考虑特征线尺度的问题, 同时本文算法的运行速度不够理想, 因此, 引入层次的优化模型并研究收敛速度更快的L0优化求解算法将是下一步的研究方向。

参考文献
[1]
HOPPE H, DEROSE T, DUCHAMP T, el al.Piecewise smooth surface reconstruction[C]//Proceedings of the 21st Annual Conference on Computer Graphics and Interactive Techniques.New York, USA: ACM Press, 1994: 295-302. (0)
[2]
OHTAKE Y, BELYAEV A, ALEXA M, el al.Multi-level partition of unity implicits[C]//Proceedings of SIGGRAPH'03.New York, USA: ACM Press, 2003: 463-470. (0)
[3]
OHTAKE Y, BELYAEV A, SEIDEL H P.Ridge-valley lines on meshes via implicit surface fitting[C]//Proceedings of SIGGRAPH'04.New York, USA: ACM Press, 2004: 609-612. (0)
[4]
YOSHIZAWA S, BELYAEV A, YOKOTA H, et al. Fast, robust, and faithful methods for detecting crest lines on meshes[J]. Computer Aided Geometric Design, 2008, 18(8): 545-560. (0)
[5]
DECARLO D, FINKELSTEIN A, RUSINKIEWICZ S, et al.Suggestive contours for conveying shape[C]//Proceedings of SIGGRAPH'03.New York, USA: ACM Press, 2003: 848-855. (0)
[6]
史皓良, 吴禄慎, 余喆琦. 散乱点云数据特征信息提取算法[J]. 计算机工程, 2017, 43(8): 279-283. DOI:10.3969/j.issn.1000-3428.2017.08.047 (0)
[7]
TONG Weihua, TAI Xuecheng. A variation approach for detecting feature lines on meshes[J]. Journal of Computational Mathematics, 2016, 34(1): 87-112. DOI:10.4208/jcm (0)
[8]
ELAD M. Sparse and redundant representations:from theory to applications in signal and image processing[M]. Berlin, Germany: Springer, 2010. (0)
[9]
XU Li, LU Cewu, XU Yi, et al. Image smoothing via L0 gradient minimization[J]. ACM Transactions on Graphics, 2011, 30(6): 1-12. (0)
[10]
HE Lei, SCHAEFER S. Mesh denoising via L0 minimization[J]. ACM Transactions on Graphics, 2013, 32(4): 1-50. (0)
[11]
WANG Ruimin, YANG Zhouwang, LIU Ligang, et al. Decoupling noise and features via weighted L1-analysis compressed sensing[J]. ACM Transactions on Graphics, 2014, 33(2): 1-12. (0)
[12]
ZHANG Huayan, WU Chunlin, ZHANG Juyong, et al. Variational mesh denoising using total variation and piecewise constant function space[J]. IEEE Transactions on Visualization and Computer Graphics, 2015, 21(7): 873-886. DOI:10.1109/TVCG.2015.2398432 (0)
[13]
ZHANG Juyong, ZHENG Jianmin, WU Chunlin, et al. Variational mesh decomposition[J]. ACM Transactions on Graphics, 2012, 31(3): 1-15. (0)
[14]
LIU Xiuping, ZHANG Jie, LIU Risheng, et al. Low-rank 3D mesh segmentation and labeling with structure guiding[J]. Computers and Graphics, 2015, 46: 99-109. DOI:10.1016/j.cag.2014.09.019 (0)
[15]
AVRON H, SHARF A, GREIF C, et al. L1-sparsee reconstruction of sharp point set surfaces[J]. ACM Transactions on Graphics, 2010, 29(5): 1-12. (0)
[16]
XIONG Shiyao, ZHANG Juyong, ZHENG Jianmin, et al. Robust surface reconstruction via dictionary learning[J]. ACM Transactions on Graphics, 2014, 33(6): 1-3. (0)
[17]
PAN Maodong, TONG Weihua, CHEN Fala. Compact implicit surface reconstruction via low-rank tensor approximation[J]. Computer-Aided Design, 2016, 78: 158-167. DOI:10.1016/j.cad.2016.05.007 (0)
[18]
GOLUB G H, LOAN C F V. Matrix Computation[M]. 4th ed.Washington D.C., USA: Johns Hopkins University Press, 2013. (0)