三维网格模型的一维化无损几何压缩方法转让专利

申请号 : CN200810012888.5

文献号 : CN101354788B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 刘勇奎何丽君王鹏杰博鲁特·扎利克

申请人 : 大连民族学院

摘要 :

本发明属于计算机图形处理领域。三维网格模型的一维化无损几何压缩方法,首先数据处理模块将三维坐标数据转化为一维的位置编号,然后对所有位置编号进行排序,对相邻的位置求差值,并将第一个位置编号,以及其位置编号与相邻上一个位置编号的差值存储于存储模块中,并将处理后的数据用算术编码进行压缩。本发明提出了一个全新的几何数据压缩方法,将所有的这些点的位置进行统一编号。三维空间中的每一个点位置都对应了一个唯一的编号;经过排序后压缩点表中顶点的顺序与原表中顶点的顺序是不同的,但顶点顺序的变化并不能改变一个物体模型。实验结果表明,本发明方法具有较高的压缩效率。

权利要求 :

1.三维网格模型的一维化无损几何压缩方法,其特征是:首先数据处理模块将三维坐标数据转化为一维的位置编号,对所有点的位置进行统一编号:编号分别是对x坐标,y坐标,z坐标进行编号,三维空间中的每一个点位置都对应了一个唯一的编号s;该编号s与对应的点位置的坐标值的换算关系如下:s=(z×N2+y×N+x)×10d              (1)

其中N是坐标值的可取值数量,对于单精度浮点数为16777216;d是坐标值的小数点后的最大位数,对于单精度浮点数为7位;然后对所有位置编号进行排序,对相邻的位置求差值,并将第一个位置编号、以及其位置编号与相邻上一个位置编号的差值存储于存储模块中,并将处理后的数据用算术编码进行压缩。

2.根据权利要求1所述的三维网络模型的一维化无损几何压缩方法,其特征是:数据处理模块将三维坐标数据转化为一维的位置编号前对数据进行预处理,预处理方法为:假设要用整数表示[a,b]之间的浮点数,所有浮点数最多精确到10-i,对[a,b]之间的任意浮点数c,则c用整数(c-a)×10i来表示,量化过程中,浮点数的取值范围b-a很大,同时浮点数的最小精度10-i很小,则32位整数无法表示(b-a)×10i,不能直接将浮点数无损量化为整数,对所有顶点坐标作变换,将网格模型的坐标值范围缩小,变换方法是将浮点数的指数减去整个网格在x,y,z轴上的最小指数e1,e2,e3,然后与尾数求和,网格模型的取值范围大大变小,浮点坐标精确量化为32位整数,对某点(x,y,z),经过以上变换后的点记做(x’,y’,z’)。

3.根据权利要求1或2所述的三维网络模型的一维化无损几何压缩方法,其特征是:所有表示顶点的位置编号按升序排序,将每个顶点的位置编号减去其上一个顶点的位置编号的差存入存储模块点表中,形成压缩点表,压缩点表的解压缩:只须从第一个顶点的位置编号依次加上其后的差值即可得到其它的位置编号,然后进行(1)式的相反变换,即用下式进行从位置编号s变换到顶点的三维坐标x,y和z的计算:z=(s\N2)/10d

y=((s-z×N2)|N)/10d

x=(s%N)/10d,

其中\表示整除,%表示求余数。

说明书 :

技术领域

本发明属于计算机图形处理领域,特别是图形学中模型的压缩方法。

背景技术

三角形网格是三维模型数据最流行的表示方式。原因是三角形网格在形式上的简单性使其能很快的被渲染,从而有效的推动了相应的渲染硬件的发展。另外,三维网格的表示方式是对三维模型数据的最普遍的主流表示方式,因为几乎所有模型的表示方式(样条、隐函数、体素)都可以转换为三角网格的形式,表示一个物体的网格模型至少需要点表和面表两个数据表。点表用于存储网格模型的所有顶点,每个顶点用3个单元存储其x,y和z三个坐标值,如图1所示。所以,在医疗、科学计算、CAD等领域,三角网格模型是最普通的表示方式。典型的三角网格模型通常包括三部分数据:描述网格的拓扑连接关系的数据;描述单个点的几何数据;纹理和材质等属性数据。
随着相关技术的飞速发展,现在的三维数字摄像和扫描系统能够得到现实三维物体的复杂数据,从而产生了海量的三维几何数据。怎么管理和操纵这么庞大的三维多边形网格数据成为一个大的问题。有很多研究工作试图来解决这个问题。在网格简化,多层次细节模型和渐进网格方面研究人员均做了大量的工作。同时,在网格压缩方面也做了很多工作,在对拓扑连接关系的压缩,几何数据和属性的压缩方面均有很多成果。
拓扑压缩几乎都是无损压缩,但大部分几何压缩都是有损压缩,目前一些科学和工程应用中,需要对大模型进行无损压缩,而现有的对几何数据的压缩算法中,绝大部分是有损压缩。无法满足对海量模型数据的几何数据部分的无损压缩需求,从而影响了图形学中模型的压缩处理效果。

发明内容

本发明的目的是克服上述不足问题,提供一种三维网格模型的一维化无损几何压缩方法,保证几何数据无损的情况下取得较高的数据压缩效果,压缩效果好,解压缩效率高。
本发明为实现上述目的所采用的技术方案是:三维网格模型的一维化无损几何压缩方法,首先数据处理模块将三维坐标数据转化为一维的位置编号,然后对所有位置编号进行排序,对相邻的位置求差值,并将第一个位置编号,以及其位置编号与相邻上一个位置编号的差值存储于存储模块中,并将处理后的数据用算术编码进行压缩。
所述对所有点的位置进行统一编号:编号分别是对x坐标,y坐标,z坐标进行编号,三维空间中的每一个点位置都对应了一个唯一的编号;该编号s与对应的点位置的坐标值的换算关系如下:
s=(z×N2+y×N+x)×10d    (1)
其中N是坐标值的可取值数量(对于单精度浮点数为16777216);d是坐标值的小数点后的最大位数(对于单精度浮点数为7位)。
所述数据处理模块将三维坐标数据转化为一维的位置编号前对数据进行预处理,预处理方法为:假设要用整数表示[a,b]之间的浮点数,所有浮点数最多精确到10-i,对[a,b]之间的任意浮点数c,则c用整数(c-a)×10i来表示,量化过程中,浮点数的取值范围(即b-a)很大,同时浮点数的最小精度(即10-i)很小,则32位整数无法表示(b-a)×10i,不能直接将浮点数无损量化为整数,对所有顶点坐标作变换,将网格模型的坐标值范围缩小,变换方法是将浮点数(不考虑符号)的指数(包括指数符号)减去整个网格在x,y,z轴上的最小指数e1,e2,e3,然后与尾数求和,网格模型的取值范围大大变小,浮点坐标精确量化为32位整数,对某点(x,y,z),经过以上变换后的点记做(x’,y’,z’)。
所述压缩点表的解压缩:只须从第一个顶点的位置编号依次加上其后的差值即可得到其它的位置编号,然后进行(1)式的相反变换,即用下式进行从位置编号s变换到顶点的三维坐标x,y和z的计算:
z=(s|N2)/10d
y=((s-z×N2)|N)/10d
x=(s%N)/10d,
其中\表示整除,%表示求余数。
本发明将所有的这些点的位置进行统一编号。编号的顺序是先对x坐标,然后是对y坐标,最后是对z坐标。当然也可以相反的顺序。这样,三维空间中的每一个点位置都对应了一个唯一的编号;相反,每一个编号也唯一指定了一个点位置。由于计算机存放一个数值的单元的长度是有限的,所以它所能存储的数值是离散的。对于表示三维空间中物体的网格模型的情况,网格模型的顶点位置也是离散的。我们以常用的浮点数表示网格模型为例,由IEEE754标准定义的单精度浮点数可表示16777216个有效数值。在三维空间中,每一个顶点由x,y,z三个坐标值表示,那么由浮点数坐标表示的三维空间就有167772163个固定的点的位置可供选择。上述的三维坐标的一维化处理为三维网格模型中几何压缩提供了可能。
本发明提出了一个全新的几何数据压缩方法,经过排序后压缩点表中顶点的顺序与原表中顶点的顺序是不同的。我们知道,顶点顺序的变化并不能改变一个物体模型。只有顶点位置的变化或拓扑结构的变化才可能改变物体模型。所以我们将排序后点表的顺序作为我们原始模型的顺序。压缩点表在解压缩之后就是以这样的顺序存放的。还对存储拓扑数据的面表的组织提出了修改方法,进一步提高了压缩效率,实验结果表明,本发明方法具有较高的压缩效率。
附图说明:
图1为传统的点表图。
图2为本发明压缩点表图。
图3为本发明浮点数量化为整数示意图。
图4为本发明缩小模型坐标取值范围示意图。
图5为本发明压缩流图。
图6为本发明解压缩流程图。
具体实施方式:
下面结合具体实施例对本发明作进一步详细说明,但本发明不限于具体实施例。
实施例1
利用本发明处理方法对三角网格模型几何坐标数据进行压缩
具体压缩流程如图5所示,首先将图1中的点表中每个顶点的三维坐标转换成其对应的一维位置编号。编号分别是对x坐标,y坐标,z坐标进行编号,三维空间中的每一个点位置都对应了一个唯一的编号;该编号s与对应的点位置的坐标值的换算关系如下:
s=(z×N2+y×N+x)×10d    (1)
其中N是坐标值的可取值数量(对于单精度浮点数为16777216);d是坐标值的小数点后的最大位数(对于单精度浮点数为7位)。
然后对这些表示顶点的位置编号按升序排序。最后,将每个顶点的位置编号减去其上一个顶点的位置编号的差存入点表中(第1个顶点除外,它存放其位置编号),形成压缩点表,如图2所示。
由于压缩点表中存放的是排序后的相邻位置编号的差值,所以一般来说会很小。这样,大部分顶点用少于3个的单元便可存放。图1传统点表和图2压缩点表中所示的单元是等长度的。例如,如果传统点表用的数据类型是单精度浮点数,那么压缩点表就用双精度整型数,长度均为32位二进制数。
由于对三维坐标转换成的一维化位置编号是很大的(仍需要三个单元的长度才能存放),所以理论上说压缩点表中存放的一些差值仍有可能需要三个单元。但是,绝大多数的差值只用1个单元便可存放;有极少部分差值用2个单元;而用3个单元才能存放的差值几乎没有。
压缩点表的解压缩也是很简单的,如图6所示,只须从第一个顶点的位置编号依次加上其后的差值即可得到其它的位置编号。然后进行(1)式的相反变换,即用下式进行从位置编号s变换到顶点的三维坐标x,y和z的计算。
z=(s|N2)/10d
y=((s-z×N2|N)/10d
x=(s%N)/10d,
其中\表示整除,%表示求余数。
需要指出的是,任何解压缩过程都需要一些计算时间作为代价,但是上述的压缩点表的解压缩过程可以使这一时间代价降低。当我们在网上传送该压缩点表到接收端时,在接收端可以一边接收一边解压缩(即收到一个数据包,解压缩一个数据包),因为该解压缩过程只需要其前一个位置编号,而不需要整体的全部数据。
实施例2
按本发明处理方法对带数据预处理的改进算法:以下过程只以x为例,y和z类似;
首先为了便于后面的压缩,先对顶点坐标进行预处理,将三维浮点坐标无损量化为整数。预处理量化过程如下:对某点(x,y,z),经过以上变换后的点记做(x’,y’,z’),x表示成a×10p,其中a∈[0.1,1),p为指数。然后遍历所有数据,分别找出x、y和z坐标中最小的指数,记为e1、e2和e3。
令x’=p-e1+a,以后我们遇到的浮点数都是这种经过处理后的数(包括下面的X’max等)这样处理能使模型坐标数据在x轴上的取值范围大大变小。
遍历变换后的顶点,获得整个网格在x,y,z轴上的范围,也就是获得平行于坐标轴且包含整个网格的最小长方体。因为我们已知网格在各个坐标轴上的范围,所以可以用上述量化方法使用整数来表示某个坐标,同时可以计算出整数相应的范围。
然后对预处理后数据进行一维化处理:
经过预处理后的s值的范围大大缩小,如下:
s=(z’-Z’min)(ΔxΔy+1)+(y’-Y’min)(Δx+1)+(x’-X’min)    (3)
其中:
Δx=(X’max-X’min)10d
Δy=(Y’max-Y’min)10d
d是所有坐标数据中,表示成步骤A的形式后,小数点后最多的位数。
同样将s排序,相减处理,具体过程如下:对这些表示顶点的位置编号s进行按升序排序,在对所有s的排完序的数据进行存储的时候,采取差值预测的方式:第一个s值存原值,第二个s值减去第一个s值的差值存储,依次类推。如下:
1:s1
2:Δ2=s2-s1
3:Δ3=s3-s2
·      ·
·      ·
m:Δm=sm-sm-1
形成压缩点表,如图2所示。将步骤D处理后的数据运用一阶自适应上下文算术编码进行压缩编码。
解压缩的过程是压缩过程的逆过程,如图6所示,对数据运用一阶自适应上下文算术编码进行解码,解码后的数据情况为:
1:s1
2:Δ2=s2-s1
3:Δ3=s3-s2
·      ·
·      ·
m:Δm=sm-sm-1
第一行保持原值,为s1的值;将第二行数据与s1相加得s2的值;将第三行数据与s2相加得s3得值;依此类推。
z’=s\(ΔxΔy+1)+Z’min
y’=(s%((ΔxΔy+1))\(Δx+1)+Y’min
x’=(s%((ΔxΔy+1))%(Δx+1)+X’min
其中|表示整除,%表示求余数。Δx,Δy的定义同上。先对x’取整,取整后的整数部分赋给x1,而x2是小数部分。那么,执行预处理的逆变化,原值x=0.x2×10x1+e1。
采用VC6.0在Intel 2.53GHz微机上实现了点表和面表的压缩算法,并选取了8个常用的模型做实验,分别是:猫、茶壶、牛、飞机、汽车、龙、兔子和佛像。各模型的压缩比如表1所示。可计算出,8个模型的点表平均压缩比为0.561;面表平均压缩比为0.396;平均总压缩比为0.452。
表1实际模型的压缩空间比较
Table 2.The space taken and the ratios of compression of real models
  模型1  (猫)   模型2  (茶壶)   模型3  (牛)   模型4  (飞机)   模型5  (汽车)   模型6  (龙)   模型7  (兔子)   模型8  (佛像)   顶点  数   352   1177   2904   3218   5247   25418   34834   543644   面表  中的  面数   671   2256   5804   6448   10474   50761   69451   1085634   初始  点表  (KB)   4.129   13.797   34.035   37.715   61.492   297.871   408.215   6370.832   压缩  点表  (KB)   1.414   9.113   17.469   27.750   30.844   197.055   262.805   2680.977   点表  压缩  比   0.342   0.661   0.513   0.736   0.502   0.662   0.644   0.421   初始  面表  (KB)   7.867   26.441   68.020   75.566   122.746   594.859   813.883   12722.277   压缩  面表  (KB)   3.152   9.602   26.590   29.504   48.852   251.375   322.344   5209.176   面表  压缩  比   0.401   0.363   0.391   0.390   0.398   0.423   0.396   0.409   初始  空间  (KB)   11.996   40.238   102.055   113.281   184.238   892.730   1222.098   19093.109
  模型1  (猫)   模型2  (茶壶)   模型3  (牛)   模型4  (飞机)   模型5  (汽车)   模型6  (龙)   模型7  (兔子)   模型8  (佛像)   压缩  空间  (KB)   4.566   18.715   44.059   57.254   79.695   448.430   585.148   7890.152   总压  缩比   0.381   0.465   0.432   0.505   0.433   0.502   0.479   0.413
表1的结果显示,本压缩算法的效果与模型的顶点及三角面片数无关。点表的压缩比在0.348至0.736之间。这与顶点的位置编号差Δi所占一个单元以上的比例有关,最好的情况(0.348)几乎每个Δi都占一个单元。面表的压缩效果则比较一致,压缩比在0.363至0.423之间。这是因为在压缩面表中,除每个面表段的头节点面之外的每个面只占一个单元。因此,面表压缩比的略有不同只取决于压缩面表段的多少。
由于我们的方法是无损压缩方法。压缩前后的模型并没有变化,所以本文没有给出模型显示的图形。
下面分析压缩和解压缩过程的时间复杂度。点表压缩过程中,主要的计算量是对位置编号的排序,因此,其时间复杂度是O(NlogN)。每个点的计算量为最多8次乘除法(包括求余)和3次加减法运算。点表的解压缩过程只需一次遍历点表即可完成,因此其时间复杂度是O(N)。
面表压缩过程中需要为每个面片找出相邻面片,所以对于每个面片需要对面表遍历一次,因此其时间复杂度是O(N2)。解压缩过程只需一次遍历面表即可完成,因此其时间复杂度是O(N)。
一种压缩方法的时间因素主要取决于解压缩的时间。从上述分析可以看出,解压缩所需时间复杂度较小,因此压缩时间较短。表2给出了各模型未经压缩的显示时间和经解压缩显示的时间。可以看出,两个时间相差不大。
表2各模型压缩时间和解压时间比较(秒)
  模型1  (猫)   模型2  (茶壶)   模型3  (牛)   模型4  (飞机)   模型5  (汽车)   模型6  (龙)   模型7  (兔子)   模型8  (佛像)   压缩时间   0.000   0.000   0.016   0.016   0.018   0.031   0.031   1.156   解压时间   0.000   0.000   0.000   0.000   0.000   0.000   0.016   0.359
本发明方法的具体实现时,还可以使用一些具体的细节技术以提高压缩率。例如为了减小位置编号,三维坐标的一维化过程也可以只在物体模型的最小包围盒中进行。另外,对于三个坐标值数据的有效数位不同的模型,可根据有效数位的多少对各个坐标轴采取不同的划分尺度。