基于模型识别码的三维面片模型文件相似性检测方法与流程

文档序号:16538928发布日期:2019-01-08 20:09阅读:523来源:国知局
基于模型识别码的三维面片模型文件相似性检测方法与流程

本发明属于本发明涉及云存储中海量三维模型文件相似性检测领域,具体是涉及一种基于模型识别码的三维面片模型文件相似性检测方法。



背景技术:

近年来,随着三维打印技术的迅猛发展,各种三维打印服务网站也开始逐渐进入公众的视线。这些网站一般提供三维模型库服务,用户只需注册登录便可按网站约定的规则下载或上传三维模型。对三维打印来说,三维模型一般指面片模型,特别是stl格式的面片模型。网站为扩大模型库中模型数量,一般会对上传模型的用户提供一定的激励,如奖励积分、升级权限等。这种激励政策可能导致的一种不良后果是用户反复恶意上传同一个模型文件或相似模型文件,导致数据库出现大量冗余模型。

针对用户反复上传同一个模型文件这种情况,网站可简单地通过校验新上传模型文件和数据库中已有模型文件的md5码予以避免。但针对相似模型文件,文件自身内容发生了改变,传统的md5码校验将失效。

以两个模型为例,相似模型是指其中一个模型经过简单的几何变换,包括平移、旋转、缩放后,能够变换成和另一个模型别无二致的模型。此外,由于面片模型文件中面片一般是相互独立、无序存放的,因此即使在文件中改变各面片的存放顺序,最终得到的模型仍和原模型一致。事实上,上述几何变换或文件变换虽然改变了模型文件文本(或字节)内容(md5码也随之改变),但并没有创造新的模型,因此变换模型也不具备收藏价值。对模型数据库,为避免数据冗余,应对模型的相似性进行检测。

针对两个模型,理论上,高效的相似性检测应和文件md5码校验类似,不过这里不是根据模型文件的文本(或字节)内容计算识别码,而是根据模型几何拓扑信息产生唯一的简短的识别码,然后比较各自识别码以确定两模型是否相似。这种方式相当于将模型几何拓扑信息压缩成识别码,每个模型只需计算一次识别码,该识别码便可作为模型属性字段终身使用。这种方式尤其适合海量模型相似性检测。

关于包含几何拓扑信息的面片模型文件识别码的计算方法,目前尚无相关文献报道。与之相关的在模型相似性检测方面的文献收集如下:

中国专利文献cn102567465a(申请号201110387765.1)公开了一种复眼视觉基础上的三维模型几何相似性搜索方法。该方法的基本原理是:首先在模型中心建立球面,并将球面均匀划分成一系列网格点(即球面像素点);然后计算从球心射出,经过各像素点的射线和模型的交点,并以球心到交点的距离作为对应像素点的灰度值,将三维模型转化为球面图像;最后在球面图像上通过定义类sift局部形状描述得出模型相似性检测结果。该方法的不足之处在于:球面像素点只能记录一个模型上一个交点的距离信息,而事实上,从球心出发的射线可能和模型有多个交点,易造成检测冲突。比如检测包含一层球壳的模型和包含多层球壳的模型,理论上该方法的判定结果为相似,这显然是错误的。

中国专利文献cn103295240a(申请号201310257324.9)公开了一种评价自由曲面相似性方法。该方法主要思路是:自由曲面的相似性取决于其内部的各个不同子区域之间的相似性,从自由曲面中提取出多个类sift算子,每一个类sift算子均可以描述曲面中的一个子区域的形状,通过比较类sift算子的距离实现自由曲面的相似性评价。该方法不仅可以实现自由曲面的整体相似性评价,还可以准确的实现自由曲面的局部相似性评价。但目前该方法只适用于自由曲面相似性检测,无法直接用于面片模型的相似性检测。

中国专利文献cn101446958a(申请号200810187194.5)公开了一种基于拓扑邻接逼近的cad模型检索方法。该方法原理为:首先提取cad模型的边界信息,并建立cad模型的边界几何与拓扑信息模型;建立用于计算任意不同类型边界面之间相似性的统一度量方法;以检索条件与检索对象之间的初始边界匹配作为输入,给出并利用拓扑邻接逼近算法进行逼近运算,获得满足绝对误差限的相似度。但该方法实施难度较大。

综上所述,现有文献中的方法以形状“相近”检测或搜索为主。几何模型的形状“相近”指模型整体形状一致,但局部形状略有不同,如局部孔位有无、孔位直径差异等。这些方法一般需要实时两两逐一比较模型上的局部特征,最终输出百分数形式比较结果,整体效率必然不如使用模型识别码直接比较的方式高。使用识别码检测最终输出的是判断模型是否相似的布尔量(即是或否)。



技术实现要素:

为了提高三维打印服务网站中面片模型相似性检测效率以及模型数据库利用率,填补面片模型识别码计算方面的空白,本发明提供了一种基于模型识别码的三维面片模型文件相似性检测方法。

该方法的原理是:对两个三角面片模型,如果两个模型相似,即它们可通过平移、旋转、缩放相互转化,那么这两个模型中的对应三角面片必然相似;反之,如果两个模型中的三角面片个数相同,且对应三角面片一一相似,那么在工程实践中,就可认为这两个模型相似的概率极大,即认定两模型相似。

该原理的难点在于建立两个模型中三角面片的一一对应关系。由于三角面片模型中的面片一般是相互独立且无序存放的,因此不能简单地通过三角面片在文件或内存数组中的序号建立对应关系。由于模型间可能存在旋转关系,因此也无法通过简单的包络或面片顶点坐标建立对应关系。考虑到在平移、旋转、缩放变换中,模型中各三角面片的角度是时刻保持不变的,因此本发明方法考虑使用各模型中三角面片顶点角度建立面片之间的对应关系。这一过程需要对面片角度进行两次排序,一次对面片内三内角角度进行排序,一次对各面片内角角度格式化的文本进行排序。

一种基于模型识别码的三维面片模型文件相似性检测方法,包括:

(1)读取某一待检测的三维面片模型文件,构建三角面片集合;

(2)求取三角面片集合中的所有三角面片的三个顶点内角;

(3)对所有三角面片的三个顶点内角进行编码,得到所有三角面片对应的字符串集合;

(4)对字符串集合,按字符串表示的数值大小直接对其中各元素进行排序,得到排序后的字符串集合{ti},其中1≤i≤n;

(5)对排序后的字符串集合,按顺序依次将所有元素拼接为一个长字符串,记为ts,计算所述长字符串ts的md5码;

(6)将面片个数n和md5码组合转化为新字符串,得到该三维模型文件的识别码;

(7)将该三维模型文件的识别码与其他的三维模型文件的识别码进行对比,得到相似性检测结果。

步骤(1)中,所述的面片模型文件是指逻辑上以三角面片方式组织及存储几何模型的文件,文件格式包括但不仅限于常用的stl格式、obj格式、tri格式、xyz格式等。这些格式一般以文本或二进制方式直接存储面片顶点或法向量坐标值,数据读取简单直观。

步骤(1)中,构建的三角面片集合定义为{δi},其中1≤i≤n,n为面片总数,为大于零的自然数,对任意三角面片δk,记其三个顶点分别为ak、bk、ck;k为1~n之间的任意自然数。

进一步地,步骤(2)中,在三角形三顶点坐标已知的情况下,可先计算三边边长,然后通过余弦定理计算各内角角度值。对面片集合{δi}中的任一三角面片δk,计算各顶点内角,记顶点ak、bk、ck对应的内角角度分别为αk、βk、γk。

步骤(3)中,对所有三角面片的三个顶点内角进行编码的步骤如下:

(3-1)选取其中两个较小的内角(此处选择较小的两个内角,主要是为了提高对比效率,当然也可以选择较大的两个内角),对其排序,并对其进行四舍五入处理,保留设定位数的小数;

(3-2)将两个四舍五入后的内角值转化为整数;

(3-3)将得到两个整数转化为设定位数的字符串;

(3-4)将两个字符串组合得到该三角面片对应的编码;

利用步骤(3-1)~(3-4)求得所有三角面片对应的编码,利用这些编码构建得到所有三角面片对应的字符串集合。

为了保证检测精度,同时保证计算效率,作为优选,步骤(3-1)中,小数保留0~4位。进一步优选为2~3位。

作为优选,步骤(3-2)中,将某一内角值转化为整数z的方法为:z=a*10s,其中a为该四舍五入后的内角值,s为该四舍五入后的内角值的小数个数。

步骤(3-3)中,字符串的位数一般大于或者等于步骤(3-2)中所得整数的位数,作为优选,字符串的位数为2~7位。进一步优选为3~6位。

作为优选,步骤(3-4)中,两个字符串定义为a1和a2将两个字符串组合后,得到的字符串为a1a2或a2a1。可以是从大到小,也可以是由小到大,但所有三角面片需要采用统一的标准。

进一步地,步骤(3)中,为方便说明,以某一具体三角形的具体角度值为例,设该三角形三内角角度值分别为α=40.1234°、β=60.5678°、γ=79.3088°(以4位小数的角度值为例),对三角形三内角角度值格式化成一个字符串的具体编码方法如下:

步骤3.1、取较小两角度α、β,首先分别对α、β四舍五入,保留3位小数(以保留3位小数为例),即α=40.123、β=60.568;

步骤3.2、将α、β化为整数,即对α、β分别乘以1000,得α=40123、β=60568;

步骤3.3、将α、β分别转化成字符串,即α=“40123”、β=“60568”,若α、β字符串中仅包含5个字符,则在其前面添加“0”占位字符,此时α=“040123”、β=“060568”,若α、β字符串中已包含6个字符,则无需添加占位字符;当然,此步骤中,也可以直接选择转换为5个字符串,这样就可以省略补零操作。

步骤3.4、组合以上得到的α、β字符串,即“040123060568”,该字符串即为该三角形对应的编码。

根据三角形相似原理,对两个三角形,只要其中存在两个内角角度分别相等,即可判断这两个三角形相似,据此,为降低后续转码计算量,上述格式化中只取两个较小角度,忽略最大角度。此外,格式化中建议保留2~4位小数,小数位数越多,模型识别敏感度越高,但会影响后续转码效率。

作为优选,步骤(7)中,其他的三维模型文件的识别码也采用步骤(1)~(6)中的方法求得其识别码。

进一步地,步骤(4)和步骤(5)中,采用快速排序算法对字符串集合{ti}进行由小到大排序,该算法涉及到的两个字符串元素比较中的小于号定义如下:

为方便说明,若设两字符串分别为tp=“040123060568”、tq=“100342020543”,将tp、tq分别转化为整数,得tp=40123060568、tq=100342020543,比较tp、tq数值大小,显然前者小于后者,则对应的字符串tp小于tq。

需要说明的是,通过步骤(3)和步骤(4)中的两次排序,可建立模型中三角面片的一一对应关系,即:如果两个模型是相似的,那么两组集合{ti}对应序号上的三角形一一对应。

进一步地,步骤(5)中,针对任意字符串的md5码的计算方法为一成熟技术,且已有针对各种编程语言的开源代码,可直接使用(参见张裔智,赵毅,汤小斌;md5算法研究[j];计算机科学,2008,(07):295-297)。最终得到的md5码为一包含32个字符的由数字和小写字母组成的字符串。

进一步地,以上述字符串为例,步骤(6)中,模型面片总数n和以上求得的md5码的格式化方式如下:

若设n=21345,md5码为“900150983cd24fb0d6963f7d28e17f72”,则该模型识别码为“21345-900150983cd24fb0d6963f7d28e17f72”。

本发明检测前,预先构建已有三维模型文件的识别码数据库。步骤(7)中,直接调用已有的数据库,将待检测的模型文件的识别码与已有识别码数据库中的识别码进行对比,进行相似性检测。步骤(7)检测后,如果结果为不相似,则将步骤(6)得到的识别码存入已构建的识别码数据库中。实现数据库的实时更新。

本发明基于模型识别码的三维面片模型文件相似性检测方法,具有的有益的效果是:

本发明得到的模型文件识别码包含模型的几何拓扑信息,可作为三维打印模型数据库中海量模型相似性检测的一种高效手段,从而避免用户恶意上传的相似性模型文件进入数据库,降低数据库冗余程度。

附图说明

图1为stl格式面片模型中面片数据存储形式。

图2为模型在简单几何变换中面片角度不变原理示意。

图3为本发明面片模型文件识别码计算方法流程图。

图4为三角形顶点角度及边长表示方法。

图5为测试例中使用的面片模型。

图6为对一个面片模型经不同几何变换后计算得到的识别码。

具体实施方式

下面以stl格式(ascii)的面片模型为例,结合附图对本发明实施方式做进一步详细说明,以下实施例不构成对本发明的限定。

首先对stl格式作一简要介绍。stl格式中三角面片的数据存储方式如图1所示。结合图1可知,stl文件存储了面片的法向坐标和三顶点坐标,其中同一面片内三个顶点是无序排列的,此外,各三角面片在文件中相互独立,面片之间没有逻辑联系,且各面片无序排放。stl格式这种“顶点无序、面片无序”的特征给模型相似性检测带来了巨大的困难,特别是在模型平移、旋转、缩放后,各模型之间三角面片一一对应关系的建立。

本发明的核心原理在于:如图2所示,模型在平移、旋转、缩放以及改变模型中面片的顺序后,各三角面片的顶点角度保持不变。因此可对面片顶点角度及表示面片的角度字符串进行两次排序,从而建立各模型之间三角面片的一一对应关系,然后通过拼接各面片角度字符串并计算拼接后长字符串的md5码作为面片模型的唯一识别码。

本发明一种包含几何拓扑信息的三维面片模型文件识别码计算方法的流程图如图3所示,具体实施步骤如下:

步骤101、读取stl模型文件,将模型中所有三角面片存入集合{δi},其中1≤i≤n,n为面片总数,n为大于零的自然数,如图4所示,对任意三角面片δk,记其三个顶点分别为ak、bk、ck;k为1~n之间的任一自然数;

步骤102、对面片集合{δi}中的任一三角面片δk,计算各顶点内角,如图4所示,记顶点ak、bk、ck对应的内角角度分别为αk、βk、γk;

需要说明的是,在三角形三顶点坐标已知的情况下,可先计算三边边长,然后通过余弦定理计算各内角角度值。以αk为例,如图4所示,若记ak=||bkck||,bk=||akck||,ck=||akbk||,||||表示模,则:

同理可计算βk、γk角度值。

步骤103、对面片集合{δi}中的任一三角面片δk,将其内角αk、βk、γk从小到大进行排序,然后将三内角角度值按一定格式编码为一个字符串,记为tk,最终可得字符串集合{ti},其中1≤i≤n;

为方便说明,以某一具体三角形的具体角度值为例,设该三角形三内角角度值分别为α=40.1234°、β=60.5678°、γ=79.3088°(以4位小数的角度值为例),对三角形三内角角度值格式化成一个字符串的具体步骤如下:

步骤3.1、取较小两角度α、β,进行排序,然后首先分别对α、β四舍五入,保留3位小数(以保留3位小数为例),即α=40.123、β=60.568;

步骤3.2、将α、β化为整数,即对α、β分别乘以1000,得α=40123、β=60568;

步骤3.3、将α、β分别转化成字符串,即α=“别转123”、β=“23568”,若α、β字符串中仅包含5个字符,则在其前面添加“字符占位字符,此时α=“位字符123”、β=“23符568”,若α、β字符串中已包含6个字符,则无需添加占位字符;

步骤3.4、组合以上得到的α、β字符串(按照排序),即“040123060568”,该字符串即为该三角形对应的编码。

根据三角形相似原理,对两个三角形,只要其中存在两个内角角度分别相等,即可判断这两个三角形相似,据此,为降低后续转码计算量,上述格式化中只取两个较小角度,忽略最大角度。此外,格式化中建议保留3位小数,小数位数越多,模型识别敏感度越高,但会影响后续转码效率。

步骤104、对字符串集合{ti},按字符串表示的数值大小直接对其中各元素进行排序;

采用快速排序算法对字符串集合{ti}进行由小到大排序,该算法涉及到的两个字符串元素比较中的小于号定义如下:

为方便说明,若设两字符串分别为tp=“040123060568”、tq=“100342020543”,将tp、tq分别转化为整数,得tp=40123060568、tq=100342020543,比较tp、tq数值大小,显然前者小于后者,则对应的字符串tp小于tq。

需要说明的是,通过步骤103、104中的两次排序,可建立模型中三角面片的一一对应关系,即:如果两个模型是相似的,那么两组集合{ti}对应序号上的三角形一一对应。

步骤105、对更新后字符串集合{ti},按顺序依次将所有元素拼接为一个长字符串,记为ts,计算字符串ts的md5码;

针对任意字符串的md5码的计算方法为一成熟技术,且已有针对各种编程语言的开源代码,可直接使用(参见张裔智,赵毅,汤小斌.md5算法研究[j].计算机科学,2008,(07):295-297)。最终得到的md5码为一包含32个字符的由数字和小写字母组成的字符串。

步骤106、将面片个数n和md5码按一定格式转化为新字符串,输出该字符串为该stl模型文件的识别码。

若设n=21345,md5码为“900150983cd24fb0d6963f7d28e17f72”,则该模型识别码为“21345-900150983cd24fb0d6963f7d28e17f72”。

可根据步骤101~步骤106预先构建现有stl模型文件的识别码数据库;当得到待检测stl模型文件的识别码后,可将待检测stl模型文件的识别码与预先构建的识别码数据库中元素进行逐一对比,如果相同,则判断为相似,否则判断为不相似。当判断为不相似时,将得到的待检测stl模型文件的识别码存入识别码数据库,更新构建的识别码数据库。

本发明的一个典型实施例如下:

1.选择的stl面片模型如图5所示,该模型为“3dp”字母的拉伸立体模型,包含3928个三角面片。

2.对该模型,分别cura(一个三维打印切片软件)里进行平移、旋转、缩放以及改变模型文件中面片顺序操作,包括原始模型共得到5个模型。

3.将这5个模型分别导入用c++语言实现的本发明方法测试程序中,计算各模型识别码。

图6给出了以上计算得到的各模型识别码。由图6可知,使用本发明方法,在面片模型发生平移、旋转、缩放以及改变文件中面片顺序的情况下,都能计算出针对唯一不变的识别码。由此可见,本发明方法特别适合用于海量模型相似性检测。

以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的一般技术人员来说,本发明还可以有各种更改和变化。在不脱离本发明原理的前提下,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1