CN103617603B - 一种三维数字几何网格模型结构的自动修复方法 - Google Patents

一种三维数字几何网格模型结构的自动修复方法 Download PDF

Info

Publication number
CN103617603B
CN103617603B CN201310662076.6A CN201310662076A CN103617603B CN 103617603 B CN103617603 B CN 103617603B CN 201310662076 A CN201310662076 A CN 201310662076A CN 103617603 B CN103617603 B CN 103617603B
Authority
CN
China
Prior art keywords
voxel
model
limit
summit
dough sheet
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.)
Expired - Fee Related
Application number
CN201310662076.6A
Other languages
English (en)
Other versions
CN103617603A (zh
Inventor
孙正兴
郎许锋
严海
宋沫飞
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Nanjing University
Original Assignee
Nanjing University
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Nanjing University filed Critical Nanjing University
Priority to CN201310662076.6A priority Critical patent/CN103617603B/zh
Publication of CN103617603A publication Critical patent/CN103617603A/zh
Application granted granted Critical
Publication of CN103617603B publication Critical patent/CN103617603B/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Landscapes

  • Image Generation (AREA)

Abstract

本发明公开了一种三维数字几何网格模型结构的自动修复方法,该方法将任意结构的三维数字几何网格模型转换为满足3D打印要求的水密二维流形三维数字几何网格模型。方法主要包括以下步骤:对输入网格模型进行体素化,将模型从多边形网格形式转化成由体素堆积的体表示形式,并将所得体素标记为内部体素、外部体素和边界体素;分析每个包含8个相邻体素的计算单元,根据其中内部体素、外部体素和边界体素的数量及相对位置,确定每个计算单元内部生成面片的方式,并由这些面片组成输出网格模型;检测并修复输出网格模型中的缺陷结构,校正输出网格模型中面片的法向量,并使用输入网格模型对输出网格模型进行校准获得最终的输出网格模型。

Description

一种三维数字几何网格模型结构的自动修复方法
技术领域
本发明涉及一种数字几何网格模型结构修复方法,属于计算机图形学领域,具体地说是一种基于体表示的三维数字几何网格模型结构自动修复方法。
技术背景
随着三维扫描技术和三维建模技术的发展,我们正处在一个三维模型爆炸式增长的时期,其中使用最广泛的是三维网格模型。但是由于三维模型的来源(如遥感,医学扫描,CAD等)多样,使得三维网格模型在结构上存在巨大的差异,进而导致网格模型的分析和重用受到限制。例如,大多数的网格模型处理及分析方法,如测地近邻计算、有限元分析、光栅化、曲面平滑、模型简化等,都要求输入网格模型是流形的网格曲面;另外,在三维模型的应用领域,其中具有代表性的是近年来兴起的3D打印,也要求所使用的网格模型必须是水密(watertight)二维流形(2-dimensionalmanifold)的,否则将无法使用或者导致最终打印出的实体模型出现严重错误。
尽管大量工作针对基于表面的(surface-based)网格模型结构修复展开研究,如文献1:Attene,Marco,MarcelCampen,andLeifKobbelt."Polygonmeshrepairing:Anapplicationperspective."ACMComputingSurveys(CSUR)45,no.2(2013):15.,然而,大多数方法都仅能对某一类特定缺陷进行检测和处理。如文献2:Klincsek,G.T."Minimaltriangulationsofpolygonaldomains."Ann.DiscreteMath9(1980):121-123.主要针对网格模型中存在的孔洞(hole)进行处理;文献3:Guéziec,André,GabrielTaubin,FrancisLazarus,andB.Hom."Cuttingandstitching:Convertingsetsofpolygonstomanifoldsurfaces."VisualizationandComputerGraphics,IEEETransactionson7,no.2(2001):136-151.主要针对网格模型中的复杂边(complexedge)和奇异顶点(singularvertex)进行处理;文献4:Barequet,Gill,andMichaSharir."Fillinggapsintheboundaryofapolyhedron."ComputerAidedGeometricDesign12,no.2(1995):207-229.,主要针对网格模型面片之间的缝隙(gap)和重叠(overlap)进行处理。此类基于表面的网格模型修复方法的不足除了在于仅能修复某一类特定缺陷之外,还在于对输入网格模型有一定的要求,然而,这些要求有时却是难以满足甚至无法自动检测的。另外,此类算法需要用户交互,因此无法用于网格模型修复过程的自动化。
另一方面,文献5:Nooruddin,FakirS.,andGregTurk."Simplificationandrepairofpolygonalmodelsusingvolumetrictechniques."VisualizationandComputerGraphics,IEEETransactionson9,no.2(2003):191-205.首先提出使用基于体表示(volumetric)的网格模型修复方法,并根据体素化得到的结果直接生成流形的网格模型。但是其面片提取时使用的文献6:Lorensen,WilliamE.,andHarveyE.Cline."Marchingcubes:Ahighresolution3Dsurfaceconstructionalgorithm."InACMSiggraphComputerGraphics,vol.21,no.4,pp.163-169.ACM,1987.中提出的MarchingCubes(MC)算法,在面片提取的某些情况存在歧义;同时,文献7:Newman,TimothyS.,andHongYi."Asurveyofthemarchingcubesalgorithm."Computers&Graphics30,no.5(2006):854-879.指出,尽管存在解决MC算法中歧义的方法,但是这些方法不仅需要用户针对模型中出现的歧义选择不同的解决方法,而且还大大增加了MC算法的时间复杂度。
发明内容
发明目的:本发明所要解决的技术问题是针对现有技术的不足,提供一种三维数字几何网格模型结构的自动修复方法,主要用于满足3D打印对三维数字几何网格模型结构的要求。
为了解决上述技术问题,本发明公开了一种三维数字几何网格模型结构的自动修复方法,包括以下步骤:
步骤一,三维模型网格生成:借助输入网格模型体素化后得到的体表示作为中间状态,对输入网格模型进行处理,生成输出网格模型,包括体素化、边界提取和网格提取三个步骤:
体素化包括:将输入网格模型的包围立方体空间均匀切割为N×N×N个体素,N为体素化的维数,并将所得体素分别标记为内部体素和外部体素,所述体素为输入网格模型的包围立方体空间被切割成的一组立方体;
边界提取包括:根据内部体素和外部体素的相对位置,提取出处在内部体素和外部体素交界处的边界体素;
网格提取包括:从所述边界体素中,生成顶点集合和三角面片集合,并将所有的三角面片组成输出网格模型;
步骤二,三维模型网格优化:处理步骤一获得的输出网格模型,包括缺陷结构删除、面片法向量校正和模型校准三个步骤:
缺陷结构删除包括:检测和删除输出网格模型中存在的缺陷结构,确保输出三维网格模型是水密二维流形网格模型;
面片法向量校正包括:根据步骤122获得的内部体素、外部体素和边界体素标记结果,校正三角面片顶点序号的顺序;
模型校准包括:将输出网格模型的顶点投影到输入网格模型的边上,使用输入模型对输出模型进行校准。
本发明步骤一中所述的体素化部分还包括以下步骤:步骤111,计算输入网格模型的包围盒,所述包围盒是指包含输入网格模型且边平行于坐标轴的最小六面体;步骤112,将输入网格模型缩放平移至[0,1]×[0,1]×[0,1]的三维空间中,得到缩放比率和平移参数;步骤113,通过移动OpenGL在不同视点下的可视空间来模拟切割输入网格模型所在三维空间的过程,并根据在不同视点下得到的颜色缓存判断对应的体素是属于三维网格模型内部还是外部,从而将该体素标记为内部体素或外部体素,所述OpenGL的不同视点包括沿三个坐标轴的正反两个方向的共6个视点。
本发明步骤一中所述的边界提取部分还包括以下步骤:步骤121,获取每个内部体素的三组面邻居体素,所述一组面邻居体素是指位于当前体素的前后或左右或上下的两个体素;步骤122,根据每组面邻居体素的标记值的和是否为零,判断当前内部体素是否为边界体素,如果为零,则将当前内部体素标记为边界体素。
本发明步骤一中所述的网格提取部分还包括以下步骤:步骤131,根据每个边界体素的位置,生成相应顶点的坐标,并将此顶点加入输出网格模型顶点集合;步骤132,根据每个计算单元中内部体素、外部体素及边界体素的数量及相对位置,在这个计算单元内部生成三角面片,并连接这些三角面片组成输出网格模型,所述计算单元是指组成一个立方体区域的8个相邻体素。
本发明步骤二中所述的缺陷结构删除部分还包括以下步骤:步骤211,通过检测输出模型中的悬挂面,迭代删除悬挂面,所述悬挂面是指包含悬挂边的面片,所述悬挂边是指仅与一个面片相连的边;步骤212,检测与每个顶点相连的面片之间的边连通性,如果与顶点相连的面片集合中存在非边连通的面片,设定该顶点为奇异顶点,复制该奇异顶点,将非边连通的面片中该奇异顶点的序号更新为复制得到新的顶点序号,以消除该奇异顶点;所述面片的边连通性是指两个面片边连通,即这两个面片有公共边,或者这两个面片边连通的面片有公共边;步骤213,检测与每条边相连的面片的数量,如果边连接的面片数量大于2,设定该边为复杂边。再通过检测该复杂边的每个顶点的面片在去除该复杂边后的边连通性,如果与顶点相连的面片集合中存在非边连通的面片,则将该顶点复制,将非边连通的面片中该顶点的序号更新为复制得到新的顶点序号,以消除复杂边;步骤214,检测顶点与面片之间的隶属关系,如果顶点不属于任何面片,则设定该顶点为悬挂顶点,从输出网格模型的顶点集合中删除该悬挂顶点。
本发明步骤二中所述的面片法向量校正部分还包括以下步骤:步骤221,借助步骤122中获得的体素标记,计算每个输出网格模型顶点的法向量;步骤222,由每个三角面片的三个顶点的法向量平均得到该三角面片的法向量;步骤223,计算由三角面片当前顶点顺序依照右手法则生成的法向量和步骤222中得到的法向量之间的夹角,依据所述夹角调整面片当前顶点序号顺序。
本发明步骤二中所述的模型校准部分还包括以下步骤:步骤231,将输入网格模型进行网格细分,使细分后的输入网格模型的边的长度小于设定阈值,所述网格模型的网格细分是指通过在长度大于设定阈值的边的中点位置生成新的顶点,将每个包含该边的三角面片替换成两个新生成的三角面片;设定阈值为包围盒最长边的1/20;步骤232,将输出网格模型的顶点投影到步骤231获得的细分后的输入网格模型的目标边上,所述目标边是指候选边的集合中与待投影的输出网格模型的顶点之间投影距离最小的边,候选边是指输出网格模型的顶点能够投影到该边的内部而不是该边的延长线上;步骤233,根据输出网格模型中顶点及与其相邻的顶点的投影情况,对输出网格模型中顶点的位置进行调整。统计输出网格模型中与当前顶点相邻的顶点投影到输入模型中包含当前顶点目标边的各个面片上的数量,选择其中投影顶点数量最多的面片,使用投影到该面片上的顶点和当前顶点的坐标的平均值作为当前顶点的新位置,所述顶点投影到面片上是指顶点的目标边是该面片的边;步骤234,根据步骤112的缩放比率和平移参数,将输出模型还原至步骤112中缩放平移之前输入模型的大小及所在空间。
本发明在体表示修复方法的基础上,首先生成具有便于处理的网格结构的三维数字几何模型,再使用基于表面的模型修复算法对生成的模型进行修复,进而实现三维数字几何模型的自动修复。
有益效果:本发明具有以下优点:首先,本发明接受任意结构的三维数字几何网格模型作为输入模型,并将其处理成满足3D打印要求的水密二维流形三维数字几何网格模型;其次,本发明通过使用输入模型对输出模型进行校准,使得输出模型在全局特征和局部特征上都与输入模型保持较高的一致性;最后,本发明在处理过程中无需与用户进行交互,可自动完成三维数字几何模型结构修复的整个过程,适合批量处理大量模型。
附图说明
下面结合附图和具体实施方式对本发明做进一步的具体说明,本发明的上述和/或其他方面的优点将会变得更加清楚。
图1是本发明的处理流程示意图。
图2a~图2h是本发明处理的三维数字几何网格模型结构缺陷示意图。
图3是步骤132中面片生成方式示意图。
图4a~图4c是实施例的输入三维数字几何网格模型中不同图元的示意图。
图5a~图5c是对图4a~图4c所示输入模型体素化后,由边界体素生成的网格模型中不同图元的示意图。
图6a~图6c是将图5a~图5c所示模型进行缺陷结构消除和面片法向量校正后获得的网格模型中不同图元的示意图。
图7a~图7c是对图4a~图4c所示输入模型进行网格细分后获得的网格模型中不同图元的示意图。
图8a~图8c是使用图7a~图7c所示模型对图6a~图6c所示模型进行校准后获得的网格模型中不同图元的示意图。
图9a~图9c是将图8a~图8c所示模型进行顶点位置进行调整后获得的网格模型中不同图元的示意图。
具体实施方式:
由于本发明的特殊性,附图效果只能以灰度形式进行展现。
本发明所修复的缺陷,为会导致输入三维数字几何网格模型无法满足3D打印要求或打印出错误的模型的网格结构缺陷,具体为悬挂部件(danglingelement)、复杂边(complexedge)、奇异顶点(singularvertex)、法向量不一致(inconsistentorientation)、面片退化(degeneracy)、缝隙(gap)、面片交错(intersection)、孔洞(hole),各缺陷示例如图2a~图2h所示。其中,图2a是悬挂部件示意图,图2b是复杂边示意图,图2c是奇异顶点示意图,图2d是法向量不一致示意图,图2e是退化面片示意图,图2f是缝隙示意图,图2g面片交错示意图,图2h是孔洞示意图。
如图1所示,本发明公开的一种三维数字几何网格模型结构的自动修复方法,具体包括以下步骤:
步骤一,三维模型网格生成:借助输入网格模型体素化后得到的体表示作为中间状态,对输入网格模型进行处理,生成输出网格模型;
步骤二,三维模型网格优化:处理步骤一获得的输出网格模型。
本发明的输入三维模型为任意结构的三维数字几何网格模型。
下面具体介绍各个步骤的主要流程:
1.三维模型网格生成
三维模型网格生成过程借助输入网格模型体素化后得到的体表示作为中间状态,对输入网格模型进行处理,生成输出网格模型,包括体素化、边界提取和网格提取三个步骤。
1.1体素化
体素化过程将输入网格模型的包围立方体空间均匀切割为N×N×N个体素,N为体素化的维数,并将所得体素分别标记为内部体素和外部体素,所述体素为输入网格模型的包围立方体空间被切割成的一组立方体。步骤如下:
步骤1先计算输入网格模型Minput的包围盒,所述包围盒是指包含输入网格模型且边平行于坐标轴的最小六面体,包围盒的两个对角控制点BoundingBoxmax和BoundingBoxmin分别为:
BoundingBoxmax=(xmax,ymax,zmax)
=(MAX{x|(x,y,z)∈Vinput},MAX{y|(x,y,z)∈Vinput},MAX{z|(x,y,z)∈Vinput})BoundingBoxmin=(xmin,ymin,zmin)
=(MIN{x|(x,y,z)∈Vinput},MIN{y|(x,y,z)∈Vinput},MIN{z|(x,y,z)∈Vinput})其中,x,y,z分别为控制点在三个坐标轴上的坐标,MAX为求集合中的最大值函数,MIN为求集合中的最小值函数,Vinput为输入网格模型Minput的顶点集合。
步骤2将输入模型Minput缩放平移至[0,1]×[0,1]×[0,1]的空间中,得到缩放后的模型M′input,缩放比率scale及平移向量分别为:
scale=1/MAX{(BoundingBoxmax[i]-BoundingBoxmin[i])|i∈{X,Y,Z}}
translate → = - Bounding Box min
其中,MAX为求集合中的最大值函数,X,Y,Z为坐标系的X轴,Y轴,Z轴。
步骤3初始化OpenGL窗口大小为N×N,N为体素化的维数。通过在不同视点下移动OpenGL中的可视空间来模拟切割模型所在空间的过程。生成的体素使用N×N×N三维矩阵VoxelMatrix[N][N][N]来保存,矩阵元素的值对应体素的标记,初始化为0。具体方法如下:
首先,设置OpenGL的视口尺寸,多边形绘制模式、模型绘制颜色、场景背景色及像素对其方式,分别为:
设置项 设置值
视口尺寸 glViewport(0,0,N,N)
多边形绘制模式 glPolygonMode(GL_FRONT_AND_BACK,GL_FILL)
模型绘制颜色 glColor3ub(255,255,1)
场景背景色 glClearColor(0,0,0,0)
像素对其方式 glPixelStorei(GL_PACK_ALIGNMENT,1)
其中,glViewport、glPolygonMode、glColor、glClearColor、glPixelStorei为OpenGL函数,GL_FRONT_AND_BACK、GL_PACK_ALIGNMENT、GL_FILL为OpenGL常量,N为体素化的维数。
然后,通过设置OpenGL的视点,使其每次沿着三个的坐标轴的正向及反向
分别看向包围盒的中心,各个不同视点设置如下:
其中,gluLookAt为OpenGL的函数。
在每个视点下,沿视线方向移动N次可视空间,并且每移动一次就重绘一次模型,并保存当前的颜色缓存。
FORi=1:N
glOrtho(0.5,-0.5,0.5,-0.5,(i+0.5)/N,1.0);
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
重绘模型面片;
glFlush();
glFinish();
glReadPixels(0,0N,N,GL_BLUE,GL_UNSIGNED_BYTE,buffer);
glutSwapBuffers();
END
其中,glOrtho、glClear、glFlush、glFinish、glReadPixels、glutSwapBuffers为OpenGL函数,GL_COLOR_BUFFER_BIT、GL_DEPTH_BUFFER_BIT、GL_BLUE、GL_UNSIGNED_BYTE为OpenGL常量,N为体素化的维数,buffer为需要保存的颜色缓存。
上述过程分别从三个坐标轴的正反两个方向得到6组颜色缓存,每组颜色缓存包含N个N×N的矩阵buffer[N][N],因此,一组颜色缓存共有N×N×N个值,分别和体素矩阵VoxelMatrix中的元素一一对应。对每个颜色缓存矩阵进行如下操作:
其中,buffer为颜色矩阵,value为buffer矩阵中的值,%为求余运算。
最后,对VoxelMatrix中的每个元素,根据其值判断它所对应的体素是内部还是外部体素;如果为内部体素,则标记为1,否则为外部体素标记为-1:
VoxelMatrix [ i ] [ j ] [ k ] = 1 , Voxelmatrix [ i ] [ j ] [ k ] > 2 - 1 , Voxelmatrix [ i ] [ j ] [ k ] ≤ 2 ,
其中,1≤i,j,k≤N,N为体素化的维数。
1.2边界提取
边界提取过程根据内部和外部体素的相对位置,提取出处在内部、外部体素交界处的边界体素,边界体素对应输出网格模型的顶点。步骤如下:
步骤1对每一个标记为1的体素矩阵元素VoxelMatrix[N][N][N],获取其三组面邻居的集合FaceNeighbouri,j,k,所述一组面邻居体素是指位于当前体素的前后或左右或上下的两个体素,即:
FaceNeighbouri,j,k={(VoxelMatrix[i-1][j][k],VoxelMatrix[i+1][j][k]),
(VoxelMatrix[i][j-1][k],VoxelMatrix[i][j+1][k]),
(VoxelMatrix[i][j][k-1],VoxelMatrix[i][j][k+1])}
其中,1≤i,j,k≤N,N为体素化的维数。
步骤2计算每一组面邻居的标记值的和,如果任意一组面邻居的标记值的和为0,则认为VoxelMatrix[i][j][k]对应体素为边界体素,则认为当前体素为边界体素,标记当前体素矩阵元素VoxelMatrix[i][j][k]为0。
至此,外部体素、边界体素、内部体素分别被标记为-1,0,1。
1.3网格提取
网格提取过程从所述边界体素中,生成顶点集合和三角面片集合,并将所有的三角面片组成输出网格模型。步骤如下:
步骤1生成顶点集合V。对体素矩阵VoxelMatrix中的每个元素标记为0的元素VoxelMatrix[i][j][k],1≤i,j,k≤N,根据其序号(i,j,k)得到对应顶点vi,j,k的坐标:
vi,j,k=(x,y,z)=(i/N,j/N,k/N)
其中,x,y,z分别为顶点在三个坐标轴上的坐标,i,j,k为VoxelMatrix中元素在各维的序号,N为体素化的维数。
然后将vi,j,k加入顶点集合V,即V=V∪{vi,j,k}。
步骤2生成面片集合F。根据每个计算单元中内部体素、外部体素及边界体素的数量及相对位置,在这个计算单元内部生成三角面片,并连接这些三角面片组成输出网格模型,所述计算单元ComputationalCell是指组成一个立方体区域的8个相邻体素,即:
ComputationalCell={(i,j,k),(i+1,j,k),(i,j+1,k),
(i,j,k+1),(i+1,j+1,k),(i+1,j,k+1),
(i,j+1,k+1),(i+1,,j+1,k+1)}
其中,i,j,k为VoxelMatrix中元素在各维的序号。
对每个包含8个相邻体素的计算单元,根据其中每个体素是否为边界体素,理论上可能存在28=256种边界体素的分布情况。但是,根据对称不变性和旋转不变性,可以将256种分布情况归约到20种。再根据每种情况下内部体素、外部体素及边界体素的数量和相对位置,可以得出不同情况下每个计算单元内部的三角面片生成方式,如图3所示。
每生成一个三角面片f就将其加入面片集合F,即F=F∪{f}。每一个三角面片包含其三个顶点在步骤131中获得的顶点集合V中的序号。
2.三维模型网格优化
三维模型网格优化:处理步骤一获得的输出网格模型,使其满足3D打印要求。包括缺陷结构删除,面片法向量调整,模型校准三个步骤。
2.1缺陷结构删除
缺陷结构删除过程通过检测并删除网格提取过程产生的网格模型M'output中可能存在的缺陷结构,保证输出模型M'output是水密的二维流形网格模型,所述缺陷结构如图2a~2h所示。步骤如下:
步骤1悬挂面删除。所述悬挂面DanglingFace是指包含悬挂边的面片,所述悬挂边是指仅与一个面相连的边,即:
DanglingFace={f|f∈F∧e∈Ef∧|Fe|=1}
其中,F为网格提取过程产生输出模型M'output的三角面片集合,Ef是三角面片的f边的集合,Fe是与边e相连的三角面片的集合
根据悬挂面的这个特征,可以通过遍历输出模型M'output的面片来查找悬挂面。一旦找到悬挂面即可迭代删除该悬挂面以及由于删除该悬挂面而产生的新的悬挂面。
步骤2奇异顶点消除。检测与每个顶点相连的面片之间的边连通性,如果与顶点相连的面片集合中存在非边连通的面片,设定该顶点为奇异顶点,复制该奇异顶点,将非边连通的面片中该奇异顶点的序号更新为复制得到新的顶点序号,以消除该奇异顶点;所述面片的边连通性是指两个面片边连通,即这两个面片有公共边,或者这两个面片边连通的面片有公共边。具体方法如下:
根据奇异顶点的这个特征,遍历输出模型M'output的顶点,对每个顶点v,将与其相连的面集合Fv依照边连通性划分为不同的子集Fv={F1,F2,…,Fn}。如果Fv的子集的数量n>1,说明顶点v为奇异顶点。将顶点v复制n次得到顶点集合Vv={v1,v2,…,vn},并将Vv加入模型的顶点集合,即V=V∪Vv。最后将Fv的子集Fi中的每个面片包含的顶点v的序号更新为顶点vi的序号,。
步骤3复杂边消除。检测与每条边相连的面片的数量,如果边连接的面片数量大于2,设定该边为复杂边。
根据步骤132中所述的面片生成方法,生成的网格模型中复杂边连接的面片的数量只可能是偶数。检测该复杂边的每个顶点的面片在去除该复杂边后的边连通性,如果与顶点相连的面片集合中存在非边连通的面片,则将该顶点复制,将非边连通的面片中该顶点的序号更新为复制得到新的顶点序号,以消除复杂边。具体方法如下:
根据复杂边的特征,遍历输出模型M'output的边,对每条边e,如果边e连接的三角面片集合Fe中三角面片数量n=|Fe|>2,说明边e为复杂边。再对边e的每个顶点vi,1≤i≤2,根据边连通性(排除边e)将与其连接的面片集合划分为不同子集如果k>1,则将顶点vi复制k次得到顶点集合{vi1,vi1,…vik},并将其加入模型的顶点集合,即V=V∪{vi1,vi1,…vik}。最后将的子集Fij中的每个面片的顶点vi的序号更新为新为vij的序号,1≤i≤2,1≤j≤k。
步骤4悬挂顶点删除。检测顶点与面片之间的隶属关系,如果顶点不属于任何面片,则设定该顶点为悬挂顶点。
根据悬挂顶点的特征,对于输出模型M'output的顶点集合V中的每个顶点v,如果v不属于任何面片,则v为悬挂顶点,须将其从输出网格模型顶点集合V中删除,即V=V-{v}。此外,为保证删除该悬挂顶点后输出网格模型顶点集合V中顶点的序号连续,需要将输出网格模型顶点集合V中位于该悬挂顶点v之后的顶点前移并同时更新包含此顶点的三角面片中该顶点的序号。
2.2面片法向量校正
面片法向量校正过程根据步骤122获得的内部、外部和边界体素标记结果,校正三角面片顶点序号的顺序,以达到校正面片法向量的目的。步骤如下:
步骤1顶点的法向量计算。借助步骤122中获得的体素标记,对M'output的每个顶点v,其法向量由以下公式计算得到:
Norm v → = 1 n Σ v i ∈ Voxel v n ( v - v i )
其中,Voxelv是与边界体素(即顶点v)相邻的内部体素和边界体素对应的VoxelMatrix中元素序号按照步骤131中方法得到的坐标的集合,n=|Voxelv|。
步骤2每个三角面片f的法向量由其各个顶点的法向量平均得到,即:
Norm f → = 1 3 Σ Norm v i →
其中,为三角面片f的顶点vi的法向量,1≤i≤3。
步骤3对输出模型M'output中的每个面片f,在当前顶点序号顺序下,依据右手法则计算出面片f法向量然后计算和步骤222中获得的之间的夹角θ,如果θ≥π/2,则说明面片f的当前顶点序号顺序错误,需将面片f的顶点序号顺序逆转;如果θ<π/2,说明当前顶点序号顺序正确,无需调整。
2.3模型校准
模型校准将输出网格模型的顶点投影到网格细分后的输入网格模型的边上,使用输入模型对输出模型进行校准,以消除体素化导致的锯齿。步骤如下:
步骤1输入模型网格细分。遍历输入模型M′input的边,对长度大于阈值μ的边ei,在其中点位置生成一个新的顶点vi,new
vi,new=(vi,1+vi,2)/2
其中,vi,1,vi,2为边ei的两个顶点。
对每个包含边ei的三角面片f,从f的顶点vi,1,vi,2,vi,f及新生成的顶点vi,new中可以生成两个新的三角面片fi,1,fi,2,分别包含顶点集合{vi,1,vi,new,vi,f}和{vi,new,vi,2,vi,f},再用这两个新生成的三角面片fi,1,fi,2替换f,vi,f为三角面片f除了边ei的两个顶点vi,1,vi,2之外的第三个顶点。输入模型M′input的面片集合Finput'更新为:
Finput'=Finput'-{f}+{fi,1,fi,2}
重复上述过程,直至所有面片的边的长度都小于阈值μ。阈值μ一般可设定为1/20,即包围盒最长边的二十分之一。
步骤2顶点投影。对输出模型M'output中的每个顶点v,通过以下计算得到可以进行投影的候选边集合Ecandidate
Ecandidate={e|e∈Einput'
Angle(direction(v,v1),direction(v2,v1))≤π2∧
Angle(direction(v,v2),direction(v1,v2))≤π2}
其中,Einput'为细分后输入模型的边的集合,v1,v2是e的两个顶点,direction(vi,vj)=(vi-vj)/|vi-vj|,Angle(x,y)为求向量x和向量y夹角计算函数。
再在候选边集合Ecandidate中选择投影距离最小的边,作为投影的目标边eselected
eselected={e|Dist(v,e)=MIN{d|d=Dist(v,ei)∧ei∈Ecandidate}}
其中,MIN为集合中最小值计算函数,Dist(v,e)为顶点v和边e之间的投影距离。
最后将顶点投影到目标边eselected上,v顶点投影后的坐标为:
v=v1+SQRT(Dist2(v,v1)-Dist2(v,eselected))*direction(v2,v1)
其中,SQRT为平方根计算函数,direction(vi,vj)=(vi-vj)/|vi-vj|,v1,v2是eselected的两个顶点,Dist(vi,vj)为两个顶点vi,vj之间的欧式距离,Dist(v,e)为顶点v和边e之间的投影距离。
步骤3顶点分布调整。对输出模型M'output的每个顶点v,在输出模型M'output中与其直接相连的顶点组成的集合为Vneighbour;另外,在输入模型M′input中包含顶点v的目标边eselected的面片的集合为Fe,其中面的个数为n=|Fe|,n≥1。
根据Vneighbour中每个顶点vi,1≤i≤|Vneighbour|对应的目标边eselected与Fe中的面fj,1≤j≤|Fe|的隶属关系,可以将Vneighbour分成若干个子集Vneighbour={V1,V2,…,Vn},n=|Fe|,n≥1,其中每个子集Vi与Fe中的fi对应,1≤i≤n。
选取Vneighbour中包含顶点最多的子集Vmax
Vmax={V||V|=MAX{|V1|,|V2|,…,|Vn|}}
其中,MAX为计算集合中最大值函数,n=|Fe|,n≥1。
使用Vmax中的顶点和顶点v坐标的平均值作为调整后顶点v的坐标,即:
v = 1 | V max | + 1 &Sigma; v i &Element; V max &cup; v | V max | + 1 v i
步骤4网格还原。根据步骤112的缩放平移参数,将输出模型M'output缩放平移至输入模型Minput的大小及位置,得到最终的输出模型Moutput。缩放比率scale'及平移向量分别为:
scale'=1/scale
translate &prime; &RightArrow; = - translate &RightArrow;
其中,scale,分别为步骤112中由Minput到M′input的缩放比率和平移向量。
实施例
本实施例中,如图4a~图4c所示为输入三维数字几何网格模型中不同图元的示意图,其中,图4a是模型的顶点示意图,图4b是模型的边示意图,图4c是模型的面片示意图。该网格模型由多个网格相互交叉拼接而成,通过本发明所述的基于体表示的三维数字几何网格模型结构自动修复方法,可将图4a~图4c所示的三维网格模型处理成如图9a~图9c所示的满足3D打印的水密二维流形三维数字几何网格模型。其中,图9a是模型的顶点示意图,图9b是模型的边示意图,图9c是模型的面片示意图。具体实施过程如下:
步骤一中,体素化和边界提取过程首先对如图4a~图4c所示输入网格模型进行体素化,并将得到的体素划分为内部体素、外部体素和边界体素,本实施例中将体素化的维数设为256。网格提取过程先由得到的边界体素生成如图5a所示的顶点集合,再根据如图3中所示的面片生成方式,由图5a所示的顶点集合生成出图5b~图5c所示的网格模型,其中,图5b是模型的边示意图,图5c是模型的面片示意图。该网格模型除了面片法向量不一致及锯齿化的情况外,还存在一些视觉上难以察觉结构缺陷。
步骤二中,缺陷结构删除和面片法向量过程对图5a~图5c所示的网格模型进行处理,删除其中的缺陷结构并对面片法向量进行校正,得到如图6a~图6c所示的模型。其中,图6a是模型的顶点示意图,图6b是模型的边示意图,图6c是模型的面片示意图。图6a~图6c所示模型为水密的二维流形网格模型,从结构上已经能满足3D打印的要求。模型校准过程对图6a~图6c所示模型进行进一步处理,使模型不仅结构上满足3D打印的要求,而且在外观上也与输入模型尽可能的近似。步骤231将图4a~图4c所示输入模型进行网格细分后得到如图7a~图7c所示模型,其中,图7a是模型的顶点示意图,图7b是模型的边示意图,图7c是模型的面片示意图。步骤232将图6a所示模型的顶点投影到图7b所示的模型的边上得到如图8a~图8c所示的模型,其中,图8a是模型的顶点示意图,图8b是模型的边示意图,图8c是模型的面片示意图。步骤233再对图8a~图8c所示模型的顶点位置进行调整,得到的输出模型如图9a~图9c所示,其中,图9a是模型的顶点示意图,图9b是模型的边示意图,图9c是模型的面片示意图。

Claims (1)

1.一种三维数字几何网格模型结构的自动修复方法,其特征在于,包括以下步骤:
步骤一,三维模型网格生成:借助输入网格模型体素化后得到的体表示作为中间状态,对输入网格模型进行处理,生成输出网格模型,包括体素化、边界提取和网格提取三个步骤:
体素化包括:将输入网格模型的包围立方体空间均匀切割为N×N×N个体素,N为体素化的维数,并将所得体素分别标记为内部体素和外部体素,所述体素为输入网格模型的包围立方体空间被切割成的一组立方体;
边界提取包括:根据内部体素和外部体素的相对位置,提取出处在内部体素和外部体素交界处的边界体素;
网格提取包括:从所述边界体素中,生成顶点集合和三角面片集合,并将所有的三角面片组成输出网格模型;
步骤二,三维模型网格优化:处理步骤一获得的输出网格模型,包括缺陷结构删除、面片法向量校正和模型校准三个步骤:
缺陷结构删除包括:检测和删除输出网格模型中存在的缺陷结构,确保输出三维网格模型是水密二维流形网格模型;
面片法向量校正包括:根据步骤122获得的内部体素、外部体素和边界体素标记结果,校正三角面片顶点序号的顺序;
模型校准包括:将输出网格模型的顶点投影到输入网格模型的边上,使用输入模型对输出模型进行校准;
步骤一中所述的边界提取部分包含以下步骤:
步骤121,获取每个内部体素的三组面邻居体素,所述一组面邻居体素是指位于当前体素的前后或左右或上下的两个体素;
步骤122,根据每组面邻居体素的标记值的和是否为零,判断当前内部体素是否为边界体素,如果为零,则将当前内部体素标记为边界体素;
步骤一中所述的体素化部分包含以下步骤:
步骤111,计算输入网格模型的包围盒,所述包围盒是指包含输入网格模型且边平行于坐标轴的最小六面体;
步骤112,将输入网格模型缩放平移至[0,1]×[0,1]×[0,1]的三维空间中,得到缩放比率和平移参数;
步骤113,通过移动OpenGL在不同视点下的可视空间模拟切割输入网格模型所在三维空间的过程,并根据在不同视点下得到的颜色缓存判断对应的体素是属于三维网格模型内部还是外部,从而将该体素标记为内部体素或外部体素,所述OpenGL的不同视点包括沿三个坐标轴的正反两个方向的共6个视点;
步骤一中所述的网格提取部分包含以下步骤:
步骤131,根据每个边界体素的位置,生成相应顶点的坐标,并将此顶点加入输出网格模型顶点集合;
步骤132,根据每个计算单元中内部体素、外部体素及边界体素的数量及相对位置,在这个计算单元内部生成三角面片,并连接这些三角面片组成输出网格模型,所述计算单元是指组成一个立方体区域的8个相邻体素;
步骤二中所述的缺陷结构删除部分包含以下步骤:
步骤211,检测输出模型中的悬挂面,迭代删除悬挂面,所述悬挂面是指包含悬挂边的面片,所述悬挂边是指仅与一个面片相连的边;
步骤212,检测与每个顶点相连的面片之间的边连通性,如果与顶点相连的面片集合中存在非边连通的面片,设定该顶点为奇异顶点,复制该奇异顶点,将非边连通的面片中该奇异顶点的序号更新为复制得到新的顶点序号,以消除该奇异顶点;所述面片的边连通性是指两个面片边连通,即这两个面片有公共边,或者这两个面片边连通的面片有公共边;
步骤213,检测与每条边相连的面片的数量,如果边连接的面片数量大于2,设定该边为复杂边,检测该复杂边的每个顶点的面片在去除该复杂边后的边连通性,如果与顶点相连的面片集合中存在非边连通的面片,则将该顶点复制,将非边连通的面片中该顶点的序号更新为复制得到新的顶点序号,以消除该复杂边;
步骤214,检测顶点与面片之间的隶属关系,如果顶点不属于任何面片,则设定该顶点为悬挂顶点,从输出网格模型的顶点集合中删除该悬挂顶点;
步骤二中所述的面片法向量校正部分包含以下步骤:
步骤221,根据步骤122中获得的体素标记,计算每个输出网格模型顶点的法向量;
步骤222,由每个三角面片的三个顶点的法向量平均得到该三角面片的法向量;
步骤223,计算由三角面片当前顶点顺序依照右手法则生成的法向量和步骤222中得到的法向量之间的夹角,依据所述夹角调整面片当前顶点序号顺序;
步骤二中所述的模型校准部分包含以下步骤:
步骤231,将输入网格模型进行网格细分,使细分后的输入网格模型的边的长度小于设定阈值,所述网格模型的网格细分是指通过在长度大于设定阈值的边的中点位置生成新的顶点,将每个包含该边的三角面片替换成两个新生成的三角面片;设定阈值为包围盒最长边的1/20;
步骤232,将输出网格模型的顶点投影到步骤231获得的细分后的输入网格模型的目标边上,所述目标边是指候选边的集合中与待投影的输出网格模型的顶点之间投影距离最小的边,所述候选边是指输出网格模型的顶点能够投影到该边的内部;
步骤233,根据输出网格模型中顶点及与其相邻的顶点的投影情况,对输出网格模型中顶点的位置进行调整;统计输出网格模型中与当前顶点相邻的顶点投影到输入模型中包含当前顶点目标边的各个面片上的数量,选择投影顶点数量最多的面片,将投影到该面片上的顶点和当前顶点的坐标的平均值作为当前顶点的新位置,所述顶点投影到面片上是指顶点的目标边是该面片的边;
步骤234,根据步骤112的缩放比率和平移参数,将输出模型还原至步骤112中缩放平移之前输入模型的大小及所在空间。
CN201310662076.6A 2013-12-06 2013-12-06 一种三维数字几何网格模型结构的自动修复方法 Expired - Fee Related CN103617603B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201310662076.6A CN103617603B (zh) 2013-12-06 2013-12-06 一种三维数字几何网格模型结构的自动修复方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201310662076.6A CN103617603B (zh) 2013-12-06 2013-12-06 一种三维数字几何网格模型结构的自动修复方法

Publications (2)

Publication Number Publication Date
CN103617603A CN103617603A (zh) 2014-03-05
CN103617603B true CN103617603B (zh) 2016-02-24

Family

ID=50168307

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201310662076.6A Expired - Fee Related CN103617603B (zh) 2013-12-06 2013-12-06 一种三维数字几何网格模型结构的自动修复方法

Country Status (1)

Country Link
CN (1) CN103617603B (zh)

Families Citing this family (30)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103942832B (zh) * 2014-04-11 2016-07-06 浙江大学 一种基于在线结构分析的室内场景实时重建方法
CN104260344B (zh) * 2014-09-04 2017-09-26 宁波高新区乐轩锐蓝智能科技有限公司 四打印头以上的3d打印机的控制方法、打印方法
CN104210107B (zh) * 2014-09-04 2018-11-06 宁波高新区乐轩锐蓝智能科技有限公司 双打印头的3d打印机的打印区域控制方法、打印方法
CN104309121B (zh) * 2014-10-13 2017-08-01 宁波高新区乐轩锐蓝智能科技有限公司 不小于四个的偶数个打印头的3d打印机的控制方法
GB2536061B (en) * 2015-03-06 2017-10-25 Sony Interactive Entertainment Inc System, device and method of 3D printing
EP3234921A4 (en) * 2015-04-20 2018-12-19 Hewlett-Packard Development Company, L.P. Creating a voxel representation of a three dimensional (3-d) object
CN104881891B (zh) * 2015-04-30 2018-07-27 北京敏速自动控制设备有限公司 面向三维打印的三维模型处理方法及装置
GB201512304D0 (en) * 2015-07-13 2015-08-19 Whispering Gibbon Ltd Preparing a polygon mesh for printing
US9835568B2 (en) * 2016-04-12 2017-12-05 General Electric Company Defect correction using tomographic scanner for additive manufacturing
JP6790526B2 (ja) * 2016-07-08 2020-11-25 富士通株式会社 ファセット化処理プログラム、ファセット抽出プログラム、ファセット化処理方法、ファセット抽出方法および情報処理装置
US10878136B2 (en) * 2016-09-14 2020-12-29 Mixed Dimensions Inc. 3D model validation and optimization system and method thereof
CN106650124B (zh) * 2016-12-28 2020-04-28 谢亿民工程科技(常州)有限公司 一种基于有限元结果的连续体表面轻量化方法
CN106774146B (zh) * 2016-12-30 2019-05-07 天津天堰科技股份有限公司 点在三角形网格模型表面上的判定方法
CN109003281B (zh) * 2017-03-28 2020-11-27 合肥工业大学 一种基于三维空间模型获得单块脊椎骨的装置及方法
CN108921045B (zh) * 2018-06-11 2021-08-03 佛山科学技术学院 一种三维模型的空间特征提取和匹配方法及其装置
CN108846901A (zh) * 2018-06-14 2018-11-20 宁波视睿迪光电有限公司 模型导入方法及装置
US11016470B2 (en) * 2018-11-09 2021-05-25 Autodesk, Inc. Conversion of mesh geometry to watertight boundary representation
CN109615691B (zh) * 2018-11-27 2022-10-28 中国科学技术大学 积木模型生成系统
CN109903389B (zh) * 2019-01-21 2022-07-08 江苏艾佳家居用品有限公司 一种三维模型网格处理方法及系统
CN110175423B (zh) * 2019-05-31 2023-04-07 无锡职业技术学院 一种3d打印模型的几何修正方法
CN112057208A (zh) * 2019-06-11 2020-12-11 江苏双恩智能科技有限公司 一种人工关节涂层结构及其3d打印数据模型生成方法
CN110443891B (zh) * 2019-07-22 2022-07-08 江苏艾佳家居用品有限公司 一种3d模型的网格化处理方法及系统
CN110363759B (zh) * 2019-07-22 2021-03-19 国家超级计算天津中心 三维模具调试参数确定方法及装置
TWI760675B (zh) * 2020-01-06 2022-04-11 財團法人工業技術研究院 加工路徑缺陷檢測方法
CN111445572B (zh) * 2020-03-24 2024-03-22 网易(杭州)网络有限公司 显示虚拟三维模型的方法和装置
CN112419178A (zh) * 2020-11-18 2021-02-26 芯勍(上海)智能化科技股份有限公司 破洞修复方法、终端设备及计算机可读存储介质
CN112365430B (zh) * 2021-01-13 2021-03-23 湖南生物机电职业技术学院 图像处理方法及系统
CN114491810B (zh) * 2022-01-19 2024-04-16 东风汽车股份有限公司 一种基于catia的汽车冲压件建模的面片裁剪、修改方法
CN114596416B (zh) * 2022-05-07 2022-07-08 武汉天际航信息科技股份有限公司 一种三维地物模型修复方法、系统、设备和存储介质
CN115797600B (zh) * 2023-02-08 2023-06-16 安世亚太科技股份有限公司 一种三维几何模型包面网格生成系统

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20100225647A1 (en) * 2009-03-05 2010-09-09 Schlumberger Technology Corporation Right sizing reservoir models
CN102279981A (zh) * 2011-08-02 2011-12-14 北京农业信息技术研究中心 一种三维图像网格化方法
US8130221B2 (en) * 2007-03-09 2012-03-06 St. Jude Medical, Atrial Fibrillation Division, Inc. Method and system for repairing triangulated surface meshes
CN103065353A (zh) * 2012-12-22 2013-04-24 中国科学院深圳先进技术研究院 三维模型特征提取方法和系统、三维模型检索方法和系统
CN103156693A (zh) * 2013-01-31 2013-06-19 浙江大学 一种基于体图像处理的植牙手术导板的制作方法

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8130221B2 (en) * 2007-03-09 2012-03-06 St. Jude Medical, Atrial Fibrillation Division, Inc. Method and system for repairing triangulated surface meshes
US20100225647A1 (en) * 2009-03-05 2010-09-09 Schlumberger Technology Corporation Right sizing reservoir models
CN102279981A (zh) * 2011-08-02 2011-12-14 北京农业信息技术研究中心 一种三维图像网格化方法
CN103065353A (zh) * 2012-12-22 2013-04-24 中国科学院深圳先进技术研究院 三维模型特征提取方法和系统、三维模型检索方法和系统
CN103156693A (zh) * 2013-01-31 2013-06-19 浙江大学 一种基于体图像处理的植牙手术导板的制作方法

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
Simplification and repair of polygonal models using volumetric techniques;Fakir S. Nooruddin 等;《IEEE Transactions on Visualization and Computer Graphics》;20030630;第9卷(第2期);参见第193-194页 *

Also Published As

Publication number Publication date
CN103617603A (zh) 2014-03-05

Similar Documents

Publication Publication Date Title
CN103617603B (zh) 一种三维数字几何网格模型结构的自动修复方法
CN104484668B (zh) 一种无人机多重叠遥感影像的建筑物轮廓线提取方法
CN103473806B (zh) 一种基于单幅图像的服装三维模型构建方法
Delingette General object reconstruction based on simplex meshes
CN106780592A (zh) 基于相机运动和图像明暗的Kinect深度重建算法
CN105931234A (zh) 一种地面三维激光扫描点云与影像融合及配准的方法
CN104966317B (zh) 一种基于矿体轮廓线的三维自动建模方法
CN107657659A (zh) 基于长方体拟合扫描三维点云的曼哈顿结构建筑物自动建模方法
CN106530337A (zh) 基于图像灰度引导的非局部立体像对密集匹配方法
CN101916454A (zh) 基于网格变形和连续优化的高分辨率人脸重建方法
CN112862972A (zh) 一种表面结构网格生成方法
CN109118578A (zh) 一种层次化的多视图三维重建纹理映射方法
CN108665530B (zh) 基于单张图片的三维建模实现方法
CN107545602B (zh) 基于LiDAR点云的空间拓扑关系约束下的建筑物建模方法
CN104156997A (zh) 一种基于渲染的快速体数据骨架提取方法
CN107730587A (zh) 一种基于图片快速三维化交互式建模方法
CN104715504A (zh) 一种鲁棒的大场景稠密三维重建方法
Zhang et al. Adaptive generation of hexahedral element mesh using an improved grid-based method
CN113971718A (zh) 一种对三维点云模型进行布尔运算的方法
CN115631317B (zh) 隧道衬砌正射影像生成方法及装置、存储介质、终端
CN104964669A (zh) 类柱面文物对象正射影像生成方法
Oh A new triangular mesh repairing method using a mesh distortion energy minimization-based mesh flattening method
CN109785261A (zh) 一种基于灰度体元模型的机载lidar三维滤波方法
CN114913297A (zh) 一种基于mvs稠密点云的场景正射影像生成方法
Cajthaml Old maps georeferencing-overview and a new method for map series

Legal Events

Date Code Title Description
PB01 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
CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20160224

Termination date: 20181206

CF01 Termination of patent right due to non-payment of annual fee