本发明涉及三维图像处理技术领域,尤其涉及一种部分曲面细分算法。
背景技术:
三角网格是几何模型的一种重要表示方法,广泛应用在虚拟现实、逆向工程、计算机图形学等领域中。随着激光三维扫描技术的快速发展,由扫描重建的三维模型得到越来越广泛的应用。
实体在经过扫描仪扫描后,建立起的三维模型,由于使用的点云重建算法的不同,以及实体的结构不同,导致三角形大小分布不均,使得某些其他算法应用到该模型上,会导致效果变差。因此需要对模型的一定区域进行曲面细分。现有的曲面细分算法大都是针对整个网格的,然而并不是所有的三角形都需要细分,而且现有曲面细分算法大都是针对三角形进行统一的处理,并不能按照三角形的特点针对性地进行细分。
技术实现要素:
为了解决上述技术问题,本发明提供一种部分曲面细分算法,该算法是根据三角片的特性对三角片进行细分,分解效果好。
为了实现上述目的,本发明采用如下技术方案,部分曲面细分算法,包括如下步骤:
(1)确定选中的网格区域,将所述选中网格区域中的三角片放入一个队列中,并设队列中的三角片为f,f的三条边为f.e1,f.e2和f.e3,e1,e2和e3所对应的相邻三角片分别为opf1,opf2,opf3;
(2)设定面积阈值maxs,对队列中未弃用的f进行判断,如果该f的面积值小于maxs,则f不再处理;如果f的面积值大于maxs则根据opf1,opf2,opf3以及f.e1,f.e2和f.e3的比例而选择不同的策略对其进行分割;
(3)将队列中的三角片f以及其opf分割产生的新的三角片再加入到队列中,将f以及其经过分割后的opf标记为弃用,如果队列中的所有三角片f的面积值均小于maxs,则转至步骤(4),否则则转入步骤(2);
(4)将保存的三角片关系存到原来的网格结构中。
优选地,所述步骤(2)中,当进行判断的三角片f的面积值大于maxs时,则进行如下处理:
(11)如果f相邻的3个opf中,存在一个为空,则设定该空的opf所对应的f.e为不可分割,则进行(21)分割策略;
(12)如果f相邻的3个opf中,存在2个为空,则设定2个空的opf所对应的f.e为不可分割,则进行(22)分割策略;
(13)如果f相邻的3个opf都存在,则计算f三条边的比例,1:e1:e2,
如果满足条件1≤e1≤2&&1≤e2≤2,则进行(23)分割策略,
如果满足条件1≤e1≤2&&e2≥2,则进行(22)分割策略,
如果满足条件e1≥2&&e2≥2,则进行(21)分割策略;
分割策略:
(21)计算出三角片f的重心cp,并连接f的3个顶点与重心cp,将f一分为三,f的opf不再进行计算,转至步骤(3);
(22)如果从(12)进入,则设定f.e2为f唯一一条可分割边,计算出f.e2的中点,并连接f.e2所对应的顶点,将f一份为二,f.e2所对应的opf2则转至进行(11)-(13);
如果从(24)进入,则将f与fx的公共边设定为e2,计算e2的中点,并连接e2所对应的fx的顶点将fx一分为2,新分割的三角片不再处理,转至步骤(3);
(23)计算f的三条边的中点,连接三个中点,将f一分为四,f的三个相邻面opf则进行(21)分割策略,然后再进行(24)分割策略;
(24)将opf分割出的三个三角片中直接与f相连的三角片设定为fx,进行(22)分割策略。
优选地,所述分割策略(21)中的重心可替换为内心。
优选地,还包括算法执行前或者算法执行后对网格结构进行平滑处理的步骤。所述的平滑处理为高斯平滑处理。
本发明的部分曲面细分算法对于选中网格区域中的三角片,针对其三条边所对应的相邻三个三角片是否处于该选中的网格区域中而进行不同策略的划分,对位于边缘的三角片仅进行简单的平分,对位于选中的网格区域中的三角片则根据其边长比例再进行细分。这样采用多种特征值可以对三角片进行有效的细分,并且保证细分时只影响周围三个相邻的三角片,且周围的相邻的三个三角片也采用影响特征值最小的方法进行细分,这样不会出现递归处理,提高了分割效率。
附图说明
图1(a)为策略(21)的划分方式示意图;
(b)为策略(22)的划分方式示意图;
(c)为策略(23)的划分方式示意图。
具体实施方式
实施例1
部分曲面细分算法,包括如下步骤:
(1)确定选中的网格区域,将所述选中网格区域中的三角片放入一个队列中,并设队列中的三角片为f,f的三条边为f.e1,f.e2和f.e3,e1,e2和e3所对应的相邻三角片分别为opf1,opf2,opf3;
(2)设定面积阈值maxs,对队列中未弃用的f进行判断,如果该f的面积值小于maxs,则f不再处理;如果f的面积值大于maxs则根据opf1,opf2,opf3以及f.e1,f.e2和f.e3的比例而选择不同的策略对其进行分割;
(3)将队列中的三角片f以及其opf分割产生的新的三角片再加入到队列中,将f以及其经过分割后的opf标记为弃用,如果队列中的所有三角片f的面积值均小于maxs,则转至步骤(4),否则则转入步骤(2);
(4)将保存的三角片关系存到原来的网格结构中。
实施例1的方法在进行划分时,对选中网格区域中的三角片采用其多种特征值,包括面积、相邻三角片的状况以及边长比例而进行不同策略的划分,而不是针对选中区域中所有的三角片均进行统一的分割,这样的分割兼顾了三角片自身的特点,细分的效果更好。
实施例2
部分曲面细分算法,包括如下步骤:
(1)确定选中的网格区域,将所述选中网格区域中的三角片放入一个队列中,并设队列中的三角片为f,f的三条边为f.e1,f.e2和f.e3,e1,e2和e3所对应的相邻三角片分别为opf1,opf2,opf3;
(2)设定面积阈值maxs,对队列中未弃用的f进行判断,如果该f的面积值小于maxs,则f不再处理;如果f的面积值大于maxs则根据opf1,opf2,opf3以及f.e1,f.e2和f.e3的比例而选择不同的策略对其进行分割;
(3)将队列中的三角片f以及其opf分割产生的新的三角片再加入到队列中,将f以及其经过分割后的opf标记为弃用,如果队列中的所有三角片f的面积值均小于maxs,则转至步骤(4),否则则转入步骤(2);
(4)将保存的三角片关系存到原来的网格结构中。
其中,所述步骤(2)中,当进行判断的三角片f的面积值大于maxs时,则进行如下处理:
(11)如果f相邻的3个opf中,存在一个为空,则设定该空的opf所对应的f.e为不可分割,则进行(21)分割策略;
(12)如果f相邻的3个opf中,存在2个为空,则设定2个空的opf所对应的f.e为不可分割,则进行(22)分割策略;
(13)如果f相邻的3个opf都存在,则计算f三条边的比例,1:e1:e2,
如果满足条件1≤e1≤2&&1≤e2≤2,则进行(23)分割策略,
如果满足条件1≤e1≤2&&e2≥2,则进行(22)分割策略,
如果满足条件e1≥2&&e2≥2,则进行(21)分割策略;
分割策略:
(21)计算出三角片f的重心cp,并连接f的3个顶点与重心cp,将f一分为三,f的opf不再进行计算,转至步骤(3);
(22)如果从(12)进入,则设定f.e2为f唯一一条可分割边,计算出f.e2的中点,并连接f.e2所对应的顶点,将f一份为二,f.e2所对应的opf2则转至进行(11)-(13);
如果从(24)进入,则将f与fx的公共边设定为e2,计算e2的中点,并连接e2所对应的fx的顶点将fx一分为2,新分割的三角片不再处理,转至步骤(3);
(23)计算f的三条边的中点,连接三个中点,将f一分为四,f的三个相邻面opf则进行(21)分割策略,然后再进行(24)分割策略;
(24)将opf分割出的三个三角片中直接与f相连的三角片设定为fx,进行(22)分割策略。
本发明的部分曲面细分算法对于选中网格区域中的三角片,针对其三条边所对应的相邻三个三角片是否处于该选中的网格区域中而进行不同的划分策略,对位于边缘的三角片仅进行简单的平分,对位于选中的网格区域中的三角片则根据其边长比例再进行细分。这样采用多种特征值可以对三角片进行有效的细分,并且保证细分时只影响周围三个相邻的三角片,且周围的相邻的三个三角片也采用影响特征值最小的方法进行细分,这样不会出现递归处理,提高了分割效率。原来网格的渲染结果与之前相比较,曲面数量增加,但形状未改变,曲面变得细化。
其中,所述分割策略(21)中的重心可替换为内心。
其中,还包括算法执行前或者算法执行后对网格结构进行平滑处理的步骤。所述的平滑处理为高斯平滑处理。在算法执行前或者算法执行后对网格结构进行平滑,则会产生更好的曲面细分效果。