具体实施方式
请参看图1,一种较佳实施方式的模型检索装置100包括:初始化模块110、预处理模块120、图像处理模块130、结果匹配模块140、数据提供模块150和显示单元160。
初始化模块110用于获取模型参数。所述模型包括一维模型、二维模型或二维以上的模型。本发明实施例以三维模型为例进行说明。所述模型参数包括:顶点数量、顶点坐标、法线向量和三角片顶点索引等数据。
预处理模块120,用于对输入的模型进行预处理,根据初始化模块110获取的模型参数进行特征提取所需的一致性。
图像处理模块130用于根据所述模型参数对所述模型进行模型图像局部构造后进行描述,得到所述模型的描述结果。本发明实施例中图像处理模块130与预处理模块120连接,并根据所述坐标系对所述模型进行描述。图像处理模块130可以与初时化模块110连接直接获取模型参数,也可以与预处理模块120连接,不再赘述。
数据提供模块150用于存储和提供需检索的模型文件信息。所述模型文件信息包括:顶点数量、顶点坐标、法线向量和三角片顶点索引等数据。
结果匹配模块140用于根据图像处理模块130处理后的描述结果,与数据提供模块150提供的模型文件信息匹配,得到检索结果。
显示单元160与结果匹配模块140连接,用于显示模型检索结果。
请结合参看图2,进一步对模型检索装置100进行介绍。其中,初始化模块110还包括模型接收单元112和模型信息读取单元114。
模型接收单元112用于接收用户选择的模型文件,本发明实施例以模型接收单元112接收一个三维模型为例说明。模型接收单元112独立于模型的文件格式,可以接收各种格式三维模型的文件,如.3ds格式的文件等。
模型信息读取单元114用于读取所述模型文件信息,包括模型参数的结构变量,所述模型文件信息包括顶点数量、顶点坐标、法线向量和三角片顶点索引等数据。所述模型文件信息的文件格式可以是可存储文本的文件格式,如.txt文件格式等。其中,读取所述模型文件信息的细节在本实施例中可以包括如下步骤:
1)打开所述模型文件。
2)读取文件的前9个bit为顶点部分的开始标识,跳过。读取4个Byte并存储成一个int(整型)型变量,作为顶点个数。根据所述顶点个数循环执行步骤3)和步骤4)。
3)读取顶点的x,y,z坐标。
4)读取法线向量的x,y,z坐标。
5)继续读取11个bit,作为三角片部分开始标识,跳过。读取4个Byte并存储成为一个int型变量,作为三角片个数。根据所述三角片个数,循环执行步骤6)和步骤7)。
6)读取当前三角片三个顶点的索引值,根据索引值确定所述三个顶点的坐标值。
7)根据所述三个顶点的坐标值,计算并保存每个三角片的面积及总面积(m_myTotalArea),同时计算并保存所有顶点中距离原点的最小距离(m_fMinR)。
上述读取过程中若模型为二维模型,仅读取模型的x,y坐标即可,多维模型不再赘述。
预处理模块120还包括顶点采样单元122和坐标系统一单元124。
顶点采样单元122用于根据模型参数对所述模型进行顶点采样。请参看图3,球面图像傅立叶描述子(SFD,Sphere Fourier Descriptor)和球面坐标系的θ和α无关。其中θ为顶点坐标在x,y平面投影与x轴的夹角,α为顶点坐标与z轴的夹角。三维模型围绕x或y轴旋转时,θ变化是一个非线性变化,因此SFD只是与z轴的旋转无关。由于输入的三维模型坐标系可能不一致,并且三维模型顶点的分布可能不均匀或者顶点密度太小,因此,需要对所述三维模型顶点进行采样,统一所述三维模型的坐标。
请结合图3和图4,以本实施例中的一个三角片(P1,P2,P3)为例进行说明。其中,P1,P2,P3分别为所述三角片的三个顶点。对三角片(P1,P2,P3)进行细分,首先确定最长边(P2,P3),其中P4是(P2,P3)的中点。连接P1和P4,这样就把三角片(P1,P2,P3)细分成为两个三角片,分别为三角片(P1,P2,P4)和三角片(P1,P4,P3)。通过海伦公式计算三角片的面积,三角片面积计算为现有技术,不再赘述。如果三角片(P1,P2,P4)或三角片(P1,P4,P3)的面积大于一个预设的阀值F,那么面积大于所述阀值F的三角片需采用上述方法继续细分。依此类推,直到细分后的每一个三角片面积都小于阀值F。细分后的每个三角片内心作为三维模型的一个新采样点。如图4中的A1、A2、A3和A4分别为分割后的三维模型的新采样点。其中上述阀值F在本实施例中预设为m_myTotalArea/100000。
上述三角片分割若对于二维模型,仅需对二维模型的曲边通过线段分割即可,原理与上述三维模型相同,多维模型分割原理也与上述分割原理相同,不再赘述。
坐标系统一单元124用于对模型进行归一化处理。所述归一化并非仅指比例为1,还可以是包括1在内的其他实数。本实施例仅为说明清楚,将三维图像的单位球半径设置为1。所述坐标系统一单元124对所述模型方向定位后进行比例放大或比例缩小。在本实施例中,由于SFD和球面坐标系θ无关,因此,SFD只需统一三维模型z轴方向。选择一个和坐标系无关的轴线作为三维模型坐标系的z坐标轴。首先,确定三维模型中心点坐标,三维模型中心点确定公式如下:
其中
为三维模型的中心点,n为三维模型中采样顶点个数,P
i是采样顶点坐标。
计算出三维模型顶点中与
的最大距离r
max和最小距离r
min。把r
max归一化,得到三维模型的缩放比例系数S,统一三维模型大小,统一后的三维模型可以用一个单位球包围。通过计算
,来确定矢量
,并且把矢量
作为z轴方向。其中
计算公式如下:
其中,k
1和k
2为取值范围系数,在本实施例中,避免
与
重合,k
1和k
2的取值分别为1和0.8。m表示符合k1和k2范围的顶点数量。
矢量
的方向与坐标轴无关,若
与
重合,则取与
点距离最大的一点作为
。根据实验数据,对于多数情况
与
不会出现重合现象。这样,将上述模型归一化后并确定其所在坐标系,并统一所有模型的摆放方向。
图像处理模块130进一步包括投影单元132、同心构造单元134、相交单元136和描述单元138。所述同心构造单元134用于同心构造所述模型得到细化模型;所述投影单元132用于根据所述细化模型进行投影得到模型投影信息;所述相交单元136用于根据所述细化模型进行相交得到模型相交信息;所述描述单元138用于根据所述模型投影信息和/或模型相交信息描述所述模型得到描述结果。
投影单元132和同心构造单元134根据所述模型参数来构建模型投影结构树。在本实施例中,以构建三维模型的球面投影二叉树为例进行说明。首先,通过投影单元132对模型进行球面投影,得到球面投影信息。然后,通过同心构造单元134对模型进行同心构造后再通过投影单元132进行投影,依此类推。本实施例以三维模型的球面半径差值中心同心构造为例来构建球面投影二叉树。如上所述,上述三维模型归一化后可以被一个单位球包围,称为单位包围球。球心记为Pc。设P(r1,r2)是三维模型顶点的集合,则P(r1,r2)可以表示为:
P(r1,r2)={P|r1<L(P,Pc)≤r2,r1<r2}
其中,r
1和r
2分别表示距离球心P
c最近和最远的距离值,L(P,P
c)是模型顶点P和球心P
c的距离。记半径为r
2球面为
,把球面
按经纬线均匀划分,
网格的经纬权值为0。把三维模型顶点的集合P(r
1,r
2)的顶点映射到
上。
请参看图5,设顶点P
i是三维模型顶点集合P(r
1,r
2)的一个顶点,映射方法如下:连接球心P
c和顶点P
i,并延长球心和顶点连线P
cP
i和球面
相交。设交点在球面
的网格(P
1,P
2,P
3,P
4)内,那么网格(P
1,P
2,P
3,P
4)的权值加1。其中,网格(P
1,P
2,P
3,P
4)为上述按经纬均匀划分后的格线P
1,P
2,P
3,P
4分别为此格线的4个交点。把三维模型顶点集合P(r
1,r
2)顶点映射到球面
后,可以得到三维模型顶点集合P(r
1,r
2)的球面权值投影,记为PRO(r
1,r
2)。设球面投影二叉树的某个结点Node的球面权值投影为PRO(r
1,r
2),设r=(r
1+r
2)/2,把球面权值投影PRO(r
1,r)和球面权值投影PRO(r,r
2)作为该结点Node左右子结点的权值球面投影。设球面投影PRO(r
1,1)是球面投影二叉树根结点的球面权值投影,通过半径细分,可以得到一棵球面投影图像二叉树。
在本实施例中,取r1=m_fMinR-0.0001,r2=1.0001,这样可以避免顶点Pi与这两个球面相交。球面投影二叉树的层数一般取2层或2层以上较佳,为便于说明在本实施例中以3层为例。
对于二维模型,上述球面投影可以相似地投影到一个单位圆上,原理与三维模型相同。多维模型的投影原理亦与之相同,不再赘述。
相交单元136和同心构造单元134根据所述模型参数来构建模型相交结构树。在本实施例中,以构建三维模型的球面相交二叉树为例进行说明。首先,计算球面相交模型顶点的模长,再通过同心构造单元134对模型进行球面同心构造,然后,再计算球面相交模型顶点的模长。依此类推,构建球面相交二叉树。如前所述,三维模型顶点到坐标系原点的距离和球半径的比较求三维模型和球面的相交的三维模型顶点集合。设球面半径为R,相交模型顶点集合为P(R),则P(R)可以表示为:
P(R)={P|R-σ<L(P)≤R+σ,σ>0}
其中,σ为相交定义范围值,即在误差在±σ范围内即认为相交。在本实施例中σ取0.01。其中,L(P)为模型顶点模长。
请参看图6,顶点Pj为相交模型顶点集合P(R)的一个顶点。设Pj在球面经纬网络(P5,P6,P7,P8)内,则网格(P5,P6,P7,P8)的权值为1,其中,球面经纬网格均分与前述相同。这样,得到三维模型和球面相交点集合,记为PI(R)。显然,模型顶点密度越大,σ越小,计算球面相交的精度越高。设球面相交二叉树的根结点为PI(R),R=rmin+(rmax-rmin)/2i+1,其中,i表示球面相交二叉树的层数,这里为0。把PI(R1),PI(R2)分别作为根据结点球面相交的半径,其中,R1=R+(rmax-rmin)/2i+1,R2=R-(rmax-rmin)/2i+1,根部结点的左右子结点的层数i为1。依此类推,得到一棵球面相交二叉树。在本实施例中,取rmin=m_fMinR,rmax=1.0。
对于二维模型,上述球面相交可以相似地适用圆相交的方法,原理与之相同。多维模型的相交原理亦与之相同,不再赘述。
描述单元138根据所述模型投影信息和所述模型相交信息,对模型进行描述得到模型的描述信息。本实施例中,亦以三维模型的投影信息和相交信息为例进行说明。对于本领域技术人员来说,得之以上两种二叉树中的一种,即可描述三维模型。为精确描述所述三维模型,本实施例采用加权方式综合上述两种模型二叉树对三维模型进行描述。本实施例中,采用SFD对上述两个球面图像的形状特性进行描述,此描述建立于球面坐标系之上,三维模型描述PF(k,t)计算公式如下:
其中,M和N分别表示球面经纬划分的网格数;m和n是用于循环累加的球面经纬划分的网格数,0<=m<=M-1,0<=n<=N-1;α和θ是指球坐标系下的两个夹角,如前所述;αm和θn是指第m行n列那两条经纬线交点那点在球面坐标系下的两个夹角;PF(k,t)中的k和t是指第(k,t)块经纬网格区域,也就是第k条、第k+1条经线,第t条、第t+1条纬线围成的区域;其中0<=k<=M-1,0<=t<=N-1;f(αm,θn)函数表示(αm,θn)点所代表的网格区域的经纬权值。由于上述计算在球面坐标系内,球面半径模长为定值,故,f(αm,θn)函数包含2个参数。则SFD的计算公式如下:
SFD作用于上述球面投影二叉树和球面相交二叉树后,即得相应的三维模型特征二叉树。请参看图7,根部结点是三维模型特征二叉树的第0层,用于表征三维模型的整体特征,三维模型特征二叉树的层数越高,代表三维模型的局部细节特征描述的越细致。这样,可以通过此三维模型特征二叉树可以对三维模型从整体到局部进行匹配。
对于二维模型或其他多维模型,SFD描述原理与之相同,不再赘述。
数据提供模块150进一步包括数据存储单元154和数据读取单元152。数据存储单元154用于存储待查找或待匹配的模型文件信息和模型参数信息。所述模型参数信息包括:模型信息、模型文件的数量、文件名、SFD系数、各向同性变换矩阵系数等数据。本实施例中,所述模型参数可以保存成为预处理后的文本信息文件,如.txt文件。所述模型信息以链表结构输出。
数据读取单元152用于读取数据存储单元154中模型文件信息和模型参数信息。数据读取单元152可以根据描述单元138对模型的描述信息,对数据提供模块154中的模型文件和模型参数有选择的读取,此选择可以根据预设读取命令进行选择。本实施例中,数据读取单元152的读取细节如下:
1)打开模型信息文件。
2)读取模型文件个数,读取前4个Byte,并存储为一个int型变量。根据模型文件个数,循环执行以下步骤。
3)初始化链表结点DataLink,DataLink结构包含以下数据:一个CString型变量保存模型文件名,一个7×375的二维float型数组保存傅立叶描述子系数,一个大小为9的float型数组保存各向同性变换矩阵系数,三个float型变量保存各向同性变换矩阵的三个特征值,一个DataLink*型指针用于指向后续结点。
4)读取模型文件长度,根据该模型文件信息块的前4个Byte,保存成为一个int型变量。根据该长度指示的Byte数来读取文件名称。
5)读取傅立叶描述子系数。此为一个7×375的二维float型数组。
6)读取9个(3×3)各向同性变换矩阵系数,并计算3个各向同性矩阵的特征值。
结果匹配模块140进一步包括偏移量计算单元142、相似度计算单元144、相似结果排序单元146和判断单元148。
偏移量计算单元142用于根据数据读取单元152读取的模型文件信息,计算与输入模型特征树的偏差值。本实施例中,以输入三维模型特征二叉树为例进行说明。三维模型特征二叉树从根结点到叶子结点,分别代表了两个三维模型从整体到局部的相似性匹配程度。三维模型特征二叉树的SFD偏差距离计算公式分别如下:
其中,dist1表示球面投影图像的SFD偏差距离,dist2表示球面相交图像的SFD偏差距离。SFD1和SFD2分别表示选择的模型和数据存储单元154中模型的SFD,计算这两者间的偏差距离就可以得出二者间相似程度。i和j是循环变量,取值范围分别是0..M-1和0..N-1。M和N分别表示球面划分的经纬网格数。
相似度计算单元144用于计算模型结构树的相似度。本实施例中,以计算三维模型特征二叉树的相似度为例进行说明。三维模型特征二叉树的相似程度体现了两个三维模型的相似程度,两种图像处理方式的三维模型二叉树相似度计算公式如下:
其中,comp1表示球面权值投影的三维模型相似度,comp2表示球面相交的三维模型相似度。disti,j是三维模型特征二叉树第i层第j个对应结点的偏差。相似度越小,三维模型的相似性越差,反之,相似度越大,三维模型的相似度越好。
上述两种图像处理方式计算得到的球面权值投影的三维模型相似度comp1,和球面相交的三维模型相似度comp2可以根据需要设置不同的权值。一般根据试验经验进行设置。
若在注重模型外观相似的检索装置中,comp1和comp2的权值可以分别设置为3/4和1/4。则相似度计算公式如下:
其中,comp表示加权后两种三维模型的相似度。
若在拓扑结构,尤其是空洞模型的检索时,如机械模型的检索,根据试验经验comp1和comp2的权值可以分别设置为1/4和3/4。则加权后的相似度计算公式如下:
其中,comp表示加权后两种三维模型的相似度。
若检索的模型结构比较复杂,类型比较多,根据试验经验,comp1和comp2的权值可以设置为1/2。则加权后的相似度计算公式如下:
其中,comp表示加权后两种三维模型的相似度。
相似结果排序单元146用于对上述计算的各模型相似度进行排序,所述排序为从相似度大到相似度小的排序。所述排序可以根据哈希排序、快速排序、归并排序、堆排序和冒泡排序等方法进行排序。
判断单元148用于判断检索结果是否正确。若用户指定的模型是模型数据存储单元154中包含模型中的其中一个,则返回的第一个结果应是该模型自身,因为该模型与其自身相似度最大(为1)。若满足该条件,并且返回的模型数量大于用户指定的模型数量,则检索结果正确。若用户指定的模型不在模型数据存储单元154中,则只需判断返回模型个数是否符合要求。
显示单元160用于显示检索结果。本实施例中,设置检索结果一次显示20个检索到的模型,并且根据相似度从大到小的顺序进行排列显示。同时,可以将检索到的模型文件名保存在一个文本文件中。
若检索二维模型或三维以上的模型,检索原理与本发明实施例相同,改变参数即可,不再赘述。
上述模型检索装置100通过图像处理模块130根据所述模型的参数对所述模型进行描述,并且通过同心构造单元134对模型进行同心构造。不但可以描述图像的轮廓也可以描述图形的空洞部分,可以检索特殊结果的图像,对图像描述比较细致,本发明实施例适用范围较现有技术广泛。同时,由于可以接收特殊图像的模型信息及检索包括空洞的图像,本发明实施例的鲁棒性较佳。另外,通过同心构造单元134及投影单元132和/或相交单元136对细化模型进行描述,本发明实施例对模型的描述比较细致,可以描述图像的内部空洞,不但可以检索模型的整体图像也可以检索模型的局部图像。通过预处理模块120对所述模型进行预处理,通过顶点采样单元122对所述模型进行三角片采样,通过所述坐标系统一单元124对所述模型的坐标系统一。可以描述模型的一致性,使得模型有相同的摆放方式,使得模型的摆放方式不影响检索结果。通过偏移量计算单元142计算两种模型的偏差程度,通过相似度计算单元144对上述两种模型的相似度进行计算,避免了检索出不必要的模型,节约了系统的资源。通过相似结果排序单元146对所述相似度进行排序,使得相似度比较高的模型排列到明显的位置,节约检索的时间和人力。通过判断单元148对所述检索结果是否正确进行判断,使得检索者可以清楚本次检索结果是否正确,减少了出错的几率。通过显示单元160显示所述检索结果,使得检索者可以浏览其检索结果。通过对模型投影和模型相交两种方式计算的相似度进行加权,提高了检索的精确度和鲁棒性,并且可以进行模型的局部检索,扩展了应用范围。
请结合参看图8,基于上述模型检索装置的模型检索方法,该方法包括如下步骤:
步骤202,接收用户选择的模型文件,本发明实施例以模型接收单元112接收一个三维模型为例说明。模型接收单元112独立于模型的文件格式,可以接收各种格式三维模型的文件,如.3ds格式的文件等。
步骤204,读取所述模型文件信息,包括模型参数的结构变量,所述模型文件信息包括顶点数量、顶点坐标、法线向量和三角片顶点索引等数据。所述模型文件信息的文件格式可以是可存储文本的文件格式,如.txt文件格式等。其中,读取所述模型文件信息的细节在本实施例中具体可以包括如下步骤:
1)打开所述模型文件。
2)读取文件的前9个bit为顶点部分的开始标识,跳过。读取4个Byte并存储成一个int(整型)型变量,作为顶点个数。根据所述顶点个数循环执行步骤3)和步骤4)。
3)读取顶点的x,y,z坐标。
4)读取法线向量的x,y,z坐标。
5)继续读取11个bit,作为三角片部分开始标识,跳过。读取4个Byte并存储成为一个int型变量,作为三角片个数。根据所述三角片个数,循环执行步骤6)和步骤7)。
6)读取当前三角片三个顶点的索引值,根据索引值确定所述三个顶点的坐标值。
7)根据所述三个顶点的坐标值,计算并保存每个三角片的面积及总面积(m_myTotalArea),同时计算并保存所有顶点中距离原点的最小距离(m_fMinR)。
上述读取过程中若模型为二维模型,仅读取模型的x,y坐标即可,多维模型不再赘述。
步骤206,根据模型参数对所述模型进行顶点采样。球面图像傅立叶描述子(SFD,Sphere Fourier Descriptor)和球面坐标系的θ和α无关。其中θ为顶点坐标在x,y平面投影与x轴的夹角,α为顶点坐标与z轴的夹角。三维模型围绕x或y轴旋转时,θ变化是一个非线性变化,因此SFD只是与z轴的旋转无关。由于输入的三维模型坐标系可能不一致,并且三维模型顶点的分布可能不均匀或者顶点密度太小,因此,需要对所述三维模型顶点进行采样,统一所述三维模型的坐标。
以本实施例中的一个三角片(P1,P2,P3)为例进行说明。其中,P1,P2,P3分别为所述三角片的三个顶点。对三角片(P1,P2,P3)进行细分,首先确定最长边(P2,P3),其中P4是(P2,P3)的中点。连接P1和P4,这样就把三角片(P1,P2,P3)细分成为两个三角片,分别为三角片(P1,P2,P4)和三角片(P1,P4,P3)。通过海伦公式计算三角片的面积,三角片面积计算为现有技术,不再赘述。如果三角片(P1,P2,P4)或三角片(P1,P4,P3)的面积大于一个预设的阀值F,那么面积大于所述阀值F的三角片需采用上述方法继续细分。依此类推,直到细分后的每一个三角片面积都小于阀值F。细分后的每个三角片内心作为三维模型的一个新采样点。如图4中的A1、A2、A3和A4分别为分割后的三维模型的新采样点。其中上述阀值F在本实施例中预设为m_myTotalArea/100000。
上述三角片分割若对于二维模型,仅需对二维模型的曲边通过线段分割即可,原理与上述三维模型相同,多维模型分割原理也与上述分割原理相同,不再赘述。
步骤208,对模型进行归一化处理。所述归一化并非仅指比例为1,还可以是包括1在内的其他实数。本实施例仅为说明清楚,将三维图像的单位球半径设置为1。对所述模型方向定位后进行比例放大或比例缩小。在本实施例中,由于SFD和球面坐标系θ无关,因此,SFD只需统一三维模型z轴方向。选择一个和坐标系无关的轴线作为三维模型坐标系的z坐标轴。首先,确定三维模型中心点坐标,三维模型中心点确定公式如下:
其中
为三维模型的中心点,n为三维模型中采样顶点个数,P
i是采样顶点坐标。
计算出三维模型顶点中与
的最大距离r
max和最小距离r
min。把r
max归一化,得到三维模型的缩放比例系数S,统一三维模型大小,统一后的三维模型可以用一个单位球包围。通过计算
,来确定矢量
,并且把矢量
作为z轴方向。其中
计算公式如下:
其中,k
1和k
2为取值范围系数,在本实施例中,避免
与
重合,k
1和k
2的取值分别为1和0.8。m表示符合k1和k2范围的顶点数量。
矢量
的方向与坐标轴无关,若
与
重合,则取与
点距离最大的一点作为
。根据实验数据,对于多数情况
与
不会出现重合现象。这样,将上述模型归一化后并确定其所在坐标系,并统一所有模型的摆放方向。
步骤210,根据所述模型参数来构建模型投影结构树。在本实施例中,以构建三维模型的球面投影二叉树为例进行说明。首先,对模型进行球面投影,得到球面投影信息。然后,对模型进行同心构造后再进行投影,依此类推。本实施例以三维模型的球面半径差值中心同心构造为例来构建球面投影二叉树。如上所述,上述三维模型归一化后可以被一个单位球包围,称为单位包围球。球心记为Pc。设P(r1,r2)是三维模型顶点的集合,则P(r1,r2)可以表示为:
P(r1,r2)={P|r1<L(P,Pc)≤r2,r1<r2}
其中,r
1和r
2分别表示距离球心P
c最近和最远的距离值,L(P,P
c)是模型顶点P和球心P
c的距离。记半径为r
2球面为
,把球面
按经纬线均匀划分,
网格的经纬权值为0。把三维模型顶点的集合P(r
1,r
2)的顶点映射到
上。
请参看图5,设顶点P
i是三维模型顶点集合P(r
1,r
2)的一个顶点,映射方法如下:连接球心P
c和顶点P
i,并延长球心和顶点连线P
cP
i和球面
相交。设交点在球面
的网格(P
1,P
2,P
3,P
4)内,那么网格(P
1,P
2,P
3,P
4)的权值加1。其中,网格(P
1,P
2,P
3,P
4)为上述按经纬均匀划分后的格线P
1,P
2,P
3,P
4分别为此格线的4个交点。把三维模型顶点集合P(r
1,r
2)顶点映射到球面
后,可以得到三维模型顶点集合P(r
1,r
2)的球面权值投影,记为PRO(r
1,r
2)。设球面投影二叉树的某个结点Node的球面权值投影为PRO(r
1,r
2),设r=(r
1+r
2)/2,把球面权值投影PRO(r
1,r)和球面权值投影PRO(r,r
2)作为该结点Node左右子结点的权值球面投影。设球面投影PRO(r
1,1)是球面投影二叉树根结点的球面权值投影,通过半径细分,可以得到一棵球面投影图像二叉树。
在本实施例中,取r1=m_fMinR-0.0001,r2=1.0001,这样可以避免顶点Pi与这两个球面相交。球面投影二叉树的层数一般取2层或2层以上较佳,为便于说明在本实施例中以3层为例。
对于二维模型,上述球面投影可以相似地投影到一个单位圆上,原理与三维模型相同。多维模型的投影原理亦与之相同,不再赘述。
步骤212,根据所述模型参数来构建模型相交结构树。在本实施例中,以构建三维模型的球面相交二叉树为例进行说明。首先,计算球面相交模型顶点的模长,再对模型进行球面同心构造,然后,再计算球面相交模型顶点的模长。依此类推,构建球面相交二叉树。如前所述,三维模型顶点到坐标系原点的距离和球半径的比较求三维模型和球面的相交的三维模型顶点集合。设球面半径为R,相交模型顶点集合为P(R),则P(R)可以表示为:
P(R)={P|R-σ<L(P)≤R+σ,σ>0}
其中,σ为相交定义范围值,即在误差在±σ范围内即认为相交。在本实施例中σ取0.01。其中,L(P)为模型顶点模长。
请参看图6,顶点Pj为相交模型顶点集合P(R)的一个顶点。设Pj在球面经纬网络(P5,P6,P7,P8)内,则网格(P5,P6,P7,P8)的权值为1,其中,球面经纬网格均分与前述相同。这样,得到三维模型和球面相交点集合,记为PI(R)。显然,模型顶点密度越大,σ越小,计算球面相交的精度越高。设球面相交二叉树的根结点为PI(R),R=rmin+(rmax-rmin)/2i+1,其中,i表示球面相交二叉树的层数,这里为0。把PI(R1),PI(R2)分别作为根据结点球面相交的半径,其中,R1=R+(rmax-rmin)/2i+1,R2=R-(rmax-rmin)/2i+1,根部结点的左右子结点的层数i为1。依此类推,得到一棵球面相交二叉树。在本实施例中,取rmin=m_fMinR,rmax=1.0。
对于二维模型,上述球面相交可以相似地适用圆相交的方法,原理与之相同。多维模型的相交原理亦与之相同,不再赘述。
步骤214,根据所述模型投影信息和所述模型相交信息,对模型进行描述得到模型的描述信息。本实施例中,亦以三维模型的投影信息和相交信息为例进行说明。对于本领域技术人员来说,得之以上两种二叉树中的一种,即可描述三维模型。为精确描述所述三维模型,本实施例采用加权方式综合上述两种模型二叉树对三维模型进行描述。本实施例中,采用SFD对上述两个球面图像的形状特性进行描述,此描述建立于球面坐标系之上,三维模型描述PF(k,t)计算公式如下:
其中,M和N分别表示球面经纬划分的网格数;m和n是用于循环累加的球面经纬划分的网格数,0<=m<=M-1,0<=n<=N-1;α和θ是指球坐标系下的两个夹角,如前所述;αm和θn是指第m行n列那两条经纬线交点那点在球面坐标系下的两个夹角;PF(k,t)中的k和t是指第(k,t)块经纬网格区域,也就是第k条、第k+1条经线,第t条、第t+1条纬线围成的区域;其中0<=k<=M-1,0<=t<=N-1;f(αm,θn)函数就表示(αm,θn)点所代表的网格区域(用一点的坐标代表一个区域,这就好比用一个矩形的左上角代表这个矩形)的经纬权值。由于上述计算在球面坐标系内,球面半径模长为定值,故,f(αm,θn)函数包含2个参数。则SFD的计算公式如下:
SFD作用于上述球面投影二叉树和球面相交二叉树后,即得相应的三维模型特征二叉树。请参看图7,根部结点是三维模型特征二叉树的第0层,用于表征三维模型的整体特征,三维模型特征二叉树的层数越高,代表三维模型的局部细节特征描述的越细致。这样,可以通过此三维模型特征二叉树可以对三维模型从整体到局部进行匹配。
对于二维模型或其他多维模型,SFD描述原理与之相同,不再赘述。
步骤216,读取数据存储单元154中模型文件信息和模型参数信息。可以根据描述单元138对模型的描述信息,对数据提供模块154中的模型文件和模型参数有选择的读取,此选择可以根据预设读取命令进行选择。本实施例中,读取细节如下:
1)打开模型信息文件。
2)读取模型文件个数,读取前4个Byte,并存储为一个int型变量。根据模型文件个数,循环执行以下步骤。
3)初始化链表结点DataLink,DataLink结构包含以下数据:一个CString型变量保存模型文件名,一个7×375的二维float型数组保存傅立叶描述子系数,一个大小为9的float型数组保存各向同性变换矩阵系数,三个float型变量保存各向同性变换矩阵的三个特征值,一个DataLink*型指针用于指向后续结点。
4)读取模型文件长度,根据该模型文件信息块的前4个Byte,保存成为一个int型变量。根据该长度指示的Byte数来读取文件名称。
5)读取傅立叶描述子系数。此为一个7×375的二维float型数组。
6)读取9个(3×3)各向同性变换矩阵系数,并计算3个各向同性矩阵的特征值。
步骤218,根据读取的模型文件信息,计算与输入模型特征树的偏差值。本实施例中,以输入三维模型特征二叉树为例进行说明。三维模型特征二叉树从根结点到叶子结点,分别代表了两个三维模型从整体到局部的相似性匹配程度。三维模型特征二叉树的SFD偏差距离计算公式分别如下:
其中,dist1表示球面投影图像的SFD偏差距离,dist2表示球面相交图像的SFD偏差距离。SFD1和SFD2分别表示选择的模型和数据存储单元154中模型的SFD,计算这两者间的偏差距离就可以得出二者间相似程度。i和j是循环变量,取值范围分别是0..M-1和0..N-1。M和N分别表示球面划分的经纬网格数。
步骤220,计算模型结构树的相似度。本实施例中,以计算三维模型特征二叉树的相似度为例进行说明。三维模型特征二叉树的相似程度体现了两个三维模型的相似程度,两种图像处理方式的三维模型二叉树相似度计算公式如下:
其中,comp1表示球面权值投影的三维模型相似度,comp2表示球面相交的三维模型相似度。disti,j是三维模型特征二叉树第i层第j个对应结点的偏差。相似度越小,三维模型的相似性越差,反之,相似度越大,三维模型的相似度越好。
上述两种图像处理方式计算得到的球面权值投影的三维模型相似度comp1,和球面相交的三维模型相似度comp2可以根据需要设置不同的权值。一般根据试验经验进行设置。
若在注重模型外观相似的检索装置中,comp1和comp2的权值可以分别设置为3/4和1/4。则相似度计算公式如下:
其中,comp表示加权后两种三维模型的相似度。
若在拓扑结构,尤其是空洞模型的检索时,如机械模型的检索,根据试验经验comp1和comp2的权值可以分别设置为1/4和3/4。则加权后的相似度计算公式如下:
其中,comp表示加权后两种三维模型的相似度。
若检索的模型结构比较复杂,类型比较多,根据试验经验,comp1和comp2的权值可以设置为1/2。则加权后的相似度计算公式如下:
其中,comp表示加权后两种三维模型的相似度。
步骤222,对上述计算的各模型相似度进行排序,所述排序为从相似度大到相似度小的排序。所述排序可以根据哈希排序、快速排序、归并排序、堆排序和冒泡排序等方法进行排序。
步骤224,判断检索结果是否正确。若用户指定的模型是模型数据存储单元154中包含模型中的其中一个,则返回的第一个结果应是该模型自身,因为该模型与其自身相似度最大(为1)。若满足该条件,并且返回的模型数量大于用户指定的模型数量,则检索结果正确。若用户指定的模型不在模型数据存储单元154中,则只需判断返回模型个数是否符合要求来进行判断。
步骤226,显示检索结果。本实施例中,设置检索结果一次显示20个检索到的模型,并且根据相似度从大到小的顺序进行排列显示。同时,可以将检索到的模型文件名保存在一个文本文件中。
若检索二维模型或三维以上的模型,检索原理与本发明实施例相同,改变参数即可,不再赘述。
上述模型检索方法根据所述模型的参数对所述模型进行描述,并且通过对模型进行同心构造。不但可以描述图像的轮廓也可以描述图形的空洞部分,可以检索特殊结果的图像,对图像描述比较细致,本发明实施例适用范围较现有技术广泛。同时,由于可以接收特殊图像的模型信息及检索包括空洞的图像,本发明实施例的鲁棒性较佳。另外,通过对细化模型进行描述,本发明实施例对模型的描述比较细致,可以描述图像的内部空洞,不但可以检索模型的整体图像也可以检索模型的局部图像。通过对所述模型进行预处理,通过对所述模型进行三角片采样,通过对所述模型的坐标系统一。可以描述模型的一致性,使得模型有相同的摆放方式,使得模型的摆放方式不影响检索结果。通过计算两种模型的偏差程度,通过对上述两种模型的相似度进行计算,避免了检索出不必要的模型,节约了系统的资源。通过对所述相似度进行排序,使得相似度比较高的模型排列到明显的位置,节约检索的时间和人力。通过对所述检索结果是否正确进行判断,使得检索者可以清楚本次检索结果是否正确,减少了出错的几率。通过显示所述检索结果,使得检索者可以浏览其检索结果。通过对模型投影和模型相交两种方式计算的相似度进行加权,提高了检索的精确度和鲁棒性,并且可以进行模型的局部检索,扩展了应用范围。
综上所述,以上仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。