CN101807308B - 三维模型分割装置和方法 - Google Patents
三维模型分割装置和方法 Download PDFInfo
- Publication number
- CN101807308B CN101807308B CN200910006405.5A CN200910006405A CN101807308B CN 101807308 B CN101807308 B CN 101807308B CN 200910006405 A CN200910006405 A CN 200910006405A CN 101807308 B CN101807308 B CN 101807308B
- Authority
- CN
- China
- Prior art keywords
- summit
- plane
- tangent plane
- dimensional model
- subgraph
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Landscapes
- Image Generation (AREA)
- Processing Or Creating Images (AREA)
- Image Analysis (AREA)
Abstract
本发明涉及三维模型分割装置和方法。该三维模型分割方法包括以下步骤:平面检测步骤,检测输入的三维模型中包括的平面,所述输入的三维模型以三角形网格描述;轮廓图提取步骤,根据所述平面检测步骤中检测出的平面,提取所述三维模型的轮廓,即轮廓图;以及轮廓图分离步骤,将所述轮廓图提取步骤提取出的轮廓图分割成若干个子图;三维实体重建步骤,为所述轮廓图分离步骤分割出的各个子图重建三维实体模型,重建出的各三维实体采用三角形网格表达。
Description
技术领域
本发明涉及三维模型分割的装置和方法,更具体地说,本发明涉及应用三维几何信息实现模型分割的装置和方法。
背景技术
随着科学技术的进步,在计算机图形学、虚拟现实技术、计算机辅助设计技术、医学图像、地理信息系统等领域设计和使用的三维模型越来越精细、越来越复杂。这些复杂模型的面片动辄数以万计、甚至达到百万量级,对计算机存储容量、处理速度、渲染效率、传输效率等提出了极高要求,同时也增加了目标检测、局部匹配等技术的难度。如果能将这些复杂模型分割成一系列相对简单、数据量小的模型,通过独立存储和处理这些简单模型,则可极大地提高存储、处理、渲染等工作效率,并将有利于目标检测、局部匹配、三维检索等工作,使得模型管理和重用成为可能。
三维模型分割是一种将输入的三维模型分割为若干部分的技术,在目标检测、局部匹配、三维检索等领域具有极高的应用价值。三维模型分割技术大致可以分为两类:纯几何层次的分割,将输入模型分割为一系列具有相近属性的面片;以及语义层次上的分割,将输入模型分割为一系列具有一定形状的部分。第一种技术可以作为预处理手段,以提取有意义的特征;第二种技术得到广泛关注,可用于目标检测等领域。
作为现有的一种方法,[专利文档-1]中介绍的方法属于第一类方法,基于曲率估计和区域增长技术,将输入模型分割为一系列区域,每个区域以一个参数化曲面来逼近。在该方法中,首先计算各个顶点的曲率,将顶点分为尖锐顶点和非尖锐顶点;然后根据非尖锐顶点的曲率得到一系列种子区域,每一个种子区域表示一个参数化区域;接下来对每一个种子区域进行参数拟合;然后,改善区域之间的边缘,同时更新各个区域的参数;最后输出参数化区域。这种方法可以检测出诸如平面、圆柱体、球、锥面等简单曲面,还可以检测到圆角曲面等较高层次曲面。在[非专利文档-1]的方法中,首先计算顶点的曲率,然后根据曲率的符号生成种子区域,接下来采取区域生长算法逐渐更新区域的参数,最后输出自由参数化曲面。这两种方法输出一系列检测到的曲面,可以作为预处理手段提取特征,进而实现匹配。然而这两种方法,容易受噪声干扰,且计算量较大。
[非专利文档-2]中的方法,将分水岭方法应用于三维分割。在这种方法中,首先计算每个顶点的信息,例如曲率;然后,查找局部极小点作为源点;接下来,采用最速下降法对极小点附近的顶点进行聚类,锐边位于两类顶点之间。这种方法对噪声的干扰很敏感。
[非专利文档-3]中的方法,将输入模型由粗到精逐步分割为若干部分。在这种方法中,首先,根据测地距离和角度距离计算三角形面片之间的距离;然后,初始化分割区域,并计算每个三角形面片属于各个区域的概率;接下来,以迭代方式逐步更新区域以及每个三角形属于各个区域的概率;最后,采用最小割集方法得到准确的边界。与[非专利文档-3]中的方法相似,[非专利文档-4]由粗到精逐渐将输入模型分割为若干部分,这种方法引入了MDS变换,使得分割结果具有空间位置不变性,提出了一种鲁棒的特征点提取方法,从而将三维模型分割为若干部分,并且引入了割集方法进一步改善各个部分的边缘。[非专利文档-3]和[非专利文档-4]的两种方法,理论上可以得到不错的分割结果,然而计算量比较大。
[非专利文档-5]中的方法,首先计算构成三维模型的各个面片之间的相似度矩阵,面片之间的相似度结合了面片之间的测地距离和角度距离;接下来,采取谱聚类的方法实现三维模型分割。这种方法需要预先设置分区的数目,而且对于具有平滑边缘的模型可能得不到自然的分割结果。
[非专利文档-6]中的方法,首先计算各个顶点的曲率,并根据曲率判定锐化边缘和顶点;然后将顶点聚类,进而根据顶点的聚类结果对三角形面片进行分区;接下来采用区域生长方法合并相似的区域;最后改善分区之间的边缘。这种方法理论上可以得到不错的分割结果,然而计算量比较大。
综合来看,现有的三维模型分割的主要问题包括:(1)提取参数化曲面的方法,如[专利文档-1]和][非专利文档-2]中方法输出参数化曲面,应用范围比较窄,仅适合作为预处理手段;(2)对噪声比较敏感,[非专利文档-2]中的方法,顶点的曲率容易受噪声干扰,从而导致分割结果准确度不高;(3)效率不高,[非专利文档-3]、[非专利文档-4]、[非专利文档-5]、以及[非专利文档-6]这些方法理论上可以得到不错的分割结果,但是计算量比较大;(4)这些方法得到的分割结果通常是由面片或者面片组合的区域,而不是独立的三维实体。
[专利文档-1]US Patent,NO.US 2007/0188490A1
[非专利文档-1]Vieira,M.,Shimada,K.,Surface mesh segmentationand smooth surface extraction through region growing.Computer AidedGeometric Design,Vol.22,No.8.(2005),771-792.
[非专利文档-2]Mangam,A.P.,Whitaker,R.T.,Partitioning 3D surfacemeshes using watershed segmentation,IEEE Transaction on Visualization andcomputer graphics,Vol.5,N0.4(1999),308-321.
[非专利文档-3]S.Katz,A.Tal,Hierarchical mesh decomposition usingfuzzy clustering and cuts,SIGGRAPH,22(3):954-961,2003.
[非专利文档-4]S.Katz,G.leifman,A.Tal,Mesh segmentation usingfeature point and core extraction,The VisualComputer,21(8-10):865-875,2005.
[非专利文档-5]R.Liu,H.Huang,Segmentaion of 3d meshes throughspectral clustering,Pacific conference on Computer graphics and applications,298-305,2004.
[非专利文档-6]G.Lavoue,F.Dupont,A.Baskurt,A new CAD meshsegmentation method based on curvature tensor analysis,Computer aideddesign,Vol.37,975-987,2005.
[非专利文档-7]Z.Q.Wang,L.J.Xiao,J.Z.Hong,Simplicity,orientationand inclusion test algorithms for polygons,Chinese J.Computers,Vol.21,No.2,183-187,1998.
[非专利文档-8]R.Seidel,A simple and fast incremental randomizedalgorithm for computing trapezoid decompositions and for triangulatingpolygons,Computational Geometry:Theory and Applications,Vol.1,No.1,51-64,1991.
[非专利文档-9]H.Hoppe,Surface reconstruction from unorganizedpoints,PhD Thesis,Dept.of Computer Science and Engineering,Universityof Washington,June 1994.
[非专利文档-10]Joseph O’Rourke,Computational Geometry In C(Second Edition),Cambridge University Press,1998.
发明内容
本发明鉴于现有技术的上述问题而作出,用以克服现有技术的一个或更多个问题,至少提供一种有益的选择。
为了实现本发明的目的,本申请提供了以下方面。
方面1、一种三维模型分割方法,所述方法包括以下步骤:
平面检测步骤,检测输入的三维模型中包括的平面,所述输入的三维模型以三角形网格描述;
轮廓图提取步骤,根据所述平面检测步骤中检测出的平面,提取所述三维模型的轮廓,即轮廓图;以及
轮廓图分离步骤,将所述轮廓图提取步骤提取出的轮廓图分离成若干个子图;
三维实体重建步骤,为所述轮廓图分离步骤分离出的各个子图重建三维实体模型,重建出的各三维实体采用三角形网格表达。
方面2、根据方面1所述的三维模型分割方法,其中,所述三维模型分割方法还包括:
洞判别步骤,所述洞判别步骤判断所述三维实体重建步骤所重建出的三维实体模型或判断各所述子图所对应的三维实体是否是洞;
洞模型矫正步骤,如果所述洞判别步骤判断出所述三维实体重建步骤所重建出的某一三维实体模型是洞,则改变该重建出的三维实体模型的所有三角形的法线方向,或在判断出某一子图所对应的三维实体是洞时,改变子图对应三维实体的所有三角形的法线方向。
方面3、根据方面1所述的三维模型分割方法,其中,所述三维模型分割方法还包括:
切面判断步骤,判断所述三维实体重建步骤所重建出的三维实体模型中是否包括切面,或判断各所述子图所对应的实体中是否包括切面;
再分割步骤,如果所述切面判断步骤判断出所述三维实体重建步骤所重建出的某一三维实体模型中包括切面,则利用该切面将该包括切面的三维实体模型分割成两个或更多个子图,如果所述切面判断步骤判断出某一子图中包括切面,则利用该切面将该包含切面的子图分割成两个或更多个子图。
方面4、根据方面3所述的三维模型分割方法,其中,所述三维模型分割方法还包括合理性检测步骤,检测所述再分割步骤所分割出的子图是否合理,如果不合理,则放弃该切面。
方面5、根据方面4所述的三维模型分割方法,其中,在所述再分割步骤所分割出的子图满足以下所有条件时,判断该子图合理:
(1)顶点的数目不小于4,平面的个数不小于4;
(2)每个平面至少包含三个不共线的顶点;
(3)每条轮廓线至少属于两个不同的平面;
(4)每一个平面上的顶点必须首尾相连,组成一个封闭区域。
方面6、根据方面1所述的三维模型分割方法,其中,所述平面检测步骤包括:
计算所述输入的三维模型中的各个三角形面的法线方向;
根据所述各个三角形面的法线方向,将相互连接并且方向一致或相反的三角形面聚集成子平面;以及
将子平面合并成平面。
方面7、根据方面6所述的三维模型分割方法,其中将满足以下条件的两个子平面合并成平面:
所述两个子平面的法线方向相同或相反;并且
所述两个子平面之间存在公共的三角形、或存在公共边、或存在连接分别属于这两个子平面的顶点并且垂直与所述两个子平面的法线方向的直线。
方面8、根据方面1所述的三维模型分割方法,其中所述轮廓图提取步骤包括以下步骤:
获取各平面上所有边的集合;
将各边分为内部边或边界边;以及
删除所有的内部边,保留边界边。
方面9、根据方面3所述的三维模型分割方法,其中,所述切面判断步骤将这样的平面判断为切面:在所述轮廓图中,该平面上的顶点以外的顶点,分别在该平面的两侧。
方面11、根据方面3所述的三维模型分割方法,其中所述再分割步骤包括以下步骤:
切面顶点划分步骤,将切面上的顶点分入第一朝向顶点集合和第二朝向顶点集合,所述第一朝向顶点集合中的顶点为与切面之外的顶点的连线在第一方向上的顶点,所述第二朝向顶点集合中的顶点为与切面之外的顶点的连线在第二方向上的顶点;
切面外顶点划分步骤,将切面之外的顶点分入第一朝向侧顶点集合和第二朝向侧顶点集合,所述第一朝向侧顶点集合中的顶点为直接或间接与第一朝向顶点集合中的顶点相连的顶点,所述第二朝向侧顶点集合中的顶点为直接或间接与第一朝向顶点集合中的顶点相连的顶点;
切面顶点增加步骤,根据所述第一朝向侧顶点集合中的不与第一朝向顶点集合中的顶点直接相连的顶点和所述第二朝向侧顶点集合中的不与第二朝向顶点集合中的顶点直接相连的顶点之间的连接关系,通过在所述切面上增加顶点,使所述第一朝向侧顶点集合和第二朝向侧顶点集合之间不存在跨切面的连接;以及
子图分割步骤,根据所述第一朝向顶点集合和第二朝向顶点集合以及所述第一朝向侧顶点集合和第二朝向侧顶点集合将所述含有切面的三维实体模型或含有切面的子图分成两个子图或更多个子图。
方面11、根据方面10所述的三维模型分割方法,其中
所述切面顶点增加步骤判断所述第一朝向侧顶点集合中的不与第一朝向顶点集合中的顶点直接相连的顶点和所述第二朝向侧顶点集合中的不与第二朝向顶点集合中的顶点直接相连的顶点之间的直接连接是否与所述切面相交,如果相交,则在切面上新增加顶点,并利用新增加的所述顶点,使所述第一朝向侧顶点集合中的不与第一朝向顶点集合中的顶点直接相连的顶点和所述第二朝向侧顶点集合中的不与第二朝向顶点集合中的顶点直接相连的顶点之间不再存在直接连接关系,并将新增加的所述顶点分别并入所述第一朝向顶点集合和第二朝向顶点集合。
方面12、一种三维模型分割装置,所述装置包括:
平面检测单元,检测输入的三维模型中包括的平面,所述输入的三维模型以三角形网格描述;
轮廓图提取单元,根据所述平面检测单元中检测出的平面,提取所述三维模型的轮廓,即轮廓图;以及
轮廓图分离单元,将所述轮廓图提取单元提取出的轮廓图分割成若干个子图;
三维实体重建步骤,为所述轮廓图分离单元分割出的各个子图重建三维实体,重建出的各三维实体采用三角形网格表达。
根据本发明的另一方面,还提供了一种计算机程序,在被计算机或其它逻辑部件执行或解释或编译后执行时,使所述计算机实现上述方法或上述方法中的某些步骤。
根据本发明的再一方面,还提供了一种计算机可读介质,其存储有上述计算机程序。
附图说明
图1A是示意性地示出了本发明实施方式的模型分割方法的流程图;
图1B是示意性地示出了本发明实施方式的模型分割装置的结构方框图;
图2是示意性地示出了依据本发明的实施方式的图1A中的平面检测步骤S101的流程图;
图3是示意性地示出了依据本发明一种实施方式的计算三角形平面的法线方向和面积的示意图;
图4是是示意性地示出了三维模型中三角形平面邻接关系的示意图;
图5是示意示出了依据本发明的实施方式的子平面可合并的条件的示意图;
图6是示意示出了依据本发明的实施方式的子平面可合并的另一条件的示意图;
图7是示意性地示出了根据本发明的实施方式的平面内部边和边界边的示意图;
图8是是示意性地示出了依据本发明实施方式的三维模型轮廓图的示意图;
图9是是示意性地示出了依据本发明实施方式的轮廓分割方法的流程图;
图10是将一个示例轮廓图分割为若干分离的子图的示意图;
图11是例示切面判定条件的示意图;
图12是示意性地示出了轮廓图再分割单元所进行的处理的流程图;
图13是示意性地示出了轮廓图再分割单元中的分割单元的操作流程图;
图14是示意性地示出了对剩余顶点进行分类的处理的流程图;
图15是更详细地示出了图14中的步骤S1405的处理的流程图;
图16是根据顶点分类结果建立子图的示意流程图;
图17是是示意性地示出了依据本发明实施方式的对平面进行三角化的流程图;
图18为输入的示例三维模型;
图19显示了从输入模型中检测到的平面结构示意图;
图20提取三维模型轮廓图的示意图;
图21将轮廓图分割为若干子图的结果示意图;
图22从图21中的四个子图重建出三维模型的结果示意图;
图23是示意性地示出了切面上的顶点以及与切面直接相连的顶点分类的结果示意图;
图24是示意性地示出了顶点分类及其新增加顶点的示意图;以及
图25是示意性地示出了图24中模型的分割结果示意图。
具体实施方式
下面参照附图,对本发明的具体实施方式进行说明。图1A给出了本发明实施方式的模型分割方法的流程图,图1B给出了本发明实施方式的模型分割装置的示意性结构方框图。如图1A所示,本发明的模型分割方法包括:平面检测步骤S101,其根据输入模型的数据,检测出包含该模型三角形的所有平面信息;轮廓提取步骤S102,其根据三角形的平面信息,例如通过删除由多边形组成的有界平面内部的连线,而得到每个平面的轮廓线,进而得到输入模型对应的轮廓线,以图的形式表达三维模型的轮廓信息:三维模型的顶点和轮廓线分别作为节点和边;轮廓图分割步骤S103,其根据输入模型的几何信息,将轮廓图分割成若干个不重叠的子图,然后为每个子图,重建出相应的由三角形网格表达的三维实体。
根据本发明的实施方式,输入可以是以三角形网格描述的三维模型,这类模型提供的基本数据元素包括顶点的坐标以及组成每一个三角形的顶点索引。因通过扫描产生的点云模型,通过各种建模工具产生的参数化模型、或者以多边形(而不是三角形)网格表示的模型可以预先进行三角化处理,转化为三角形网格表达的三维模型。
另一方面,如图1B所示,依据本发明的一种实施方式的模型分割装置包括:平面检测单元101、轮廓提取单元102以及轮廓分割单元103。其中,所述平面检测单元例如可以包括:法线方向计算单元1011、子平面获取单元1012以及平面获取单元1013。所述轮廓提取单元102可以包括:边获取单元1021、边分类单元1022以及边删除单元1023。在一种实施方式中,所述轮廓分割单元包括子图获取单元1031和重建单元1034。在另一种实施方式中,所述轮廓分割单元包括子图获取单元1031、洞处理单元1032、重建单元1034。在又一种实施方式中,所述轮廓分割单元包括子图获取单元1031、切面处理单元1033、重建单元1034。在再一种实施方式中,所述轮廓分割单元包括子图获取单元1031、洞处理单元1032、切面处理单元1033、重建单元1034。
下面,参照附图具体描述三维模型分割装置和方法的各个模块。
平面检测
如图1A所示,根据本发明的一种实施方式,首先在步骤S101中,由平面检测单元101检测组成该三维模型的平面。平面检测单元101的输入为由三角形网格表达的三维模型,该模型必需提供的数据包括顶点的三维坐标以及各个三角形的顶点索引。根据这些数据,检测到包括三角形的所有平面。此处平面是有界的,可能是由一个多边形或若干个多边形组成的。
图2给出了依据本发明的实施方式的图1A中的平面检测步骤S101的流程示意图。如图2所示,首先,在步骤S201,计算每一个三角形的法线方向信息;然后,在步骤S202,获得三角形之间的连接信息,并通过聚集相互连接且方向相同或相反的三角形,获得一系列子平面;最后,在步骤S203,通过聚集符合条件的子平面,获得最终的平面。下面将介绍该流程涉及到的每一个步骤。
为描述方便,首先定义一些变量以描述输入模型的几何数据。
●Vi=(xi,yi,zi),(i=1,...,nv)表示模型的顶点信息,其中nv表示顶点的数目,Vi表示第i个顶点,而(xi,yi,zi)表示该顶点的三维坐标;
●以Fi=(vi1,vi2,vi3),(i=1,...,nf)表示模型的三角形面的信息,其中nf表示三角形平面的数目,Fi表示第i个三角型,而(vi1,vi2,vi3)表示该三角形三个顶点的索引;
●以NDi=(nix,niy,niz),(i=1,...,nf)表示模型的三角形面的法线方向,其中NDi表示第i个三角形的法线方向,而(nix,niy,niz)表示该三角形法线方向的三个分量。
首先介绍步骤S201的法线方向确定步骤。该步骤的目的在于计算出每个三角形面的法线方向,目前有许多方法可以实现此目的。在本实施方式中,例如可以由法线方向计算单元1011采取下面步骤来计算给定三角形面的法线方向和面积。图3给出了依据本发明一种实施方式的计算三角形平面的法线方向和面积的示意图。假设三角形顶点的顺序为A→B→C。
1)按照下式,计算矢量和
2)计算两向量和的向量积。
3)计算三角形的面积,其中代表向量的模。
4)计算三角形的法线方向。
此处三角形的面积可以采用其它方法来计算。例如,假设1a,1b,1c代表三角形三边的长度,则代表三角形的面积,其中s=(1a+1b+1c)/2。
遍历完所有的三角形后,得到如下信息:每个三角形的法线方向和面积,而且每一个三角形的法线方向向量均为单位向量。
然后,在步骤S102的子平面获得步骤中,由子平面获取单元1012以每一个三角形平面为对象,将与之相连接的并且方向基本一致或者相反的三角形平面聚集生成一系列子平面。在本文中,方向基本一致是指两个方向之间的差别小于预定阈值。方向基本相反是指两个方向之间的差别与π之间的差小于预定阈值。
首先,对每一个三角形平面,找到与之相连接的三角形平面。在本实施方式中,若两个三角形平面拥有一条公共边,且该边在两三角形平面中方向完全相反,则认为它们相互连接。按照该原则,对每一个三角形Fi而言,有三个三角形平面与之相连,记为Li={li1,li2,li3},(i=1,2,...,nf)。图4是示意三维模型中三角形平面邻接关系的示意图。如图4中,与三角形F相连接的三个三角形平面为L1、L2和L3。
除了上面这种判断三角形相互连接的方法之外,也可以通过其他方式。例如,若两个三角形平面拥有公共点,则认为它们相互连接。采用这种方式,最终结果与上述方法得到的平面数据相同。然而,这样做的话,与每个三角形相连接的三角形数目有所增加,进而后续工作的计算量会略有增加。
然后,对每一个三角形平面Fi,按照式(5)计算每一个与之相连的三角形平面与Fi的夹角Angi={Angi1,Angi2,Angi3}。其中代表两个向量和的点积。如图4的情况,可得出,三角形平面F和三角形平面L1,L2,L3的夹角分别是0、0和π/2。
接下来,设置合适的阈值,聚集与Fi相连接的且符合条件的三角形从而生成以三角形平面Fi为对象的子平面。此处条件指的是:与三角形平面Fi的法线方向相同或者相反,也就是Ang<=ath1或者Ang>=ath2,其中ath1的数值接近0,而ath2接近π。在图4所示的情况下,以三角形F为对象,产生的子平面包括三个三角形:F本身,还有L1和L2。
遍历完所有的三角形后,得到了以下信息:以每一个三角形平面为对象,聚集产生的子平面信息,记为SubPi={Fi,spi1,...,spij},(i=1,2,...,nf,0≤j≤3)。
最后,在步骤S203的平面获取步骤中,由平面获取单元1013通过聚集满足条件的子平面的方式,得到最终的平面数据。通过前一步骤得到的各个子平面集合的大小介于1到4之间,在这一步骤中,随着子平面合并过程的进行,子平面逐渐扩大,直到不能再扩大为止。
如果两个子平面的法线方向相同或者相反,同时满足下面条件之一,则将两个子平面合并为一个新的子平面。重复该过程,直到所有的子平面不能继续合并为止。
1)在两个子平面的三角形平面集合中,存在公共的三角形;图5示意示出了子平面可合并的这一条件。如图5所示,以F1和F2分别为对象产生的子平面中,存在公共三角形F。
2)在两个子平面的顶点集合中,至少存在一条边连接分属两个子平面的顶点,同时该边与子平面的法线向量垂直。图5也示意示出了子平面可合并的这一条件。如图5,以F3和F4为对象产生的子平面的顶点之间存在连接,如两个实心方框之间的连线。
3)在两个子平面的三角形平面集合中,至少存在一对分属两个子平面且相互连接的三角形;图6是示意示出子平面可合并的另一种条件的示意图。如图6,以F1和F2分别为对象产生的子平面中,存在两个相邻接的三角形平面:F11和F21。
在当前步骤结束后,就得到了最终的平面数据。对于每个平面,它包含的数据有:平面的面积、平面的法线方向、所含三角形集合以及顶点集合。
应该注意,上面的平面检测的方法只是示例性的,可以采取其它的检测平面的方法。例如可以采用这样的方法:1、选择不共线的三个顶点(或者任意三角形的三个顶点)作为平面;2、进而判断其余顶点是否落在该平面上;3、判断各个三角形平面是否落在该平面上。直到所有的三角形平面处理完为止。这种实现方式和前面介绍方法相比,增加了计算量。
轮廓提取
下面介绍轮廓提取步骤S102,在该步骤,由轮廓提取单元102根据平面检测步骤得到的平面数据,提取出模型的轮廓信息。为实现这一目的,首先提取每个平面的轮廓信息,从而得到整个模型的轮廓信息。
对每个平面,执行如下操作以得到平面的轮廓信息。
首先,由边获取单元1021获取平面上所有边的集合。此处,边集合包含平面上每个三角形的三条边。图7示出了根据本发明的实施方式的平面内部边和边界边的示意图。如图7所示平面中包含13条边。当然,也可以每取一条边就由下面的边分类单元进行分类。
接下来,由边分类单元1022判断边的类别。有界平面上的边可以分为两类:内部边和边界边。在一个实施例中,采用一种简单的方法实现边的分类。如果某条边被该平面上两个三角形所共有,则这条边就是内部边,否则该边就是边界边。如图6中三角形F1和F2的公共边是内部边,同理其它几条细线(包括虚线)也属于内部边;而以粗线标记的边只属于平面上一个三角形,因此这些边是边界边。
最后,由边删除单元1023删除平面上所有的内部边,保留边界边。这些边界边首尾相连,组成封闭区域。这些边界边表达了平面的轮廓信息。
遍历完所有的平面后,所有平面的边界边组成了模型的轮廓。图8显示了一个三维模型的轮廓信息。在本实施方式中,以图的方式表达轮廓信息,以模型的顶点(以实心方框标记)作为图的节点,以模型的轮廓线作为图的边。
关于轮廓图提取方法,也可采用寻找凸包相似的方法,进而确定由平面上各个三角形组成的区域的边缘。这对于相对简单的模型也可以得到准确的轮廓。
轮廓分割
回到图1A,在步骤S103中,对轮廓图进行分割。在一种实施方式中,该步骤可以包括:子图获得步骤,即由子图获取单元1031将输入的轮廓图分离为若干个不重叠的子图;和轮廓重建步骤,即由重建单元1034重建各子图的轮廓,即,为每个子图重建相应的三维实体。即在这种实施方式中,轮廓分割单元103由子图获取单元1031和重建单元1034组成。
在本实施方式中,在步骤S103,首先由子图获取单元1031采取以下步骤,即将所有顶点(由于轮廓图的顶点与输入的模型的顶点是一一对应的,因而在不需要区分时,将它们简单地称为顶点)划分到若干个子集合中,一个子集合中的顶点不与另一个子集合中的顶点相连接。换句话说,将互相连接的顶点划分到一个集合中。将不互相连接的顶点划分到不同的集合中。具体地,例如可以采取以下的步骤。
1)初始化子集合的数目n=0,节点处理标记Pi=0(i=1,2...,nV),其中nV代表节点的数目,将每个顶点的处理标记初始化为0,表示所有的顶点未处理过;
2)如果存在未处理过的节点,则更新子图数目n=n+1,随机选择一个未处理过的节点Noden作为源点,初始化一个集合Sn={Noden};
3)将所有与集合Sn中节点相连接、并且不在集合中的节点合并到集合Sn中;
4)重复步骤3,直到Sn不再变化为止;
5)更新节点处理标记,将所有包含在Sn中的节点的处理标记设为1,表示这些节点已经处理过了;
6)如果所有的节点处理完毕,结束此过程,否则转步骤2。
接下来,对于每一个子集合,利用该子集合中的节点,以及节点之间的边组成新的子图。图10所示的轮廓图被分割为3个子图,节点分别以菱形、星形和圆形标记,其中实心方框所标记的节点是生成这些子图的三个源点。
然后,由重建单元为每个子图重建相应的三维实体,重建三维实体也就是重建三维实体模型,在本文中,不对此进行区分。
在另一种实施方式中,所述步骤S103还包括洞处理单元1032所进行的洞处理步骤。在本发明的一种实施方式中,洞处理单元1032例如包括洞判断单元和洞模型矫正单元。相应地,洞处理步骤包括洞判断步骤和洞模型矫正步骤。
具体地,在洞判断步骤中,首先判断重建单元1034所重建的各子图对应的三维实体模型在初始三维物体中是否对应着一个洞。在本实施方式中,应用了一个基本规则:如果是洞,则面的方向指向物体内部;如果不是洞,则面的方向指向物体外部。
应用此规则,采取以下步骤从而判断输入的三维实体模型是否是洞。
1)初始化两个变量:Cnt1=0,Cnt2=0,分别表示指向物体表面外侧的平面的面积,以及指向物体表面内侧的平面的面积之和;
2)遍历该轮廓图中的每一个平面,从而更新Cnt1和Cnt2的数值。对每一个平面pl做如下操作:
2-1:判断与该平面pl上顶点相连接并且不在该平面上的顶点,是否全部处于该平面的一侧;
2-2:如果不是,则不更新Cnt1和Cnt2的数值;
2-3:如果是,判断这些点位于该平面的正向一侧还是负向一侧。在本实施方式中,利用式(6)判断这些点与平面的关系。在式(6)中,代表该平面的法线方向、代表该平面上的一点、代表与相连接且不在平面pl上的一个点。如果d>0,则认为该点位于平面的正向一侧,即与平面直接相连的顶点位于该平面的正向一侧,而该平面指向物体表面的外侧,则更新Cnt1=Cnt1+apl,其中apl表示平面pl的面积。如果d<0,则认为该点位于平面的负向一侧,即与平面直接相连的顶点位于该平面的负向一侧,而该平面指向物体表面的内侧,则更新Cnt2=Cnt2+apl,其中apl表示平面pl的面积。
遍历所有平面后,根据Cnt1和Cnt2之间的大小关系,确定该图所对应的物体是否是洞。如果Cnt1>Cnt2表示输入的图对应的物体不是洞,否则是洞。
然后在判断出该实体是洞时,利用前述洞模型矫正单元改变M1和M2(利用前述洞模型矫正单元改变该实体中所有三角形的法线方向,即对每一个三角形而言,将其改变为相反的方向。)中所有三角形的法线方向。使得模型表面方向指向外侧,以便于模型渲染、显示。
在根据本发明的另一实施方式中,轮廓分割单元包括子图获取单元1031、切面处理单元1033和重建单元1034。也就是说,在该实施方式中,步骤S103可以包括:子图获得步骤,即由子图获取单元1031将输入的轮廓图分离为若干个不重叠的子图;轮廓重建步骤,即由重建单元1034重建各子图的对应的三维实体,即,为每个子图重建相应的三维实体,以及切面处理步骤,判断重建单元1034所重建的各子图对应的三维实体中是否包含切面,如果包含切面,则进行切面处理。
在一个实施例中,切面处理单元1033包括:切面检测单元,用于检测出输入的轮廓图中所有的切面;轮廓图再分割单元,根据切面检测单元检测出的切面,对含有所述切面的轮廓图进行分割,获得新的子图。轮廓图再分割单元可以包括分割单元和合理性判断单元,合理性判断单元用于判断分割单元所分割出的子图是否合理。
下面首先介绍切面判断单元的切面判断准则,在一个实施例中,一个平面被认为是切面的首要条件就是:除了当前平面上的顶点,其他顶点分布在当前平面的两侧。如果对某一平面而言,除了平面上的顶点,其他顶点均位于平面的同侧,则此平面不是切面。
在图11所示的轮廓图的情况下,以黑色平面为例,其共有四个顶点:两个以圆形标记的顶点和两个以方框标记的顶点。对方框标记的两个顶点而言,分别有一个不属于黑色平面的顶点与之相连,这两个顶点处于黑色平面的正向一侧;对圆形标记的两个顶点而言,分别有一个不属于黑色平面的顶点与之相连,这两顶点处于黑色平面的负向一侧。因此该平面具备了切面的首要条件。
除了上面所述的首要条件,还可以设置一些辅助条件:1)该平面的面积与模型表面积之比不能小于某一设定阈值;该阈值一般小于1;2)对于平面上任何顶点,与之相连的顶点之间的边与平面之间的夹角不小于某一设定阈值;该阈值一般大于0;3)对于平面上任何顶点,与之相连的顶点之间的长度不得小于某一设定阈值。该阈值一般大于0。还可以根据实际经验,选择或者设定一些新的条件。
下面介绍轮廓图再分割单元的操作。如前所述,轮廓图再分割单元利用获取的切面,将输入的轮廓图分割成为若干个子图。对于输入的轮廓图而言,通常不止一个切面。在一个实施例中,将依次尝试每一个切面,直到成功将输入的轮廓图成功地分割为若干子图为止。在另一个实施例中,直到处理完所有平面为止,也就是说当所有的切面都尝试过了,但输入的轮廓图不能被成功分割的情况下,输入轮廓图的分割就只能结束了。
图12示出了轮廓图再分割单元所进行的处理的流程图。如图12所示,在一个实施例中,轮廓图再分割单元所进行的处理主要由两部分组成:1)利用某一选定的切面,试图将输入轮廓图分割为若干子图;2)判断分割结果是否合理。
对于切面的处理顺序,可以采用一些规则:1)利用切面的面积进行排序,优先处理面积大的切面;2)利用切面的顶点数目进行排序,优先处理顶点数目多的切面;3)利用从切面外部直接与切面相连的边与切面之间的夹角进行排序,优先处理角度大的平面。当然在使用中,可以凭经验选择某些规则或者设定新的规则。
如图12所示,首先在步骤S1201,初始化一个变量i,即,使i=1,表示从第一个选定的切面开始处理。然后再步骤S1202,用第i个候选切面对输入的轮廓图进行分割。随后在步骤S1203,对分割结果进行合理性测试,如果合理(步骤S1204,是),则在步骤1206输出分割结果,而如果分割结果不合理(步骤1204,否),则在步骤S1205中使i指向下一候选切面,即,使i=i+1。随后在步骤S1207判断是否已经尝试了所有切面,即,判断i是否大于切面数目n。若已经尝试了所有的切面(S1207,是),则在步骤1208输出分割不成功的提示或报警,该提示或报警例如可以以文本、音频或视频的方式作出。如果尚未尝试完所有的切面(S1207,否),则返回步骤S1202。
在待分割模型或子图中含有多个切面时,本发明的实施方式将逐一尝试这些切面,直到将该模型对应的轮廓图合理地分割成若干子图;若所有的候选切面经合理性判断,分割结果均不合理,则放弃对待分割模型的分割,将其直接输出作为最终分割结果的一部分。
对某一切面而言,若分割结果不合理,则放弃该切面的分割结果;尝试另外的切面,对输入的轮廓图进行分割。
下面将介绍利用选定的切面对轮廓图进行分割的过程、图13示出了轮廓图再分割单元中的分割单元的操作流程图。为表述方便,做如下设定:
●假设切面是Cpi(i=1,2,...,nC),其中nC表示检测到切面的数目,该切面包含的数据信息有:切面上的顶点信息PCi={pvi1,pvi2,...,pvin}和切面的法线方向有时还可以包括切面的面积aCi等;
●C1和C2表示位于切面上的两类顶点的集合;
●S1和S2表示位于切面以外的两类顶点的集合;
●pro数组代表点处理标记。
在一个实施例中,首先找到切面左侧(一侧)的点,然后找到切面右侧(另一侧)的点,将左侧的点和切面上的点封装成若干子图,将右侧点和切面上的点封装成若干子图。
在另一实施例中,在轮廓再分割单元中,将依次尝试各个候选切面,直到将轮廓合理分割为若干子图为止。对于某个给定切面,首先将切面附近的顶点,包括切面上顶点和与切面上顶点直接相连的顶点,划分到两个子集合中;其次,对于除所述切面附近的顶点之外的其它顶点,利用它们与所述两个子集合中顶点的连接关系,以及这些顶点与切面的位置关系,将它们分配到两个子集合中,使得两个子集合顶点之间不存在跨越切面的连接。
下面参照图13对该分割单元所进行的一种实施方式的操作进行详细的描述。如图13所示,首先在步骤S1301,初始化顶点处理标记prok=false,k=1,2,...,nk,其中nk为轮廓图中的顶点数目,表示所有的顶点尚未处理。然后在步骤S1302,对切面上的顶点进行分类。在步骤S1302中,利用切面上的各个顶点与切面外顶点间的连接关系,将切面上的顶点分为两类,即第一朝向顶点和第二朝向顶点,分别记为 和 其中n1、n2为两集合的大小。为实现此目的,可采取以下三个步骤。
1:初始化两个空集合,即第一朝向集合C1、第二朝向集合C2。
2:依次处理切面上的各个顶点,并将其进行分类。
假设为切面上的一个顶点,假设与该顶点直接相连且不落在该切面的顶点集合为 其中nl为点的个数。对于集合S中的每一个顶点计算边 与切面法线方向的内积 如果dj大于0,则将此顶点并入第一朝向集合C1;如果dj小于0,则将此顶点并入第二朝向集合C2。即某些顶点可能同时被包含在两个集合中。
3:更新切面上各个顶点的处理标记为true,表示这些顶点已经被处理过了。
如图11所示,黑色切面上的四个顶点被分成两类,其中C1包含两个以方框标记的顶点,而C2包含两个以圆形标记的顶点。
然后,在步骤S1303,将与切面上顶点直接相连且不落在该切面上的顶点进行分类。即分为第一朝向侧顶点和第二朝向侧顶点。
在这一步骤中,与平面上的顶点直接相连且不在切面上的顶点将被分成两类,分别记为 和 其中s1、s2分别代表两集合的大小。可按照如下步骤得到这两个顶点集合。
1:初始化两个空集合,即第一朝向侧集合S1和第二朝向侧集合S2。
2:顺序处理集合C1中的每个顶点i=1,2,...,n1。
对顶点而言,假设与相连接且不属于该切面上的顶点集合为 其中t1代表点的个数。依次处理T1中的每一个顶点j=1,2,...,t1,如果边 与切面的法线方向的内积为正,且集合S1中不包含则将节点并入集合S1。
3:顺序处理集合C2中的每个顶点i=1,2,...,n2。
对顶点而言,假设与相连接且不属于该切面上的顶点的集合为 其中t2代表点的个数。依次处理T2中的每一个顶点j=1,2,...,t1,如果边 与切面的法线方向的内积为负,同时集合S2不含则将节点并入集合S2。
4:更新集合S1和S2中各个顶点的处理标记为true,表明这些顶点已经处理过了。
应该注意,以上的这4个步骤不一定是顺序执行的,它们或它们中的某些步骤也可以是并行执行的,并且即使是按顺序执行,执行的顺序也可以进行改变。
如图11所示,与黑色切面上四个顶点直接相连接的四个顶点被分成两类,其中集合S1包含两个顶点,如图11所示,这两个顶点通过虚线与两个圆形标记的顶点相连;而集合S2包含两个顶点,这两个顶点通过实线与两个方框标记的顶点相连。
然后在步骤S1304,对剩余的顶点进行分类。
最后,在步骤S1305,根据分类的结果,对轮廓图进行分割。
对于步骤S1304,一种简单的实施方式是按照顶点处于哪一侧,直接将顶点进行分类即可。这适用于结构比较简单的模型。
下面对步骤S1304的另一实施方式的操作进行详细介绍,在步骤S1304中,将剩余的顶点进行分类,此处剩余的顶点表示尚未处理过的顶点,也就是切面外、而且没有边与切面上顶点相连的那部分顶点。为此,可以采取如图14所示的各个步骤。图14是示出了对剩余顶点进行分类的处理的流程图。
如图14所示,首先在步骤S1401,将所有未处理过的顶点分到两个集合X1和X2。其中X1包含了以集合S1中的顶点为源点进行扩张而得到的点集合,而X2包含了以集合S2中的顶点为源点进行扩张而得到的点集合。为得到这样两个集合采取以下步骤:
1:初始化两个空集合X1和X2。
2:将所有与集合S1顶点相连的,且未处理过的顶点并入集合X1;将所有与集合S2顶点相连的、且未处理过的顶点并入集合X2。
3:以X1中顶点为源点进行扩张,将所有与X1中顶点相连且未处理过的顶点包含进来,直到X1不再变化为止;以X2中顶点为源点进行扩张,将所有与X2中顶点相连且未处理过的顶点包含进来,直到X2不再变化为止。
4:对X1和X2进行处理,使得X1和X2中各个顶点只出现一次。
然后,在步骤S1402,查找集合X1和X2的公共点,并组成集合 其中nc代表公共顶点的个数。
然后在步骤1403,判断集合XC是否为空,即nc是否为0。如果判断出XC为空(S1403,是),则转到步骤S1404,将集合X1和X2分别合并到第一朝向侧集合S1和第二朝向侧集合S2。另一方面,如果判断出XC不为空(S1403,否),则转到步骤S1405,从集合XC寻找候选顶点,进一步对未处理顶点进行分类,然后转步骤S1401。直到处理完所有的顶点为止。
步骤S1405的目的在于从公共点集合XC寻找合适顶点,进一步对未处理顶点进行分类。为实现此目的,在一种实施方式中,可采取如图15所示的步骤。图15示出了图14中步骤S1405的更详细的处理。如图15所示,首先在步骤S1501中,从集合XC找到所有的候选顶点集合;然后在步骤S1502,从候选集合中找出最合适的顶点;最后在步骤S1503,利用在步骤S1502选定的顶点采取相应的操作,以进一步对未处理顶点进行分类。
也就是说,如果存在公共顶点,即XC不为空,则表示集合X1和集合X2顶点之间存在跨越切面的连接,因此需要找到这些顶点,添加适当的新顶点,对剩余顶点继续分类,将它们划分到两个子集合中。
下面对步骤S1501的查找所有的候选顶点集合CV的步骤进行更详细的说明。
此步骤目的在于从集合XC找到所有的候选顶点集合,记为 此处nc为候选顶点的数目,以备后续操作。在本实施方式所述方法中,只有符合某些特定条件的顶点,才可以作为候选顶点。以集合XC中任一顶点为例,假设与之相连接的顶点集合为 为判断该点是否为候选节点,从切面上顶点中任选一个顶点作为辅助节点。然后计算 和 其中表示向量的模,而表示两向量的内积。当顶点满足下面条件之一时,则认为候选顶点。
条件1:如果|d|≤ε,其中ε为一个接近0的数值,同时满足dk>0或者dk<0的条件。(可以这样理解条件1:位于切面上,以此点为界,将与之相连接的位于切面两侧的各个顶点划分到两个集合中。)
条件2:如果|d|>λ并且d>0,其中λ为大于0且小于1的数值,同时满足|dk|≤ε或者dk<0且|dk|>λ的条件。(可以这样理解条件2:位于切面正向一侧,与此点相连接的顶点中,存在位于切面负向一侧的顶点。此时需要添加一些顶点,将其分类。这些顶点为这些跨越切面的连接与切面的交点,以这些交点为界,和与相连接的位于切面负向一侧的顶点被划分到两个集合中。)
条件3:如果|d|>λ并且d<0,其中λ为大于0且小于1的数值,同时满足|dk|≤ε或者|dk|>λ且dk>0的条件。(可以这样理解条件3:位于切面负向一侧,与此点相连接的顶点中,存在位于切面正向一侧的顶点。此时需要添加一些顶点,将其分类。这些顶点为这些跨越切面的连接与切面的交点,以这些交点为界,和与相连接的位于切面正向一侧的顶点被划分到两个集合中。)
下面对步骤S1502从候选集合中选择最合适的顶点进行更详细的说明。
本步骤旨在从候选集合中选择最合适的一个顶点,以备后续操作。在本实施方式中,距离S=S1∪S2中顶点最近的顶点被认为是最合适的顶点。在本实施方式中,假定轮廓图中所有边的长度为1,利用顶点之间的最短路径来衡量两顶点间的距离。按照如下操作,确定顶点
1:计算CV中的每一个顶点k=1,2,...,nc到集合S的距离。此处,到S的距离按照式(7)来计算,其中代表顶点到的最短距离。
2:按照式(8),确定
下面对步骤S1503中的根据选定的顶点,确定某些未处理顶点的类别信息进行说明。
选定的候选顶点可能满足以上所述的三个条件中的任何一个。对于满足不同条件的顶点,采取不同的操作。在介绍操作之前,我们假定选择的顶点是与之相连接的顶点集合为 然后,按照计算出的d和dk,k=1,2,...,nl。
操作1:如果顶点满足条件1,则采取如下操作。
操作2:如果顶点符合条件2,采取如下操作。
操作3:如果顶点符合条件3,采取如下操作。
将顶点添加到集合S2中,并更新该节点的点处理标记为true。
将与之相连接的每一个顶点进行分类。
For k=1:nl
if(|dk|≤ε)
添加顶点到集合C1、C2中;
elseif(dk>0)
添加顶点到集合S1中;
计算边 与切面的交点
更新之间的连接关系,和涉及到的平面信息;
将添加到集合C1、C2中;
更新L集合中每一个顶点的处理标记为true。
显而易见,在步骤2和步骤3所述的操作中均需要更新连接和相关平面信息。假设选定的候选节点是第k个与相连接的顶点为当d、dk符号相反时,需要计算边 与切面的交点将交点作为新的节点添加到轮廓图中,并更新连接信息和相关平面信息。
首先,按照下面步骤更新连接信息。
然后,按照下述两个步骤更新相关的平面信息数据。
1.将新增加的顶点添加到切面;
2.找到所有同时包含和的平面,并添加顶点到这些平面。
结合图14和图15的流程,每处理完一个候选顶点,更新完相关信息后,采用步骤S1401获取集合X1和X2,然后判断X1和X2是否存在公共点;如果存在公共点,则采取步骤S1405继续分割;直到所有的顶点处理完或者X1和X2不存在公共点为止。
通过前面的步骤S1304的处理,平面上的顶点被分为C1和C2两类,平面外的节点被相应地分为S1和S2两类。
下面对步骤S1305进行详细的说明。图16是根据顶点分类结果建立子图的示意流程图。
在步骤S1305中,首先将C1和S1合并得到第一个分割部分的点集合CS1,将C2与S2合并得到第二个分割部分的点集合CS2。
然后,按照图16所示的步骤,分别处理两个点集合CS1、CS2,获得若干个新的子图。在图16中,(C、S、CS)分别代表(C1、S1、CS1)或者(C2、S2、CS1)中的某一组。
如图16所示,首先,在步骤S1601,将CS中的顶点分配到若干子集合中。
在这一步骤中,首先,以CS中的顶点作为节点,利用不属于切面上的顶点之间的连接,切面上顶点与切面外顶点之间的连接作为边,构建一个结构图G。也就是说该图中,不包含切面上各个顶点之间的连接。然后,采用前面子图获取单元1031所述的方法,将图G分割若干分离子图,进而将CS中的所有顶点分为若干子集合,记为 i=1,2,...,ns,其中ns、ni分别表示子集合的数目,第i个子集合中顶点的数目。相应地可以得到 其中ci、si分别表示第i子图中位于切面上顶点的数目以及切面外面顶点的数目。
然后,在步骤S1602中,对每一个子集合,更新属于切面上的顶点之间的连接关系从而构建新的子图。
根据给定切面,输入轮廓图的顶点可以分为两类即CS1和CS2,每一类顶点都可能是由多个部分组成的,因此需要根据其连接信息将其进一步划分为若干子图。这种情况是存在的,例如在切面上方存在两个或多个长方体等情况。
这一步骤目的在于对每一个子集合SubSi,i=1,2,...,ns,构建其相应的图Gi。为达到这一目的,首先将SubSi中的各个顶点添加到Gi中作为节点,把SubSi各个顶点之间的边添加到Gi中作为边;
然后,采取如下步骤,在SubCi的顶点之间添加必要的边,使得它们可以组成有界的封闭平面。
1.寻找所有与SubCi存在公共顶点且公共点数目大于等于2的平面(不包含切面),记为plk,k=1,2,...,nk,其中nk代表这种平面的数目。
2.对于每一个平面plk,k=1,2,...,nk,如果该平面与SubCi存在两个公共点,记为和如果这对顶点之间没有边相连,则在图Gi中添加这条边。
合理性判断单元的目的在于检验图分割后产生的一系列子图,是否合理。本实施方式设置了以下规则来判断各个子图是否具备产生三维实体的条件。
以某一子图G为例,假设包含该子图所有顶点的平面PL={pl1,pl2,...,plk},k=1,2,...,np,其中np为平面的个数;PV={v1,v2,...,vk},k=1,2,...,nv表示顶点。G必须满足以下所有条件,该子图才具备生成三维实体的条件。
顶点的数目不得小于4,平面的个数不得小于4;
每个平面至少包含三个不共线的顶点;
每条轮廓线至少属于两个不同的平面;
每一个平面上的顶点必须首尾相连,组成一个封闭区域。
对前面的不利用切面分割的子图,可以不利用这个判断。在轮廓图分割的第一步,将其分割为若干分离子图的时候,可以利用第一个条件去判断,主要是为了处理游离点或者游离平面。
下面对重建单元和重建步骤进行说明。
该单元和步骤的目的旨在为输入的轮廓图重建出相应的三维实体。该模块主要包括两个主要步骤。首先,对于在图分割过程中发生变化的平面采取三角化步骤,生成新的三角形;然后,校正新产生的三角形的法线方向,使得三维物体表面法线方向一致。
3D模型重建的方法有很多,比如非专利文档9中的基于点的重建方法。此外,还有基于序列图像、基于深度数据、基于骨架、基于轮廓等的重建方法。在一种优选的实施例中,采用以下的重建方法。
在图分割过程中的各个平面可以被分为两类:发生变化的平面和未发生变化的平面。在三角化步骤中,仅仅对产生变化的平面采取三角化算法,产生新的三角形平面,确保最终三维物体的完整性(封闭性);对于那些没有发生变化的平面,本实施例将利用原有的三角形数据。下面将着重介绍对产生变化的平面进行三角化的方法,图17是示出了依据本发明实施方式的对平面进行三角化的流程图。
假设,平面pli,i=1,2,...,nl是需要重新三角化的平面,其中nl是发生变化的平面的数目;k=1,2,...,nk是第pli平面上点的数目。
首先在步骤1701,找出位于该平面上的所有多边形。因为平面上的各个顶点首尾相连,可以采取下列步骤,检测出所有的多边形,结果记为Li={li1,li2,...,liin},i=1,2,....,n,其中n代表多边形的数目,Li中顶点序列代表各个多边形的顶点序列。
●初始化多边形个数n=0,顶点处理标记pk=false,k=1,2,...,nk表示所有顶点尚未处理;
●更新多边形数目n=n+1,随机选择一个未处理的顶点为源点,沿着与之相连接的其中一个顶点逐渐延伸,直到遇到顶点为止。假设得到的顶点序列为Ln={l1,l2,...,lnn},代表第n个多边形顶点序列;
●更新Ln={l1,l2,...,lnn}中顶点处理标记为true,表明这些顶点已经处理过了;
●如果所有的顶点都处理过了,则结束,否则转步骤2。
然后,在步骤1702中,确定多边形之间的包含关系,重新组织多边形。
在前面步骤中,平面上的各个多边形被检测出来,假设这n个多边形为Li={li1,li2,...,liin},i=1,2,....,n。
如果多边形数目为1,判断该多边形顶点顺序为逆时针还是顺时针,如果是顺时针则将其转化为逆时针排列。此处可以采用[非专利文档-7]中的方法确定多边形的方向。
如果多边形数大于1,则计算多边形之间包含关系矩阵为INi,j,i,j,....,n。如果INi,j=true表示第i个多边形包括第j个多边形。在本实施例中,如果一个多边形Lj的所有顶点均位于另一个多边形Li内部,则称多边形Li包含多边形Lj。下面将介绍,根据矩阵INi,j,i,j,....,n重新组织这些多边形。
首先,找出所有的简单多边形Polyi,i=1,2,...,ni,此处的简单多边形指的是不包含其它多边形,也不被其他多边形所包含的多边形。
找出外部多边形记为Polyk,k=1,2,...,nk,此处nk代表外部多边形的数目。此处外部多边形指的是不被任何其它多边形包含的多边形,同时又包含某些其它多边形。
以每一个外部多边形为对象组成一系列复杂多边形。此处的每一个复杂多边形包括一个外部多边形,以及被该外部多边形包围的多边形。以外部多边形Polyk,k=1,2,...,nk为例,假设被它包含的多边形LPk={lpk1,lpk2,....,lpkn},其中kn代表被Polyk包含的多边形数目,则复杂多边形记为CPolyk={Polyk,LPk},k=1,2,...,nk。
使每一个简单多边形的顶点序列按照逆时针排列;对于每一个复杂多边形而言,外部多边形按照逆时针排列,内部多边形按照顺时针排列。
然后在步骤1703,将多边形三角化。
将一个多边形转化为一系列多边形,有多种方法可以采用,例如在非专利文档10中提到的各种多边形三角化的方法:首先从输入的多边形中得到一系列梯形,然后在梯形中添加适当的对角线,进而将输入的多边形转化为一系列单调多边形,最后采取单调多边形的三角化算法得到一系列不重叠的三角形。在本发明的实施方式中也可以采取[非专利文档-8]介绍的方法,该方法可以处理上一步骤中提到的简单多边形(单个凹多边形或凸多边形)以及复杂多边形(也就是有洞的情况)。在该方法中,采用扫描线方法首先将多边形转化为一系列梯形,然后对某些梯形添加对角线,接下来利用对角线,将多边形转化为一系列单调多边形,最后对单调多边形进行三角化,得到最终的三角形序列。
下面介绍方向校正步骤。
该步骤目的在于对新产生的三角形的方向进行校正,使得三维实体表面的方向一致。如同在平面检测单元中提到的那样,以三角形网格表达的三维模型中,每一条边为两个三角形公有,且方向在两个三角形中完全相反。
本步骤正是按照这个约束条件,来校正新产生多边形的法线方向。假设所有的三角形为 i=1,2,...,nF。
具体步骤如下:
1:初始化三角形面处理标记proi=true,i=1,2,...,nF。
2:将新产生的三角形面的处理标记设置为false。
3:找到所有的未处理三角形面UF={Fu1,Fu2,....,Fun},其中un代表未处理平面的数目。
4:如果集合UF为空,则结束,否则转步骤5。
5:按照下面步骤,依次处理UF的每一个三角形面Fuk。处理完后,转步骤3。
找到与三角形面Fuk有公共边且已经处理过的三角形面F*。
如果没有找到F*,则处理下一个未处理过的三角形。
如果公共边的方向在三角形Fuk和F*中方向相同,则改变Fuk中顶点的顺序,使得公共边的方向在这两个三角形中相反;更新该三角形平面的处理标记为true。
6.转步骤3,直到所有的三角形处理标记为true为止。
最后结合图9对本发明的另一种实施方式的轮廓分割方法进行说明,在这种实施方式的轮廓分割方法中,既包括了洞处理步骤,也包括了切面处理步骤。但应该注意到,虽然在图中是先进行洞处理然后再进行切面处理的,但对这两者没有次序的限定,可以并行执行,也可以先进行切面处理然后再进行洞处理。
如图9所示,首先,在步骤S901,将轮廓图分割成几个分离的子图,其具体实现可以参见前面所述的子图分离步骤。然后在步骤S902,为每个子图重建相应的三维实体。接着,在步骤S903,针对每个子图,判断该子图对应的实体是否为洞,如果为洞(步骤S904,是),则在步骤S910改变模型的法线方向,并输出该子图对应的三维实体(步骤S911)。如果不是洞(步骤S904,否),则接着检测所有可能的切面(或称分割面)(步骤S905)。步骤S903和S904对应于洞处理步骤,其具体实现可以参照前面的说明。
当检测出切面时(步骤S906,否),则在步骤S907,根据切面,将子图分割成多个更小的子图。然后在步骤S908,进行合理性判断,即,判断步骤S907的分割是否成功。如果成功(步骤908,是),则在步骤909,为新产生的子图重建出相应的三维实体。并返回步骤S903,对新的三维实体,继续进行洞处理和切面处理。另一方面,当在步骤S908判断出分割不成功时,则输出该三维实体,不再继续分割(S911)。
很显然,在图9所示的流程图中,切面处理的步骤可以重复多次,针对各个切面依次进行,当针对一个切面判断分割不成功(S908,否)时,可以不直接输出该子图对应的三维实体,而尝试利用下一切面进行分割,直到不存在未处理的切面为止或者直到分割成功为止。
应该注意,虽然在图9所示的实施方式中,在分离出子图后,即步骤S901后,立即为个子图建立三维实体(步骤902),但也可先针对各子图进行洞处理和切面处理,并最后一起重建各子图的三维实体。
根据本发明的实施方式,因为在模型分割过程中没有复杂的计算和处理,所以效率高。其次,因为引入了重建步骤,用三角形网格表达重建出的各三维实体模型,所以输出结果为三维实体。再次,通过对分割结果引入了合理性判断模块,进一步增强了抗噪声能力。
应用示例
下面,将通过一个示例说明三维模型分割的过程。
图18为输入的示例三维模型,该模型由52个顶点、108个三角形组成物体表面。在该输入模型中,有两个洞存在。
首先,根据模型的相关数据,计算各个三角形平面的面积、法线方向等数据,然后将相互联结的、同时方向相同或者相反的三角形组合起来得到组成该模型的平面数据。在本实施例中,如果两个三角形法线之间的夹角小于0.001,则认为两三角形平面方向相同;如果两三角形平面法线之间的夹角大于π-0.001,则认为两三角形平面方向相反。图19显示了从输入模型中检测到的平面数据。从如图18所示的输入模型中,共检测到29个平面,其中每个平面包括如下信息:落在平面上的顶点索引、三角形平面索引、平面面积、以及平面的法线方向。最终得到的平面数据如下表。以检测到的第12个平面为例,图19显示出其数据信息。第12个平面包含两个三角形面,索引分别为55和58;包含四个顶点,索引分别为19、20、33和34。
平面索引 | 顶点索引 | 三角形索引 | 法线方向 | 面积 |
1 | {1,3,47,49} | {1,6} | (0,0,1) | 12.476 |
2 | {1,2,3,4,5,6} | {2,4,22,30} | (1,0,0) | 105.61 |
3 | {3,4,49,50} | {3,5} | (0,-1,0) | 40.547 |
4 | {1,2,7,9,10,13,16,18,20,22,24,26,28,30,32,34,36,38,39,41,42,45,47,48} | {7,8,9,10,11,13,15,16,17,18,19,20,23,24,25,26,27,28,29,42,43,44,46,49,53,61,64,68} | (0,1,0) | 227.06 |
5 | {47,48,49,50,51,52} | {12,14,35,36} | (-1,0,0) | 105.61 |
6 | {2,6,48,52} | {21,31} | (0,0,-1) | 290.07 |
7 | {5,6,8,11,12,14,40,43,44,46,51,52} | {32,33,34,37,38,39,40,41,92,94,95,96,97,98} | (0,-1,0) | 343.45 |
8 | {15,16,21,22} | {46,51} | (1,0,0) | 45.216 |
9 | {21,22,23,24} | {47,48} | (0.86,0,0.5) | 4.1379 |
10 | {15,16,17,18} | {50,54} | (0.97,0,0.25) | 5.1135 |
11 | {17,18,19,20} | {52,56} | (0.42,0,0.9) | 5.1134 |
12 | {19,20,33,34} | {55,58} | (0,0,1) | 97.809 |
13 | {33,34,35,36} | {57,60} | (-0.42,0,0.91) | 5.1134 |
14 | {35,36,37,38} | {59,63} | (-0.97,0,0.26) | 5.1138 |
15 | {31,32,37,38} | {62,66} | (-0.98,0,-0.17) | 45.216 |
16 | {29,30,31,32} | {65,69} | (-0.866,0,-0.5) | 4.1379 |
17 | {27,28,29,30} | {67,71} | (-0.34,0,-0.94) | 4.1397 |
18 | {25,26,27,28} | {70,73} | (0,0,-1) | 82.105 |
19 | {23,24,25,26} | {72,74} | {0.34,0,-0.94} | 4.1386 |
20 | {42,44,45,46} | {75,79} | (0.70,0,0.70) | 19.728 |
21 | {41,43,45,46} | {76,77} | (0.70,0,-0.70) | 19.728 |
22 | {39,40,42,44} | {78,81} | (-0.70,0,0.70) | 19.728 |
23 | {39,40,41,43} | {80,82} | (-0.70,0,-0.70) | 19.728 |
24 | {10,12,13,14} | {83,87} | (0.70,0,0.70) | 19.728 |
25 | {9,11,13,14} | {84,85} | (0.70,0,-0.70) | 19.728 |
26 | {7,8,10,12} | {86,89} | (-0.70,0,0.70) | 19.728 |
27 | {7,8,9,11} | {88,90} | (-0.70,0,-0.70) | 19.728 |
28 | {4,5,50,51} | {91,93} | (0,0,1) | 277.59 |
29 | {15,17,19,21,23,25,27,29,31,33,35,37} | {99,100,101,102,103,104,105,106,107,108} | (0,1,0) | 156.94 |
其次,根据已经得到的平面数据,提取输入模型对应的轮廓图。删除每个平面内部的直线,得到了如图20(a)所示的结果。图20(b)显示了以三维模型的顶点为节点,以各个平面的轮廓线为边构造的轮廓图。输入模型对应的轮廓图包含52个节点和78条边。
接下来,根据得到的轮廓图,将输入模型分割为若干部分。下面将介绍轮廓图分割的各个步骤。
1.将轮廓图分割为若干个分离的子图。
在这一步骤中,将相互联结的节点聚集起来得到若干个分离的子图。如图21所示,输入模型对应的轮廓图被分割成4个分离的子图,它们的顶点分别以菱形、五角星、圆形和星型来标记。其中,以实心方框标记的顶点,代表在产生各个子图时随机选择的源点。各个子图的节点集合,每一个数字代表三维模型对应的顶点索引:
S1={7,8,9,10,11,12,13,14};
S2={39,40,41,42,43,44,45,46};
S3={1,2,3,4,5,6,47,48,49,50,51,52};
S4={15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38}。
2.重建每个子图对应的三维实体。
在这一步骤中,各个子图对应的三维实体分别被重建出来,且重建后的三维实体采用三角形网格表达三维实体的形状。
首先,对于每一个子图,找到包含其所有顶点的平面,并判断这些平面是否产生了变化。如果某一个平面包含两个或者两个以上子图的顶点,则该平面称为变化的平面。结果如下:
子图 | 平面集合 | 变化的平面 |
1 | {4,7,24,25,26,27} | {4,7} |
2 | {4,7,20,21,22,23} | {4,7} |
3 | {1,2,3,4,5,6,7,28} | {4,7} |
4 | {4,8,9,10,11,12,13,14,15,16,17,18,19,29} | {4} |
其次,对于每一个子图,对所有变化的平面采取三角化操作。
对于子图1而言,平面{24,25,26,27}不需要三角化,可以直接利用原有的三角形组成集合:{83,84,85,86,87,88,89,90};然而平面{4,7}需要重新三角化,新产生的三角形有(7,9,13),,(7,13,10),(8,11,14)和(8,14,12)。因此,子图1对应的三维实体由8个顶点,12个三角形组成。
对于子图2而言,平面{20,21,22,23}不需要三角化,可以直接利用原有的三角形集合:{75,76,77,78,79,80,81,82};平面{4,7}需要三角化,新产生的三角形有(39,41,45),(39,45,42),(40,43,46)和(40,46,44)。因此,子图2对应的三维实体由8个顶点,12个三角形组成。
对于子图3而言,平面{1,2,3,5,6,28}不需要三角化,可以直接利用原始的三角形平面,得到三角形集合:{1,2,3,4,5,6,12,14,21,22,30,31,35,36,91,93};然而平面{4,7}需要重新三角化,得到新的三角形:(1,2,48)、(1,48,47)、(5,6,52)和(5,52,51)。因此,子图3对应的三维实体由12个顶点,20个三角形组成。
对于子图4而言,平面{8,9,10,11,12,13,14,15,16,17,18,19,29}不需要三角化,可以直接利用原有的三角形组成集合:{46,47,48,50,51,52,54,55,56,57,58,59,60,62,63,65,66,67,69,70,71,72,73,74};然而对平面4需要重新三角化,产生新的三角形(16,18,20),(16,20,34),(16,34,36),(16,36,38),(16,38,32),(16,32,30),(16,30,28),(16,28,26),(16,26,24)和(16,24,22)。因此,子图4对应的三维实体由24个顶点、34个三角形组成。
最后,校正新产生的三角形的方向。
对于子图1,在原始的三角形中,第83个三角形为(10,13,14),为保证模型表面方向的一致性,新产生的三角形(7,13,10)方向保持不变,同理(7,9,13)方向保持不变;第90个三角形为(11,9,8),因此新产生的三角形(8,11,14)需要改变方向为(8,14,11),同理(8,14,12)需要改变为(8,12,14)。
按照同样的方法处理对子图2、子图3和子图4新产生的三角形的方向。
图22显示了对应于四个子图的,重建后的三维实体M1,M2,M3,M4。
3.继续分割重建后的实体,直到不能再分割为止。
在这一步骤中,继续分割重建的三维实体,直到所有模型都不能再分割为止。
首先,判断这四个模型是不是洞。判断结果为M1和M2为洞,而另外两个模型不是洞。改变M1和M2中所有三角形的方向,使得模型表面方向指向外侧,输出这两个模型,不再继续分割。
其次,判断模型M3和M4模型中是否存在候选切面。在这一步骤中,在判断某一平面是否为切面时,采用的规则如下:1)模型中的顶点位于该切面两侧;2)切面的面积不小于表面积的百分之一;3)联结切面上的顶点和切面外顶点的所有边与切面的夹角不低于30度。根据这些条件来判断,模型M3中存在两个可能的切面,可以继续分割;然而M4不存在切面,直接输出该模型,不再继续分割。
接下来,对模型M3进行分割。
由前面步骤得到的模型M3包含的顶点序列为:S3={1,2,3,4,5,6,47,48,49,50,51,52}。在分割之前,对顶点、三角形各个顶点的索引以及平面数据信息进行更新。结果为顶点序列为S1={1,2,3,4,5,6,7,8,9,10,11,12},三角形平面数据为:
三角形索引 | 顶点1索引 | 顶点2索引 | 顶点3索引 |
1 | 3 | 1 | 9 |
2 | 1 | 7 | 9 |
3 | 1 | 3 | 2 |
4 | 2 | 3 | 4 |
5 | 6 | 2 | 5 |
6 | 5 | 2 | 4 |
7 | 3 | 9 | 10 |
8 | 3 | 10 | 4 |
9 | 1 | 2 | 8 |
10 | 1 | 8 | 7 |
11 | 9 | 7 | 10 |
12 | 7 | 8 | 10 |
13 | 8 | 12 | 10 |
14 | 12 | 11 | 10 |
15 | 2 | 6 | 8 |
16 | 6 | 12 | 8 |
17 | 5 | 12 | 6 |
18 | 5 | 11 | 12 |
19 | 10 | 11 | 4 |
20 | 11 | 5 | 4 |
平面数据如下:
平面索引 | 顶点索引 | 三角形索引 | 法线方向 | 面积 |
1 | {1,3,7,9} | {1,2} | (0,0,1) | 12.476 |
2 | {1,2,3,4,5,6} | {3,4,5,6} | (1,0,0) | 105.61 |
3 | {3,4,9,10} | {7,8} | (0,-1,0) | 40.547 |
4 | {1,2,7,8} | {9,10} | (0,1,0) | 393 |
5 | {7,8,9,10,11,12} | {11,12,13,14} | (-1,0,0) | 105.61 |
6 | {2,6,8,12} | {15,16} | (0,0,-1) | 290.07 |
7 | {5,6,11,12} | {17,18} | (0,-1,0) | 352.45 |
8 | {4,5,10,11} | {19,20} | (0,0,1) | 277.59 |
如图23所示,P8和P3被检测为候选切面。在此示例中,优选处理面积最大的平面,即优先处理平面P8。
1.初始化,12个顶点的处理标记为false,prok=false,k=1,2,...,12,代表所有的顶点未处理。
2.将切面上的四个顶点分成两类C1={4,10}和C2={5,11}分别以方框和圆形标记。更新点处理标记:prox=true,x∈C1∪C2。
3.把与切面上四个顶点直接相连,且不在切面上的顶点分成两类X1={3,9}和X2={6,12},分别以星状和菱形标记。更新点处理标记:prox=true,x∈X1∪X2。
4.将其它顶点分成两类。
利用X1={3,9}中的顶点作为源点进行延伸,以未处理顶点组成集合PX1={1,2,7,8};利用X2={6,12}中顶点作为源点进行延伸,以未处理顶点组成集合PX2={7,8,1,2}。计算PX1和PX2的交集PX={1,2,7,8}。
从集合PX中选择合适的节点,进一步对其它顶点进行分类。经过判断这四个顶点均可以作为候选顶点,且每一个顶点到X1或者X2得最短距离均为1。因此,可以随机选择一个顶点进行处理。在本实施例中,选择第一个顶点,即顶点1进行处理。与顶点1相连接的未处理顶点有2和7,其中直线1→2与切面相交,而直线1→7与切面平行。计算直线1→2与切面的交点,作为第13个顶点,如图24所示,顶点1、2以五角星标记,交点以指向上方的三角形标记。更新顶点分类信息,顶点1位于切面的正侧,将其添加到集合X1中,得到X1={1,3,9},将顶点2添加到集合X2中得到X2={2,6,12};将新增加的第13个顶点添加到集合C1和C2中,结果为C1={4,10,13}C2={5,11,13}。更新顶点1、2和13的点处理标记为true。更新顶点间的连接关系以及平面数据如下:删除顶点1和2之间的连接,在顶点1和13,2和13之间分别添加连接;在切面上,也就是第8个平面上添加顶点13,以及在平面2、4上添加顶点13。
以X1={1,3,9}和X2={2,6,12}分别进行延伸,由未处理顶点组成集合PX1={7,8}和PX2={8,7};计算PX1和PX2的交集PX={7,8}。经过判断得知,这两个顶点均可以作为候选顶点进行下一步处理。在本实施例中,选择顶点8,其中与8直接相连的未处理顶点只有7,而且直线8→7跨越平面两侧。计算直线8→7与切面的交点,记为第14个顶点。如图24所示,顶点7和8以指向下方的三角形标记,交点以指向上方的三角形标记。然后更新顶点7、8和14的分类信息,其中第8个顶点处于切面的负向一侧,将其添加到集合X2中,得到X2={2,6,8,12},将第7个顶点添加到X1中,得到,X1={1,3,7,9}将新增加的第13个顶点添加到集合C1和C2中,结果为C1={4,10,13,14}C2={5,11,13,14}。更新顶点7、8和14的点处理标记为true。更新顶点之间的连接信息和平面数据如下:删除顶点7和8之间的连接,添加7和14,8和14之间的连接;在切面上,即第8个平面上添加顶点14,在平面4和5上添加顶点14。
至此,所有顶点的点处理标记为true。此时的平面数据如下:
平面索引 | 顶点索引 | 三角形索引 | 法线方向 | 面积 |
1 | {1,3,7,9} | {1,2} | (0,0,1) | 12.476 |
2 | {1,2,3,4,5,6,13} | {3,4,5,6} | (1,0,0) | 105.61 |
3 | {3,4,9,10} | {7,8} | (0,-1,0) | 40.547 |
4 | {1,2,7,8,13,14} | {9,10} | (0,1,0) | 393 |
5 | {7,8,9,10,11,12,14} | {11,12,13,14} | (-1,0,0) | 105.61 |
6 | {2,6,8,12} | {15,16} | (0,0,-1) | 290.07 |
7 | {5,6,11,12} | {17,18} | (0,-1,0) | 352.45 |
8 | {4,5,10,11,13,14} | {19,20} | (0,0,1) | 277.59 |
将集合C1={4,10,13,14}和C2={5,11,13,14}分别与X1={1,3,7,9}和X2={2,6,12}合并得到集合CX1={4,10,13,14,1,3,7,9}和CX2={5,11,13,14,2,6,8,12},代表以平面P8为切面将所有顶点分类的结果。
接下来,根据CX1={4,10,13,14,1,3,7,9}和CX2={5,11,13,14,2,6,8,12}建立子图。对于集合CX1中的顶点4和13而言,切面和第2个平面的交点只有4和13,因此在4和13之间添加连接,同理在顶点13和14之间添加连接,在顶点14和10之间添加连接;对于子图2,在顶点5和13之间、13和14之间、以及11和14之间添加连接。然后根据各个集合的顶点以及联结关系,建立两个子图。其中每一个子图含有8个顶点,12条边。
然后,判断得知该分割结果有效,重建得到两个三维实体,如图25所示,分别记为M5和M6。这两个实体均含有8个顶点和12个三角形平面,是两个长方体。
接下来,判断得知M5和M6均不含有候选切面,因此输入模型的分割到此结束,共得到5个部分,即M1、M2、M4、M5和M6。
熟悉本发明的领域的技术人员应该理解,本文的流程图中的或以其他方式描述的任何处理或方法描述或方框都可以被理解为即包括由单纯硬件实现的部件、元件、装置、单元等,也包括用于实现该处理中的具体逻辑功能或步骤的一个或更多个可执行指令的代码表达模块、代码段或代码部,即也可由软件实现。另外,也可以通过计算机软件和硬件的结合来实现。
在本文的流程图中的或以其他方式描述的逻辑和/或步骤例如可以被考虑为用于实现逻辑功能的可执行指令的有序表达,可以通过或结合指令执行系统、设备或装置(例如,基于计算机的系统、含有处理器的系统或可以从指令执行系统、设备或装置中调用并执行该指令的其他系统)在使用的任意计算机可读介质中实现这些逻辑和/或步骤。在本文的上下文中,“计算机可读介质”可以是能够包含、存储、传达、传播或传输通过或结合指令执行系统、设备或装置使用的程序的任何装置。计算机可读介质例如可以但不限于电学、磁性、光学、电磁、红外或半导体系统、设备、装置或传播介质。计算机可读介质的更具体的实施例(非穷举)包括以下各项:具有一条或更多条导线的电连接(电学)、便携式计算机磁盘(磁性)、随机存取存储器(RAM)(电学)、只读存储器(ROM)(电学)、可擦除式可编程只读存储器(EPROM或闪速存储器)(电学)、光纤(光学)以及便携式光盘只读存储器(CDROM)(光学)。注意,计算机可读介质甚至可以是在其上印有程序的纸件或其他适当介质,因为可以经由例如对纸件或其他介质进行光学扫描来电子捕获该程序,接着编译、解释或根据需要以适当方式对该程序进行其他处理,接着将该程序存储在计算机存储器中。
在前面的说明书中参照特定实施例描述了本发明。然而本领域的普通技术人员理解,在不偏离如权利要求书限定的本发明的范围的前提下可以进行各种修改和改变。
Claims (10)
1.一种使用计算机的三维模型分割方法,所述方法包括以下步骤:
平面检测步骤,由计算机检测输入的三维模型中包括的平面,所述输入的三维模型以三角形网格描述;
轮廓图提取步骤,所述计算机根据所述平面检测步骤中检测出的平面,提取所述三维模型的轮廓,即轮廓图;以及
轮廓图分离步骤,所述计算机将所述轮廓图提取步骤提取出的轮廓图分离成若干个子图;
三维实体重建步骤,所述计算机为所述轮廓图分离步骤分离出的各个子图重建三维实体模型,重建出的各三维实体模型采用三角形网格表达。
2.根据权利要求1所述的三维模型分割方法,其中,所述三维模型分割方法还包括:
洞判别步骤,所述计算机判断所述三维实体重建步骤所重建出的三维实体模型是否是洞或判断各所述子图所对应的三维实体是否是洞;
洞模型矫正步骤,如果所述洞判别步骤判断出所述三维实体重建步骤所重建出的某一三维实体模型是洞,则所述计算机改变该重建出的三维实体模型的所有三角形的法线方向,或在判断出某一子图所对应的三维实体是洞时,改变所述子图对应的三维实体的所有三角形的法线方向。
3.根据权利要求1所述的三维模型分割方法,其中,所述三维模型分割方法还包括:
切面判断步骤,所述计算机判断所述三维实体重建步骤所重建出的三维实体模型中是否包括切面,或判断各所述子图所对应的实体中是否包括切面;
再分割步骤,如果所述切面判断步骤判断出所述三维实体重建步骤所重建出的某一三维实体模型中包括切面,则所述计算机利用该切面将该包括切面的三维实体模型分割成两个或更多个子图,如果所述切面判断步骤判断出某一子图中包括切面,则利用该切面将该包含切面的子图 分割成两个或更多个子图。
4.根据权利要求3所述的三维模型分割方法,其中,所述三维模型分割方法还包括合理性检测步骤,所述计算机检测所述再分割步骤所分割出的子图是否合理,如果不合理,则放弃该切面。
5.根据权利要求4所述的三维模型分割方法,其中,所述计算机在所述再分割步骤所分割出的子图满足以下所有条件时,判断该子图合理:
(1)顶点的数目不小于4,平面的个数不小于4;
(2)每个平面至少包含三个不共线的顶点;
(3)每条轮廓线至少属于两个不同的平面;
(4)每一个平面上的顶点必须首尾相连,组成一个封闭区域。
6.根据权利要求1所述的三维模型分割方法,其中,所述平面检测步骤包括:
所述计算机计算所述输入的三维模型中的各个三角形面的法线方向;
所述计算机根据所述各个三角形面的法线方向,将相互连接并且方向一致或相反的三角形面聚集成子平面;以及
所述计算机将子平面合并成平面。
7.根据权利要求6所述的三维模型分割方法,其中将满足以下条件的两个子平面合并成平面:
所述两个子平面的法线方向相同或相反;并且
所述两个子平面之间存在公共的三角形、或存在公共边、或存在连接分别属于这两个子平面的顶点并且垂直于所述两个子平面的法线方向的直线。
8.根据权利要求1所述的三维模型分割方法,其中所述轮廓图提取步骤包括以下步骤:
所述计算机获取各平面上所有边的集合;
所述计算机将各边分为内部边或边界边;以及
所述 计算机删除所有的内部边,保留边界边。
9.根据权利要求3所述的三维模型分割方法,其中所述再分割步骤 包括以下步骤:
切面顶点划分步骤,所述计算机将切面上的顶点分入第一朝向顶点集合和第二朝向顶点集合,所述第一朝向顶点集合中的顶点为与切面之外的顶点的连线在第一方向上的顶点,所述第二朝向顶点集合中的顶点为与切面之外的顶点的连线在第二方向上的顶点;
切面外顶点划分步骤,所述计算机将切面之外的顶点分入第一朝向侧顶点集合和第二朝向侧顶点集合,所述第一朝向侧顶点集合中的顶点为直接或间接与第一朝向顶点集合中的顶点相连的顶点,所述第二朝向侧顶点集合中的顶点为直接或间接与第二朝向顶点集合中的顶点相连的顶点;
切面顶点增加步骤,所述计算机根据所述第一朝向侧顶点集合中的不与第一朝向顶点集合中的顶点直接相连的顶点和所述第二朝向侧顶点集合中的不与第二朝向顶点集合中的顶点直接相连的顶点之间的连接关系,通过在所述切面上增加顶点,使所述第一朝向侧顶点集合和第二朝向侧顶点集合之间不存在跨切面的连接;以及
子图分割步骤,所述计算机根据所述第一朝向顶点集合和第二朝向顶点集合以及所述第一朝向侧顶点集合和第二朝向侧顶点集合将所述含有切面的三维实体模型或含有切面的子图分成两个子图或更多个子图。
10.一种三维模型分割装置,所述装置包括:
平面检测单元,检测输入到所述装置中的三维模型中包括的平面,所述输入的三维模型以三角形网格描述;
轮廓图提取单元,根据所述平面检测单元中检测出的平面,提取所述三维模型的轮廓,即轮廓图;以及
轮廓图分离单元,将所述轮廓图提取单元提取出的轮廓图分割成若干个子图;
三维实体重建单元,为所述轮廓图分离单元分割出的各个子图重建三维实体,重建出的各三维实体采用三角形网格表达。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN200910006405.5A CN101807308B (zh) | 2009-02-12 | 2009-02-12 | 三维模型分割装置和方法 |
JP2010029493A JP5445199B2 (ja) | 2009-02-12 | 2010-02-12 | 三次元モデル分割装置及び三次元モデル分割方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN200910006405.5A CN101807308B (zh) | 2009-02-12 | 2009-02-12 | 三维模型分割装置和方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101807308A CN101807308A (zh) | 2010-08-18 |
CN101807308B true CN101807308B (zh) | 2015-07-08 |
Family
ID=42609089
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN200910006405.5A Active CN101807308B (zh) | 2009-02-12 | 2009-02-12 | 三维模型分割装置和方法 |
Country Status (2)
Country | Link |
---|---|
JP (1) | JP5445199B2 (zh) |
CN (1) | CN101807308B (zh) |
Families Citing this family (30)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101944239B (zh) * | 2009-07-08 | 2016-03-23 | 富士通株式会社 | 三维模型分割方法、装置以及包含该装置的图像处理系统 |
CN102298795B (zh) * | 2011-08-10 | 2013-10-30 | 华侨大学 | 一种快速成型工艺中零件的stl三角网格模型的三维分段方法 |
CN103295216B (zh) * | 2012-02-24 | 2016-01-06 | 富士通株式会社 | 用于识别三维模型中的空间的方法和设备及图像处理系统 |
CN103854275B (zh) * | 2012-11-30 | 2017-06-09 | 富士通株式会社 | 三维模型中的整体空间划分方法和设备及图像处理系统 |
JP2017516227A (ja) * | 2014-05-13 | 2017-06-15 | シーメンス プロダクト ライフサイクル マネージメント ソフトウェアー インコーポレイテッドSiemens Product Lifecycle Management Software Inc. | 湾曲したサーフェス上の測地描画 |
US10055857B2 (en) * | 2014-08-29 | 2018-08-21 | Ati Technologies Ulc | Extension of the MPEG/SC3DMC standard to polygon meshes |
CN104154877B (zh) * | 2014-09-03 | 2016-07-06 | 中国人民解放军国防科学技术大学 | 一种复杂凸面型物体三维重建与体积测量方法 |
CN105184868B (zh) * | 2015-09-01 | 2018-10-12 | 广东顺德中山大学卡内基梅隆大学国际联合研究院 | 一种基于三维实体模型的三角形表面网格生成方法 |
CN106023322A (zh) * | 2016-05-27 | 2016-10-12 | 美屋三六五(天津)科技有限公司 | 一种三维模型处理方法及装置 |
CN107958489B (zh) * | 2016-10-17 | 2021-04-02 | 杭州海康威视数字技术股份有限公司 | 一种曲面重建方法及装置 |
CN106920275B (zh) * | 2017-01-24 | 2021-05-28 | 天衍智(北京)科技有限公司 | 一种复杂属性边界三维矢量迭代方法及应用系统 |
WO2018170731A1 (zh) * | 2017-03-21 | 2018-09-27 | 中国科学院深圳先进技术研究院 | 三维形状表达方法及装置 |
JP6659641B2 (ja) * | 2017-09-13 | 2020-03-04 | ファナック株式会社 | 3次元モデル作成装置 |
CN107633555B (zh) * | 2017-09-15 | 2019-12-17 | 中国地质大学(武汉) | 基于空间扫描的曲面集相互切割方法及系统 |
CN108106572A (zh) * | 2017-12-11 | 2018-06-01 | 上海电气电站设备有限公司 | 汽轮机汽缸中分面平面度的检测方法 |
JP7000941B2 (ja) * | 2018-03-22 | 2022-01-19 | 株式会社Jvcケンウッド | 処理装置、3次元モデルの分割方法及びプログラム |
CN108564646B (zh) * | 2018-03-28 | 2021-02-26 | 腾讯科技(深圳)有限公司 | 对象的渲染方法和装置、存储介质、电子装置 |
CN109035407B (zh) * | 2018-07-11 | 2024-02-06 | 厦门点射科技有限公司 | 基于方向的参数曲面三角化方法、装置、设备及存储介质 |
CN109410336A (zh) * | 2018-09-30 | 2019-03-01 | 深圳市华讯方舟太赫兹科技有限公司 | 网格细分方法、图像处理设备及具有存储功能的装置 |
CN109410183B (zh) * | 2018-10-08 | 2022-03-25 | 香港理工大学 | 基于点云数据的平面提取方法、系统、装置及存储介质 |
CN109979019B (zh) * | 2019-03-27 | 2023-03-14 | 衡阳师范学院 | 一种星型构件的切割方法 |
JP7400259B2 (ja) | 2019-08-14 | 2023-12-19 | 富士フイルムビジネスイノベーション株式会社 | 三次元形状データの生成装置、三次元造形装置、及び三次元形状データの生成プログラム |
CN111999030B (zh) * | 2020-10-29 | 2021-01-05 | 中国空气动力研究与发展中心高速空气动力研究所 | 三维油流vr在线测量与显示系统及其工作方法 |
CN113368498B (zh) * | 2021-06-09 | 2024-02-02 | 网易(杭州)网络有限公司 | 模型生成方法、装置和电子设备 |
CN114202654B (zh) * | 2022-02-17 | 2022-04-19 | 广东皓行科技有限公司 | 一种实体目标的模型构建方法、存储介质和计算机设备 |
JP7314341B1 (ja) | 2022-03-02 | 2023-07-25 | アルム株式会社 | 形状解析装置、形状解析方法および形状解析プログラム |
CN114633850B (zh) * | 2022-03-10 | 2023-03-24 | 上海交通大学 | 一种船舶结构有限元模型虚拟可视化重构方法 |
CN114511586B (zh) * | 2022-04-20 | 2022-08-23 | 三一筑工科技股份有限公司 | 一种对象表面轮廓的确定方法、装置、设备及存储介质 |
CN114722688B (zh) * | 2022-06-07 | 2022-08-26 | 中国城市规划设计研究院(住房和城乡建设部遥感应用中心) | 一种三维建筑模型自动分层方法 |
CN117078891B (zh) * | 2023-10-17 | 2024-01-09 | 西安第六镜网络科技有限公司 | 激光轮廓mesh重建方法、装置、电子设备和存储介质 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101271591A (zh) * | 2008-04-28 | 2008-09-24 | 清华大学 | 一种交互式多视点三维模型重建方法 |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH06103348A (ja) * | 1992-09-18 | 1994-04-15 | Daikin Ind Ltd | 領域分割方法およびその装置 |
JP2001351119A (ja) * | 2000-06-06 | 2001-12-21 | Ricoh Co Ltd | 三角形メッシュ生成方法及び該方法を実行するための記録媒体 |
JP2005292864A (ja) * | 2004-03-31 | 2005-10-20 | Allied Engineering Corp | 連続体分割方法及び連続体分割プログラム |
JP4605772B2 (ja) * | 2005-03-09 | 2011-01-05 | 独立行政法人理化学研究所 | 境界面情報の生成方法、その生成プログラム及びその生成システム |
-
2009
- 2009-02-12 CN CN200910006405.5A patent/CN101807308B/zh active Active
-
2010
- 2010-02-12 JP JP2010029493A patent/JP5445199B2/ja active Active
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101271591A (zh) * | 2008-04-28 | 2008-09-24 | 清华大学 | 一种交互式多视点三维模型重建方法 |
Non-Patent Citations (4)
Title |
---|
George Vosselman and Sander Dijkman.3D BUILDING MODEL RECONSTRUCTION FROM POINT CLOUDS AND GROUND PLANS.《International Archives of Photogrammetry and Remote Sensing》.2001,第XXXIV-3/W4卷37-43. * |
Jiann-Yeou Rau and Liang-Chien Chen.Robust Reconstruction of Building Models from Three-Dimensional Line Segments.《PHOTOGRAMMETRIC ENGINEERING & * |
REMOTE SENSING》.2003,第69卷(第2期),181-188. * |
Yuehong Wang et.al..An Images-Based 3D Model Retrieval Approach.《MMM 2008》.2008,第4903卷90-100. * |
Also Published As
Publication number | Publication date |
---|---|
JP2010186479A (ja) | 2010-08-26 |
CN101807308A (zh) | 2010-08-18 |
JP5445199B2 (ja) | 2014-03-19 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101807308B (zh) | 三维模型分割装置和方法 | |
CN101944239B (zh) | 三维模型分割方法、装置以及包含该装置的图像处理系统 | |
Gao et al. | Feature suppression based CAD mesh model simplification | |
Feito et al. | Fast and accurate evaluation of regularized Boolean operations on triangulated solids | |
CN100583164C (zh) | 一种树状形体的立体分解和分级骨架提取方法 | |
CN110033513A (zh) | 生成表示建筑的3d模型 | |
Guo et al. | Automatic and high-quality surface mesh generation for CAD models | |
Zhao et al. | Mathematical morphology-based generalization of complex 3D building models incorporating semantic relationships | |
CN102812463A (zh) | 能够进行三维对象模型的3d印刷的方法和系统 | |
KR20140142470A (ko) | 나무 모델과 숲 모델 생성 방법 및 장치 | |
JP2005038219A (ja) | 境界表現データからボリュームデータを生成する方法及びそのプログラム | |
CN104217460A (zh) | 3d建模对象的压缩与解压缩 | |
CN111028335B (zh) | 一种基于深度学习的点云数据的分块面片重建方法 | |
de Oliveira Miranda et al. | Hierarchical template-based quadrilateral mesh generation | |
He et al. | Creation of user-defined freeform feature from surface models based on characteristic curves | |
Vigo et al. | Efficient algorithms for boundary extraction of 2D and 3D orthogonal pseudomanifolds | |
Wang et al. | EQSM: An efficient high quality surface grid generation method based on remeshing | |
Xu et al. | Developing an extended IFC data schema and mesh generation framework for finite element modeling | |
Bellet et al. | Designing a topological modeler kernel: a rule-based approach | |
Strodthoff et al. | Automatic decomposition of 3D solids into contractible pieces using Reeb graphs | |
de Oliveira Miranda et al. | Finite element mesh generation for subsurface simulation models | |
Cheutet et al. | Constraint modeling for curves and surfaces in CAGD: a survey | |
Ogáyar-Anguita et al. | Deferred boundary evaluation of complex CSG models | |
CN108876922A (zh) | 一种基于内二面角补角正则化的网格修补方法 | |
Xiong et al. | Automated structured all-quadrilateral and hexahedral meshing of tubular surfaces |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |