网格细分方法、图像处理设备及具有存储功能的装置
技术领域
本申请涉及图像处理技术领域,特别是涉及一种网格细分方法、图像处理设备及具有存储功能的装置。
背景技术
目前,在计算机图形学中,随着计算机硬件的不断发展,图形处理能力越来越强,为了实现高真实感,许多计算机图形应用都使用复杂的,具有高精度细节信息的模型。因此,常用模型的构造常常需要高精度的。通常人们是先构造出一个基本符合要求的低精细度的网格模型,然后再使用工具在保持指定特点的同时,提高网格模型的精细度。
现有网格细分技术通常将三角网格的中心点与边缘点连接,以将原三角面细分为三个三角面,但形成的是平面,过渡较明显。
发明内容
本申请主要提供一种网格细分方法、图像处理设备及具有存储功能的装置,能够使得细分后的三角网格平滑过渡。
为解决上述技术问题,本申请采用的一个技术方案是:提供一种网格细分方法,包括:获取三角网格模型;判断三角网格模型的三角面是否满足细分条件;若判断结果为是,则在三角面的边或内部新增顶点,以将三角面细分为至少两个细分三角面;对新增顶点进行拉普拉斯平滑处理。
为解决上述技术问题,本申请采用的另一个技术方案是:提供一种图像处理设备,其特征在于,包括:相互连接的通信电路和处理器;该处理器利用通信电路获取三角网格模型,并执行程序以实现如上所述的网格细分方法。
为解决上述技术问题,本申请采用的又一个技术方案是:提供一种具有存储功能的装置,存储有指令,该指令被执行时实现如上所述的网格细分方法。
本申请的有益效果是:区别于现有技术的情况,本申请的实施例中,在三角网格模型的三角面满足细分条件时,在三角面的边或内部新增顶点,以将三角面细分为至少两个细分三角面,然后对新增顶点进行拉普拉斯平滑处理,调整新增顶点的位置,使得细分后的三角网格过渡平滑。
附图说明
图1是本申请网格细分方法第一实施例的流程示意图;
图2是图1中步骤S12的具体流程示意图;
图3是图1中步骤S14的具体流程示意图;
图4是本申请网格细分方法第二实施例的流程示意图;
图5是图4中步骤S131之后的具体流程示意图;
图6是在三角面的最长边中间添加新顶点对三角面进行细分的示意图;
图7是本申请所采用的细分前的示例性三角网格模型的示意图;
图8是本申请所采用的细分后的示例性三角网格模型的示意图;
图9是本申请网格细分方法第三实施例的流程示意图;
图10是在三角面的中心添加新顶点对三角面进行细分的示意图;
图11是本申请图像处理设备一实施例的结构示意图;
图12是本申请具有存储功能的装置一实施例的结构示意图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅是本申请的一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
如图1所示,本申请网格细分方法第一实施例包括:
S11:获取三角网格模型。
其中,该三角网格模型是一个三维(Three Dimensional,3D)模型,其包括点、面、纹理、法线等信息。
具体地,可以采用3D模型文件,例如obj格式文件存储3D模型的点、面、纹理、法线等信息,通过OpenMesh库所带的IO函数读取含obj格式文件,则可以得到该obj格式文件中存储的三角网格模型,然后可以将上述三角网格模型数据存入到TriMesh_ArrayKernelT所申明的指针变量m_mesh中,其中,TriMesh_ArrayKernelT为OpenMesh库中所定义的数据格式类型。
S12:判断该三角网格模型的三角面是否满足细分条件。
其中,该细分条件是预先设置的需要进行细分的三角面满足的条件,例如,三角面的面积大于预设面积,或者三角面的任一边长大于预设边长等。
可选地,如图2所示,步骤S12可以包括:
S121:计算三角面的面积。
具体地,在一个应用例中,可以利用指针变量m_mesh获取三角面的点面信息,然后从点面信息中获取该三角面每条边的两个端点的位置坐标,通过两个端点的位置坐标可以计算得到每条边的边长,之后计算三条边的边长和,最后利用如下的海伦公式计算该三角面的面积:
其中,S表示三角面的面积,p表示三角面三条边边长和的一半,a、b和c分别为三角面三条边的边长。
当然,在其他应用例中,三角面的面积也可以采用其他方法进行计算。
S122:判断该三角面的面积是否大于预设阈值。
其中,该预设阈值是满足细分条件的该预设面积,该预设阈值可以根据三角网格模型的网格密度而定。
若大于,则执行如下步骤S123,否则执行如下步骤S124。
S123:判定三角网格模型的该三角面满足细分条件。
S124:判定三角网格模型的该三角面不满足细分条件。
具体地,当该细分条件是三角面的面积大于预设阈值(如0.001)时,先计算三角网格模型中某个三角面的面积,例如可以采用上述海伦公式进行计算,然后将该三角面的面积与预设阈值进行比较,若该三角面的面积大于预设阈值,则可以判定该三角面满足细分条件,需要进行细分,则可以继续执行后续步骤。若该三角面的面积小于或等于预设阈值,则判定三角网格模型的该三角面不满足细分条件,不需要对该三角面进行细分,可以选择下一个三角面,返回继续执行上述步骤S12,直到所有三角面都需要进行细分为止。
若步骤S12的判断结果为是,则执行如下步骤S13。
S13:在三角面的边或内部新增顶点,以将三角面细分为至少两个细分三角面。
S14:对新增顶点进行拉普拉斯平滑处理。
具体地,当通过步骤S12判断指针变量m_mesh当前所指示的三角面需要进行细分时,可以在该三角面的某条边(如最长边)或者三角面内部(如中心或重心)处新增一个顶点,将该顶点与三角面的原始顶点进行连接,则可以将三角面细分为至少两个三角面。为了使得增加顶点后的该三角网格模型过渡平滑,可以对该新增顶点进行拉普拉斯平滑处理,例如将该新增顶点向其相邻顶点的平均坐标位置移动。
可选地,如图3所示,步骤S14可以包括:
S141:获取新增顶点的邻域点。
其中,邻域点包括与该新增顶点相邻的所有顶点。
S142:计算邻域点的平均坐标。
具体地,在一个应用例中,可以利用指针变量m_mesh获取新增顶点的邻域点的坐标,然后计算其坐标和,并将坐标和与邻域点个数相除,即可以得到该新增顶点的邻域点的平均坐标。
S143:将新增顶点向该平均坐标移动,以调整新增顶点的位置。
在上述应用例中,可以计算该新增顶点到邻域点的平均坐标的向量,并利用预先设置的约束值(如0.1)处理该向量,以得到该新增顶点向邻域点的平均坐标点平移的移动向量,然后利用该移动向量调整该新增顶点的位置,以使得该新增顶点沿该移动向量向邻域点的平均坐标点平移。其中,该约束值是预先设置的用于调整新增顶点平移程度的权值,该约束值小于或等于1,当该约束值等于1时,该新增顶点直接移动到该邻域点的平均坐标点处。
上述平滑处理步骤可以执行多次,以将该新增顶点位置调整到所需位置。
继续参阅图1,可选地,步骤S14之后,还包括:
S15:将细分三角面作为新的三角面加入三角网格模型中,删除原三角面。
具体地,可以利用当前指针变量m_mesh将新的三角面加入三角网格模型中,即加入OpenMesh库中,并从OpenMesh库中删除当前指针变量m_mesh所指示的原三角面,并将指针变量m_mesh当前获取的原三角面的点面数据释放。之后,可以返回继续执行步骤S12,直到三角网格模型的所有三角面均不满足细分条件时,细分结束。
若步骤S12的判断结果为否,即当前三角面不满足细分条件时,执行如下步骤S16。
S16:判断是否遍历完成所有三角面。
若步骤S16的判断结果为是,则表示三角网格模型的所有三角面均不满足细分条件,细分结束。若步骤S16的判断结果为否,则获取下一个三角面,并返回继续执行步骤S12。
本实施例中,在三角网格模型的三角面满足细分条件时,在三角面的边或内部新增顶点,以将三角面细分为至少两个细分三角面,然后对新增顶点进行拉普拉斯平滑处理,调整新增顶点的位置,使得细分后的三角网格模型精度更高,且过渡平滑。
如图4所示,本申请网格细分方法第二实施例,是在本申请网格细分方法第一实施例的基础上,进一步限定步骤S13包括:
S131:获取三角面的最长边。
S132:将最长边的中点作为新增顶点,将新增顶点与三角面的另一个顶点进行连接,以将三角面细分为两个细分三角面。
具体地,在一个应用例中,通过指针变量m_mesh可以获取当前需要细分的三角面的各个顶点坐标,从而可以计算得到该三角面的三条边长,然后比较三条边的长度,则可以得到该三角面的最长边。利用指针变量m_mesh可以将OpenMesh库中添加新顶点,从而可以将该最长边的中点作为新增顶点加入OpenMesh库中,然后将该新增顶点与三角面的另一个顶点进行连接,则可以将原始三角面细分为两个细分三角面。
可选地,如图5所示,步骤S131之后,还可以包括:
S133:判断该最长边是否为三角网格模型的边界。
具体地,在一个应用例中,可以通过OpenMesh库自带的边界判断函数is_boundary判断该最长边是否为三角网格模型的边界。
例如图6所示,在三角网格模型的三角面10中,通过is_boundary函数判断该三角面10的最长边a是否为三角网格模型的边界时,若该最长边a为边界,则is_boundary函数返回值为true,否则返回值为false。
当然,在其他应用例中,也可以通过其他方式判断该是否为三角网格模型的边界。
若步骤S133的判断结果为是,则继续执行步骤S132,将该三角面细分为两个细分三角面。否则,说明存在与该三角面共用该最长边的另一个三角面,此时若直接增加该新增顶点,则该另一个三角面会出现四个顶点,出现错误。
因此,可以在步骤S133的判断结果为否时,执行如下步骤:
S134:判断与该三角面共用该最长边的另一个三角面是否满足细分条件。
其中,上述判断另一个三角面是否满足细分条件的过程可以参考本申请网格细分方法第一实施例中步骤S12的执行过程,此处不再重复。
若步骤S134的判断结果为是,则执行如下步骤S135。
S135:判断该另一个三角面的最长边是否为该最长边。
具体地,可以先获取该另一个三角面的剩余的另外两条边的边长,然后分别与该最长边进行比较,若剩余的另外两条边中任一条边的边长大于该最长边的边长,则表明该另一个三角面的最长边不是该最长边,否则表明该另一个三角面的最长边是该最长边。
若步骤S135的判断结果为是,则执行如下步骤S136。
S136:将该最长边的中点作为新增顶点,将新增顶点与该三角面的另一个顶点进行连接,以将该三角面细分为两个细分三角面,且将该新增顶点与另一个三角面的剩余顶点进行连接,以将另一个三角面细分为两个细分三角面。
通过上述步骤S134和S135的判断之后,若与该三角面共用该最长边的另一个三角面满足细分条件,同时该另一个三角面的最长边是该最长边时,可以将该最长边的中点作为新增顶点,加入OpenMesh库中,然后将该新增顶点分别与该三角面和另一个三角面的顶点连接,从而将两个三角面同时细分为四个细分三角面。然后可以继续执行后续对新增顶点的拉普拉斯平滑处理过程。
例如,在图6所示的三角网格模型的三角面10中,当三角面10与另一个三角面20共用同一条最长边a,且该另一个三角面20也满足细分条件时,可以在该最长边a的中间添加一个新的点A,该新增顶点A可以是该最长处a的中点,然后将该新增顶点A分别与三角面10的顶点B以及三角面20的顶点C连接,则可以将该三角面10细分为两个细分三角面101和102,同时也将该三角面20细分为两个细分三角面201和202。
若步骤S134的判断结果为否,或者步骤S135的判断结果为否,则不细分该三角面,也不细分与该三角面共用该最长边的另一个三角面,继续遍历下一个三角面,返回执行步骤S12,直到遍历完成三角网格模型的所有三角面之后,如图7的原始三角网格模型将会被细分成为如图8所示的新三角网格模型。
当然,在其他实施例中,若步骤S133的判断结果为否,也可以直接将该新增顶点与另一个三角面的剩余一个顶点连接,将该另一个三角面也细分为两个三角面。
如图9所示,本申请网格细分方法第三实施例,是在本申请网格细分方法第一实施例的基础上,进一步限定步骤S13包括:
S137:获取三角面的中心点。
S138:将该中心点作为新增顶点,与三角面的顶点进行连接,以将三角面细分为三个细分三角面。
具体地,结合图10所示,在三角面30满足细分条件后,可以获取该三角面的中心点D,将该中心点D作为新增顶点,添加到OpenMesh库中,然后将该中心点D与三角面30的原始顶点D1、D2和D3连接,从而可以将该三角面30细分为三个细分三角面301、302和303,然后可以执行后续对新增顶点D的拉普拉斯平滑步骤,使得细分后的三角网格模型过渡平滑。
如图11所示,本申请图像处理设备一实施例中,该图像处理设备60包括:相互连接的通信电路601和处理器602。
该通信电路601用于发送和接收数据,是图像处理设备60与其他设备进行通信的接口。具体地,该通信电路601用于获取三角网格模型。
处理器602控制通信设备的操作,处理器602还可以称为CPU(Central ProcessingUnit,中央处理单元)。处理器602可能是一种集成电路芯片,具有信号的处理能力。处理器602还可以是通用处理器、数字信号处理器(DSP)、专用集成电路(ASIC)、现成可编程门阵列(FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。
具体地,该处理器602用于执行程序以实现如本申请网格细分方法第一至第三任一实施例或其不冲突的组合所提供的方法。
当然,在其他实施例中,该图像处理设备60还可以包括存储器(图未示)等其他部件,此处不做具体限定。
本实施例中的图像处理设备可以是移动终端、固定终端、服务器等,也可以是集成的独立部件,例如图像处理芯片。
本实施例的图像处理设备中,处理器在三角网格模型的三角面满足细分条件时,在三角面的边或内部新增顶点,以将三角面细分为至少两个细分三角面,然后对新增顶点进行拉普拉斯平滑处理,调整新增顶点的位置,使得细分后的三角网格过渡平滑。
如图12所示,本申请具有存储功能的装置一实施例中,具有存储功能的装置70中存储有程序指令701,该程序指令701被执行时实现如本申请网格细分方法第一至第三任一实施例或其不冲突的组合所提供的方法。
其中,具有存储功能的设备70可以是便携式存储介质如U盘、光盘,也可以是终端、服务器或集成的独立部件,例如图像处理芯片等。
本实施例中,该具有存储功能的设备内部存储的程序指令被执行时,判断三角网格模型的三角面是否满足细分条件,并在三角网格模型的三角面满足细分条件时,在三角面的边或内部新增顶点,以将三角面细分为至少两个细分三角面,然后对新增顶点进行拉普拉斯平滑处理,调整新增顶点的位置,使得细分后的三角网格过渡平滑。
以上所述仅为本申请的实施方式,并非因此限制本申请的专利范围,凡是利用本申请说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本申请的专利保护范围内。