CN103440678B - 一种三维体数据可视化方法及装置 - Google Patents
一种三维体数据可视化方法及装置 Download PDFInfo
- Publication number
- CN103440678B CN103440678B CN201310432189.7A CN201310432189A CN103440678B CN 103440678 B CN103440678 B CN 103440678B CN 201310432189 A CN201310432189 A CN 201310432189A CN 103440678 B CN103440678 B CN 103440678B
- Authority
- CN
- China
- Prior art keywords
- loading area
- block
- viewdata
- driver
- comes
- 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.)
- Active
Links
Landscapes
- Processing Or Creating Images (AREA)
Abstract
本申请提供了一种三维体数据可视化方法和装置。其中一种三维体数据可视化方法,包括:获取用户输入的三维体数据的加载信息,生成对应的加载区域;确定加载区域的显示分辨率以及显示分辨率下需要加载到加载区域的数据块;对加载区域进行裁剪,得到加载区域包括的所有可视数据块;依据视景体和显示分辨率,分别计算每个可视数据块在显示屏幕的空间位置;在每个可视数据块的空间位置加载对应的可视数据块,从而在显示屏幕的空间位置加载全部的可视数据块后,在显示屏幕上展示一个三维图形,实现以三维图形方式展示三维体数据的部分区域。进一步,显示分辨率下加载到加载区域的数据量小于三维体数据的数据量,在后续加载过程中可以加快加载效率。
Description
技术领域
本申请涉及数据处理技术领域,特别涉及一种三维体数据可视化方法及装置。
背景技术
三维体数据是一个三维均匀分布的数据集合,即由三维网格组成的结构化数据集合。体绘制是针对三维体数据进行绘制与显示的三维图形应用技术,是科学计算可视化和计算机图形学的一个重要的研究领域,对于由各种类型的三维设备、科学仿真等产生的体数据集的可视化是一种非常重要的技术。
其中三维体数据中的最小元素称为体素。通常情况下,这些三维体数据可以分别表示不同数据源的各种属性,如可以用三维体数据表示医学扫描和地震数据采集的各种属性。
基于此本申请提供了一种三维体数据可视化方法及装置,用以将三维体数据的某部分区域以三维图形方式进行展示。
发明内容
本申请所要解决的技术问题是提供一种三维体数据可视化方法和装置,用以将三维体数据的某部分区域以三维图形方式进行展示。技术方案如下:
一方面,本申请实施例提供一种三维体数据可视化方法,包括:
获取用户输入的三维体数据的加载信息,生成所述加载信息对应的加载区域;
确定所述加载区域的显示分辨率以及所述显示分辨率下需要加载到所述加载区域的数据块,其中所述数据块是对所述三维体数据进行均分采样后得到的具有所述显示分辨率且具有相同体素的数据块;
对所述加载区域进行裁剪,得到所述加载区域包括的所有可视数据块,其中所述可视数据块是加载到加载区域的数据块中在视景体内可见的数据块;
依据所述视景体和所述显示分辨率,分别计算每个所述可视数据块在显示屏幕的空间位置;
在每个所述可视数据块的空间位置加载对应的所述可视数据块。
优选地,确定所述加载区域的显示分辨率包括:
获取所述加载区域的最外层在视图区域的投影区域,其中所述视图区域是显示屏幕内可供图形显示的最大范围;
计算所述投影区域和所述视图区域的比值;
依据公式D=R×(L-1)得到所述加载区域的显示分辨率,其中L为分辨率的级数,R为比值,且当R大于1时将其设置为1。
优选地,对所述加载区域进行裁剪,得到所述加载区域包括的所有可视数据块,包括:
将所述加载区域的每个数据块的八个顶点的坐标和所述视景体的坐标进行对比;
如果所述数据块的至少一个顶点的坐标包括在所述视景体的坐标内,则将所述数据块作为所述可视区域的可视数据块。
优选地,依据所述视景体和所述显示分辨率,分别计算每个所述可视数据块的空间位置,包括:
依据所述视景体的坐标系和所述加载区域的坐标系,对所述可视数据块的坐标进行转换,得到基于所述视景体的坐标系的可视数据块的坐标;
依据所述显示分辨率,将所述基于所述视景体的坐标系的可视数据块的坐标转换为所述可视数据块在显示屏幕中的空间位置;
在每个所述可视数据块的空间位置加载对应的所述可视数据块,包括:获取各个所述可视数据块的景深;依据景深由远及近的顺序,依次在所述可视数据块的空间位置上加载对应的所述可视数据块。
优选地,获取用户输入的三维体数据的加载信息,生成所述加载信息对应的加载区域,包括:
获取用户输入的三维实体数据的加载区域信息以及逻辑标志信息,其中所述加载区域信息是所述加载区域的大小信息,所述逻辑标志信息用于控制所述加载区域的形状;
依据所述加载区域信息和所述逻辑标志信息,生成所述加载区域。
另一方面,本申请实施例提供一种三维体数据可视化装置,包括:
生成单元,用于获取用户输入的三维体数据的加载信息,生成所述加载信息对应的加载区域;
确定单元,用于确定所述加载区域的显示分辨率以及所述显示分辨率下需要加载到所述加载区域的数据块,其中所述数据块是对所述三维体数据进行均分采样后得到的具有所述显示分辨率且具有相同体素的数据块;
裁剪单元,用于对所述加载区域进行裁剪,得到所述加载区域包括的所有可视数据块,其中所述可视数据块是加载到加载区域的数据块中在视景体内可见的数据块;
计算单元,用于依据所述视景体和所述显示分辨率,分别计算每个所述可视数据块在显示屏幕的空间位置;
加载单元,用于在每个所述可视数据块的空间位置加载对应的所述可视数据块。
优选地,所述确定单元包括:
获取子单元,用于获取所述加载区域的最外层在视图区域的投影区域,其中所述视图区域是显示屏幕内可供图形显示的最大范围;
第一计算子单元,用于计算所述投影区域和所述视图区域的比值;
第二计算子单元,用于依据公式D=R×(L-1)得到所述加载区域的显示分辨率,其中L为分辨率的级数,R为比值,且当R大于1时将其设置为1;
确定子单元,用于确定所述显示分辨率下需要加载到所述加载区域的数据块。
优选地,所述裁剪单元具体用于:将所述加载区域的每个数据块的八个顶点的坐标和所述视景体的坐标进行对比;如果所述数据块的至少一个顶点的坐标包括在所述视景体的坐标内,则将所述数据块作为所述可视区域的可视数据块。
优选地,所述计算单元具体用于:依据所述视景体的坐标系和所述加载区域的坐标系,对所述可视数据块的坐标进行转换,得到基于所述视景体的坐标系的可视数据块的坐标;依据所述显示分辨率,将所述基于所述视景体的坐标系的可视数据块的坐标转换为所述可视数据块在显示屏幕中的空间位置。
所述加载单元具体用于:获取各个所述可视数据块的景深;依据景深由远及近的顺序,依次在所述可视数据块的空间位置上加载对应的所述可视数据块。
优选地,所述生成单元具体用于:获取用户输入的三维实体数据的加载区域信息以及逻辑标志信息,依据所述加载区域信息和所述逻辑标志信息,生成所述加载区域,其中所述加载区域信息是所述加载区域的大小信息,所述逻辑标志信息用于控制所述加载区域的形状。
与现有技术相比,本申请包括以下优点:
本申请实施例提供的三维体数据可视化方法首先获取用户输入的三维体数据的加载信息,生成加载信息对应的加载区域;其次确定加载区域的显示分辨率以及该显示分辨率下需要加载到加载区域的数据块,对加载区域进行裁剪,得到其包括的视景体内可见的数据块作为可视数据块,然后依据视景体和显示分辨率,分别计算每个视景体的在显示屏幕的空间位置,在每个可视数据块的空间位置加载对应的可视数据块,从而在显示屏幕的空间位置加载全部的可视数据块后,在显示屏幕上展示一个三维图形,实现以三维图形方式展示三维体数据的部分区域。
进一步,显示分辨率下加载到加载区域的数据量小于三维体数据的数据量,在后续加载过程中可以加快加载效率。
附图说明
为了更清楚地说明本申请实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1是本申请提供的一种三维体数据可视化方法的一种流程图;
图2是本申请提供的一种八叉树的示意图;
图3是本申请提供的一种数据采集示意图;
图4是本申请提供的视景体示意图;
图5是本申请提供的一种加载区域的示意图;
图6是本申请提供的另一种加载区域的示意图;
图7是本申请提供的再一种加载区域的示意图;
图8是本申请提供的再一种加载区域的示意图;
图9是本申请提供的再一种加载区域的示意图;
图10(a)是本申请提供的再一种加载区域的示意图;
图10(b)是本申请提供的再一种加载区域的示意图;
图10(c)是本申请提供的再一种加载区域的示意图;
图10(d)是本申请提供的再一种加载区域的示意图;
图10(e)是本申请提供的再一种加载区域的示意图;
图10(f)是本申请提供的再一种加载区域的示意图;
图11是本申请提供的相机参数与视景体的对应关系示意图;
图12是本申请提供的一种三维体数据可视化装置的结构示意图;
图13是本申请提供的一种三维体数据可视化装置的子结构示意图。
具体实施方式
首先对本申请实施例提供的三维体数据可视化方法进行简单说明,可以包括:
获取用户输入的三维体数据的加载信息,生成所述加载信息对应的加载区域;
确定所述加载区域的显示分辨率以及所述显示分辨率下需要加载到所述加载区域的数据块,其中所述数据块是对所述三维体数据进行均分采样后得到的具有所述显示分辨率且具有相同体素的数据块;
对所述加载区域进行裁剪,得到所述加载区域包括的所有可视数据块,其中所述可视数据块是加载到加载区域的数据块中在视景体内可见的数据块;
依据所述视景体和所述显示分辨率,分别计算每个所述可视数据块在显示屏幕的空间位置;
在每个所述可视数据块的空间位置加载对应的所述可视数据块。
当显示屏幕的空间位置加载全部的可视数据块后,在显示屏幕上展示一个三维图形,实现以三维图形方式展示三维体数据的部分区域。进一步,显示分辨率下加载到加载区域的数据量小于三维体数据的数据量,在后续加载过程中可以加快加载效率。
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
请参阅图1,其示出了本申请实施例提供的一种三维体数据可视化方法的流程图,可以包括以下步骤:
步骤101:获取用户输入的三维体数据的加载信息,生成加载信息对应的加载区域。
可以理解的是:用户希望在电子设备的显示屏幕上以三维图形展示三维体数据的某部分区域时,则在电子设备内输入三维体数据的加载信息,该加载信息用于控制所要加载区域的大小和形状。其中加载信息可以包括:加载区域信息以及逻辑标志信息,其中加载区域信息是加载区域的大小信息,逻辑标志信息用于控制加载区域的形状。电子设备可以依据加载区域信息和逻辑标志信息,生成加载区域。
步骤102:确定加载区域的显示分辨率以及所述显示分辨率下所述加载区域包括的数据块。
其中,加载区域的显示分辨率是加载区域在显示屏幕中的分辨率,其可以通过视图区域与在视图区域内的投影所构成的区域确定。视图区域是显示屏幕内可供图形显示的最大范围。如果把图形显示过程看做是绘画,那么视图区域相当于绘画用的画布大小。在视图区域内的投影所构成的区域是加载区域在视图区域投影后得到的投影区域,该投影区域可以等于所述视图区域,也可以占视图区域的部分区域。
在本申请实施例中,加载区域在视图区域的投影区域是加载区域的最外层在视图区域的投影区域。确定加载区域的显示分辨率的过程可以是:
首先获取加载区域的最外层在视图区域的投影区域;其次计算投影区域和视图区域的比值,如D1是以像素为单位得到的投影区域面积,D2是以像素为单位得到的视图区域面积,计算D1与D2的比值作为投影区域和视图区域的比值R=D1/D2。然后依据公式D=R×(L-1)得到加载区域的显示分辨率,其中L为分辨率的级数,该分辨率的级数是设备能够提供显示的分辨率的最大等级数,当比值R大于1时将其设置为1,否则按照R的实际取值进行显示分辨率的计算。从显示分辨率的计算公式可以看出,随着比值R的增加,显示分辨率从0至L-1分辨率逐级增加,0级分辨率最低,L-1级分辨率最高。
本领域技术人员公知的,数据量越大其要求的显示分辨率越大,加载区域作为三维体数据的部分区域,其显示分辨率小于三维体数据的显示分辨率,因此在确定显示分辨率后,还需要进一步确定该显示分辨率下需要加载到加载区域的数据块。由于显示分辨率下加载到加载区域的数据量小于三维体数据的数据量,所以在后续加载过程中可以加快加载效率。
在本申请实施例中加载到加载区域的数据块是对三维体数据进行均分采样后得到的具有显示分辨率且具有相同体素的数据块。其过程可以是:先以预设体素对三维体数据进行均分,得到与三维体数据具有相同显示分辨率的数据块;然后再对这些数据块进行采样得到比三维体数据的显示分辨率低一级的显示分辨率下的数据块,……,依次类推,直至得到最低级的显示分辨率下的数据块。
以基于八叉树存储三维体数据为例,如图2所示以,八叉树结构对三维数据进行分块,分块得到的数据块作为八叉树的叶子节点中的数据,并存储到八叉树文件中。八叉树中同一层节点的数据块的分辨率相同,且上一层节点的数据块通过对下一层节点的数据块采样得到。
在图3中示出了如何从下一层节点的数据块采样得到上一层节点的数据块。需要注意的是:在进行采样时,需要从下一层节点中隶属于上一层节点的子节点的数据块中采样,所谓隶属是指上一层节点是下一层节点中八个节点的父节点,而这八个节点是该父节点的子节点。在图2所示的八叉树中,上下层节点的隶属关系采用箭头标注,如第二层节点的第一个节点,第三层节点中的第一至八个节点是隶属于该节点的子节点,第二层节点的第一个节点从这八个子节点中进行数据块采样,得到第二层第一个节点的数据块。
由于上一层节点是从隶属于其的下一层的八个节点中采样得到数据块,所以上一层节点的数据块的分辨率小于下一层节点的数据块的分辨率。并且最后一层所有节点的数据块包括全部三维数据。
步骤103:对加载区域进行裁剪,得到加载区域包括的所有可视数据块,其中可视数据块是加载到加载区域的数据块中在视景体内可见的数据块。
可以理解的是:可视区域是通过观察点可以查看到的区域,以相机作为观察器件为例进行说明,相机的光束汇聚点可以作为观察点,相机所汇聚的光束在空间形成一个以观察点为顶点的椎体,且该椎体被前裁剪平面和后裁剪平面裁剪,在前裁剪平面和后裁剪平面之间形成一个棱锥,该棱锥所在区域称为视景体,如图4所示。
其中,前裁剪平面称为投影平面,视景体内的观察对象都被投影到该投影平面上,因此,投影平面处于棱锥范围内的区域称为可见区域,即位于视景体内的观察对象全部可见;而投影平面处于棱锥范围以外的区域称为不可见区域,即位于视景体外的观察对象不可见。
当观察对象为加载区域包括的数据块时,完全位于视景体内部的数据块完全可见;部分位于视景体内部的数据块部分可见;其余数据块为完全不可见。对于完全可见和部分可见的数据块作为可视数据块载入内存,否则不载入内存。这样可进一步减少载入内存数据块块的数量,仅将可视区域内的数据块载入内存,降低不必要的数据块对内存的消耗。
确定数据块完全落到视景体内的判断标准是:数据块的八个顶点都在视景体六个面以内。确定数据块部分落到视景体内的判断标准是:数据块的至少有一个顶点在视景体六个面以内。确定数据块完全未落到视景体内的判断标准是:数据块的所有顶点全部在视景体六个面以外。
也就是说,确定数据块为可视数据块的判断标准是:数据块的至少一个顶点在视景体的六个面以内。确定数据块不是可视数据块的判断标准是:数据块的所有顶点全部在视景体六个面以外。在实际判断过程中可以通过坐标对比,过程如下:
将加载区域的每个数据块的八个顶点的坐标和视景体的坐标进行对比;如果所述数据块的至少一个顶点的坐标包括在视景体的坐标内,则将所述数据块作为所述可视区域的可视数据块。
其中顶点的坐标包括在视景体的坐标内满足条件:视景体由六个面包围而成,每个面通过面的法向量确定面的里侧和外侧。面的里侧是指处于视景体内部的一侧,面的外侧处于视景体外部的一侧。当顶点处于面法向量指向的那一侧(里侧)时,顶点坐标代入平面方程时其方程值为正,反之为负。据此,当顶点坐标代入六个平面方程皆为正时,则该顶点处于视景体内部;否则,该顶点处于视景体外部。
步骤104:依据视景体和显示分辨率,分别计算每个可视数据块在显示屏幕的空间位置。
具体过程可以是:依据视景体的坐标系和加载区域的坐标系,对可视数据块的坐标进行转换,得到基于视景体的坐标系的可视数据块的坐标;依据显示分辨率,将基于视景体的坐标系的可视数据块的坐标转换为可视数据块在显示屏幕中的空间位置。
步骤105:在每个可视数据块的空间位置加载对应的可视数据块。
可以理解的是:加载可视数据块时可以按照可视数据块的景深进行加载。如依据景深由远及近的顺序,依次在可视数据块的空间位置上加载对应的可视数据块,即按照每个可视数据块的景深,优先加载景深大即远处的可视数据块,然后再加载景深小即近处的可视数据块,以避免可视数据块的遮挡问题。
在本申请实施例中,可视数据块的景深按照由远及近顺序保存在子块链表中,该子块链表是一个维护加载的数据块信息的链表,在每次加载过程中都会根据加载区域裁剪和显示分辨率动态创建子块链表。并且子块链表并不存储实际的数据块,在加载完成后释放子块链表以达到节省加载所需内存的目的。在子块链表中记录的数据块信息可以包括:数据块的尺寸,数据块的景深以及数据块与子块链表的链表头之间的偏移量。
需要说明的一点是:在上述本申请实施例中,逻辑标志采用宏定义方式,如下所示:
ENABLE_X0=0x1,
ENABLE_Y0=0x2,
ENABLE_Z0=0x4,
INVERT_0=0x8,
ENABLE_X1=0x10,
ENABLE_Y1=0x20,
ENABLE_Z1=0x40,
INVERT_1=0x80,
ENABLE_X2=0x100,
ENABLE_Y2=0x200,
ENABLE_Z2=0x400,
INVERT_2=0x800,
OR_SELECT=0x1000,
INVERT_OUTPUT=0x2000,
SUB_VOLUME=ENABLE_X0|ENABLE_Y0|ENABLE_Z0,
EXCLUSION_BOX=SUB_VOLUME|INVERT_OUTPUT,
CROSS=ENABLE_X0|ENABLE_Y0|ENABLE_Y1|ENABLE_Z1|ENABLE_X2|ENABLE_Z2|OR_SELECT,
CROSS_INVERT=CROSS|INVERT_OUTPUT,
FENCE=ENABLE_X0|ENABLE_Y1|ENABLE_Z2|OR_SELECT,
FENCE_INVERT=FENCE|INVERT_OUTPUT。
其中,逻辑标志:ENABLE_X0、ENABLE_X1、ENABLE_X2用于表示加载区域的X轴方向的最小边界xmin和最大边界xmax是否有效,当X轴方向的最小边界xmin和最大边界xmax有效时,表示启用X轴方向,此时需要设置ENABLE_X0=0x1、ENABLE_X1=0x10、ENABLE_X2=0x100。当X轴方向的最小边界xmin和最大边界xmax有效时,表示禁用X轴方向,此时不需要设置ENABLE_X0、ENABLE_X1、ENABLE_X2。
逻辑标志:ENABLE_Y0、ENABLE_Y1、ENABLE_Y2用于表示加载区域的Y轴方向的最小边界ymin和最大边界ymax是否有效,当Y轴方向的最小边界ymin和最大边界ymax有效时,表示启用Y轴方向,此时需要设置ENABLE_Y0=0x2、ENABLE_Y1=0x20、ENABLE_Y2=0x200。当Y轴方向的最小边界ymin和最大边界ymax有效时,表示禁用Y轴方向,此时不需要设置ENABLE_Y0、ENABLE_Y1、ENABLE_Y2。
逻辑标志:ENABLE_Z0、ENABLE_Z1、ENABLE_Z2用于表示加载区域的Z轴方向的最小边界zmin和最大边界zmax是否有效,当Z轴方向的最小边界zmin和最大边界zmax有效时,表示启用Z轴方向,此时需要设置ENABLE_Z0=0x4、ENABLE_Z1=0x40、ENABLE_Z2=0x400。当Z轴方向的最小边界zmin和最大边界zmax有效时,表示禁用Z轴方向,此时不需要设置ENABLE_Z0、ENABLE_Z1、ENABLE_Z2。
通过逻辑标志:ENABLE_X0=0x1,ENABLE_Y0=0x2,ENABLE_Z0=0x4,ENABLE_X1=0x10,ENABLE_Y1=0x20,ENABLE_Z1=0x40,ENABLE_X2=0x100,ENABLE_Y2=0x200,ENABLE_Z2=0x400定义X、Y、Z三个轴方向的最大和最小边界定义出加载区域的裁剪框。
逻辑标志:INVERT_0、INVERT_1、INVERT_2表示对是否对ENABLE_X0,ENABLE_Y0,ENABLE_Z0,ENABLE_X1,ENABLE_Y1,ENABLE_Z1,ENABLE_X2,ENABLE_Y2和ENABLE_Z2取反,如果设置INVERT_0=0x8、INVERT_1=0x80、INVERT_2=0x800则需要取反,否则不取反。
逻辑标志:OR_SELECT表示对ENABLE_X0,ENABLE_Y0,ENABLE_Z0,ENABLE_X1,ENABLE_Y1,ENABLE_Z1,ENABLE_X2,ENABLE_Y2和ENABLE_Z2进行求交还是求并运算。当设置OR_SELECT=0x1000,进行求并运算;当不设置OR_SELECT,进行求交运算。
逻辑标志:INVERT_OUTPUT表示对ENABLE_X0,ENABLE_Y0,ENABLE_Z0,ENABLE_X1,ENABLE_Y1,ENABLE_Z1,ENABLE_X2,ENABLE_Y2和ENABLE_Z2是否进行反转。当设置INVERT_OUTPUT=0x2000,进行反转。当不设置INVERT_OUTPUT,不进行反转。
当加载区域信息确定加载区域的X、Y和Z三个轴方向的最大和最小边界,来定义加载区域的裁剪框:xmin和xmax确定X轴方向的最小和最大边界;ymin和ymax确定Y轴方向的最小和最大边界;zmin和zmax确定z轴方向的最小和最大边界。
这三个方向的最大和最小边界给定后,加载区域分如下四个阶段生成:
步骤1:相对X轴方向、Y轴方向和Z轴方向,采用启用或禁用的方式进行设置。每个轴方向都有其自身的逻辑标志:启用或禁用。每一个轴方向的启用或禁用设置都独立于其他两个方向,包括:
启用X轴方向:xmin和xmax确定的X轴方向的最小和最大边界起作用,该逻辑标志通过设置ENABLE_X0、ENABLE_X1、ENABLE_X2完成。
禁用X轴方向:xmin和xmax确定的X轴方向的最小和最大边界不起作用,该逻辑标志通过不设置ENABLE_X0、ENABLE_X1、ENABLE_X2完成。
启用Y轴方向:ymin和ymax确定的Y轴方向的最小和最大边界起作用,该逻辑标志通过设置ENABLE_Y0、ENABLE_Y1、ENABLE_Y2完成。
禁用Y轴方向:ymin和ymax确定的Y轴方向的最小和最大边界不起作用,该逻辑标志通过不设置ENABLE_Y0、ENABLE_Y1、ENABLE_Y2完成。
启用Z轴方向:zmin和zmax确定的Z轴方向的最小和最大边界起作用,该逻辑标志通过设置ENABLE_Z0、ENABLE_Z1、ENABLE_Z2完成。
禁用Z轴方向:zmin和zmax确定的Z轴方向的最小和最大边界不起作用,该逻辑标志通过不设置ENABLE_Z0、ENABLE_Z1、ENABLE_Z2完成。
在步骤1用到的逻辑标志有:ENABLE_X0=0x1,ENABLE_Y0=0x2,ENABLE_Z0=0x4,ENABLE_X1=0x10,ENABLE_Y1=0x20,ENABLE_Z1=0x40,ENABLE_X2=0x100,ENABLE_Y2=0x200,ENABLE_Z2=0x400,表示启用X、Y和Z轴三个方向。
最小和最大边界设置分三次进行,第一次通过启用或禁用ENABLE_X0、ENABLE_Y0、ENABLE_Z0三个逻辑标志设置最小和最大边界,这三个逻辑标志称为第0项;第二次通过启用或禁用ENABLE_X1、ENABLE_Y1、ENABLE_Z1三个逻辑标志设置最小和最大边界,这三个逻辑标志称为第1项;第三次通过启用或禁用ENABLE_X2、ENABLE_Y2、ENABLE_Z2三个逻辑标志设置最小和最大边界,这三个逻辑标志称为第2项。
步骤2:确定是否反转在步骤1取得的值,取其像素的补集。每一项(第0项,第1项,第2项)都有其自身的反转标志(INVERT_0、INVERT_1、INVERT_2),且每一项的设置都独立于其他两项。当INVERT_0=0x8、INVERT_1=0x80、INVERT_2=0x800,表示反转步骤1中取得的值。
步骤3:对第0项,第1项和第2项进行求交或求并运算。运算使用逻辑标志位OR_SELECT加以指定。设置逻辑标志OR_SELECT=0x1000表明在步骤1设置的第0项,第1项和第2项三者之间将进行并运算;不设置逻辑标志OR_SELECT表明在步骤1设置的第0项,第1项和第2项三者之间将进行交运算。
步骤4:决定是否反转步骤3的结果,以生成最终的加载区域。使用逻辑标志INVERT_OUTPUT指定是否反转。若设置逻辑标志INVERT_OUTPUT=0x2000可对步骤3的结果求补集,将反转后的结构作为最终的加载区域。若不设置逻辑标志INVERT_OUTPUT,则步骤3的结果将成为最终的加载区域。
下面结合具体设置与该设置对应的加载区域来详细阐述逻辑标志的作用,三维体数据(X,Y,Z)方向的大小为300x400x300,加载区域信息中(X,Y,Z)三个方向的最小最大边界值(xmin,ymin,zmin,xmax,ymax,zmax)设为(100,100,100,200,200,200)。
下面的代码给出了通过设置第0项的ENABLE_X0和ENABLE_Z0形成的加载区域,图5所示灰色区域为加载区域。代码如下:
xmin=100;xmax=200;
ymin=100;ymax=200;
zmin=100;zmax=200;
myROI->box.setValue(xmin,ymin,zmin,xmax,ymax,zmax);
myROI->flags.setValue(ENABLE_X0|ENABLE_Z0),其表示启用ENABLE_X0和ENABLE_Z0,加载的体数据是100x400x100。
下面的代码给出了通过设置第1项的ENABLE_Y1形成的加载区域,加载区域如图6所示灰色区域,代码如下:
xmin=100;xmax=200;
ymin=100;ymax=200;
zmin=100;zmax=200;
myROI->box.setValue(xmin,ymin,zmin,xmax,ymax,zmax);
myROI->flags.setValue(ENABLE_Y1),其表示启用ENABLE_Y1,加载的体数据是300x100x300。
下面的代码给出了在步骤3未设置OR_SELECT,获得第0项和第1项的交集,其求交结果对应的加载区域如图7所示灰色区域:
xmin=100;xmax=200;
ymin=100;ymax=200;
zmin=100;zmax=200;
myROI->box.setValue(xmin,ymin,zmin,xmax,ymax,zmax);
myROI->flags.setValue(ENABLE_X0|ENABLE_Z0|ENABLE_Y1),加载的体数据是100x100x100。
下面的代码给出了在步骤3设置OR_SELECT,获得第0项和第1项的并集,步骤4的反转未被使用,求并结果对应的加载区域如图8所示灰色区域:
xmin=100;xmax=200;
ymin=100;ymax=200;
zmin=100;zmax=200;
myROI->box.setValue(xmin,ymin,zmin,xmax,ymax,zmax);
myROI->flags.setValue(ENABLE_X0|ENABLE_Z0|ENABLE_Y1|OR_SELECT),该加载区域所加载的体数据是100x400x100和300x100x300的并集。
下面的代码给出了在步骤3设置OR_SELECT,获得第0项和第1项的并集,并使用了步骤4的反转,产生的加载区域如图9所示灰色区域:
xmin=100;xmax=200;
ymin=100;ymax=200;
zmin=100;zmax=200;
myROI->box.setValue(xmin,ymin,zmin,xmax,ymax,zmax);
myROI->flags.setValue(ENABLE_X0|ENABLE_Z0|ENABLE_Y1|OR_SELECT|INVERT_OUTPUT),该加载区域加载的体数据是三维数据中除100x400x100和300x100x300的并集之外的体数据。
其他几种预定义的逻辑标志对应的加载区域如图10(a)至10(f)所示,这些加载区域代表了一些特定形状的几何形体,其代码如下包括:
SUB_VOLUME=ENABLE_X0|ENABLE_Y0|ENABLE_Z0,其对应如图10(a)所示加载区域。
EXCLUSION_BOX=SUB_VOLUME|INVERT_OUTPUT,其对应如图10(b)所示加载区域。
CROSS=ENABLE_X0|ENABLE_Y0|ENABLE_Y1|ENABLE_Z1|ENABLE_X2|ENABLE_Z2|OR_SELECT,其对应如图10(c)所示加载区域。
CROSS_INVERT=CROSS|INVERT_OUTPUT,其对应如图10(d)所示加载区域。
FENCE=ENABLE_X0|ENABLE_Y1|ENABLE_Z2|OR_SELECT,其对应如图10(e)所示加载区域。
FENCE_INVERT=FENCE|INVERT_OUTPUT,其对应如图10(f)所示加载区域。
还需要说明的一点是:在加载可视化数据以三维图形展示三维体数据的同时,还支持用户的旋转、缩放和拖拽操作,其中旋转是用户通过鼠标拖拽对三维体数据进行三维旋转;缩放是用户通过鼠标滚轮操作对三维体数据进行推进和拉远;拖拽是用户通过鼠标拖拽对三维体数据范围进行选择。
其中旋转和缩放这两种用户操作通过改变相机参数,进而相应地修改视景体参数,间接地影响三维体数据的位置和大小。场景相机参数和视景体参数基本一致,但这些参数被放置在相机和视景体两个单独的对象中,其共有的参数包括相机位置、观察方向、近裁剪面距离、远裁剪面距离、宽度角、高度角、宽高比x/y等,这些参数与视景体的关系如图11所示。视景体参数的改变,会使得显示分辨率和可视数据块发生更改,所以当确定用户对三维体数据进行旋转和缩放操作后,需要重新确定显示分辨率和可视数据块,即重新执行步骤102及其后续步骤。
而拖拽这种用户操作直接改变加载区域的最外层,即使加载区域变化,此时同样使得显示分辨率和可视数据块发生更改,所以当确定用户对三维体数据进行拖拽操作后,需要重新确定显示分辨率和可视数据块,即重新执行步骤102及其后续步骤。
与上述方法实施例相对应,本申请实施例还提供一种三维体数据可视化装置,其结构示意图如图12所示,可以包括:生成单元11、确定单元12、裁剪单元13、计算单元14和加载单元15。其中,
生成单元11,用于获取用户输入的三维体数据的加载信息,生成加载信息对应的加载区域。
具体的,生成单元11获取用户输入的三维实体数据的加载区域信息以及逻辑标志信息,依据加载区域信息和逻辑标志信息,生成加载区域,其中加载区域信息是加载区域的大小信息,逻辑标志信息用于控制加载区域的形状。在本申请实施例中,生成单元11可以参见上述列举的加载区域生成代码以及相应的说明实现,对此本申请不再加以阐述。
确定单元12,用于确定加载区域的显示分辨率以及显示分辨率下需要加载到加载区域的数据块。
在本申请实施例中,确定单元12的结构示意图请参阅图13所示,可以包括:获取子单元121、第一计算子单元122、第二计算子单元123和确定子单元124。其中,
获取子单元121,用于获取加载区域的最外层在视图区域的投影区域,其中视图区域是显示屏幕内可供图形显示的最大范围。如果把图形显示过程看做是绘画,那么视图区域相当于绘画用的画布大小。在视图区域内的投影所构成的区域是加载区域在视图区域投影后得到的投影区域,该投影区域可以等于所述视图区域,也可以占视图区域的部分区域。
第一计算子单元122,用于计算投影区域和视图区域的比值。如D1是以像素为单位得到的投影区域面积,D2是以像素为单位得到的视图区域面积,计算D1与D2的比值作为投影区域和视图区域的比值R=D1/D2。
第二计算子单元123,用于依据公式D=R×(L-1)得到加载区域的显示分辨率,其中L为分辨率的级数,R为比值,且当R大于1时将其设置为1,否则按照R的实际取值进行显示分辨率的计算。从显示分辨率的计算公式可以看出,随着比值R的增加,显示分辨率从0至L-1分辨率逐级增加,0级分辨率最低,L-1级分辨率最高。
确定子单元124,用于确定显示分辨率下需要加载到加载区域的数据块。其中加载到加载区域的数据块是对三维体数据进行均分采样后得到的具有显示分辨率且具有相同体素的数据块。其过程可以是:先以预设体素对三维体数据进行均分,得到与三维体数据具有相同显示分辨率的数据块;然后再对这些数据块进行采样得到比三维体数据的显示分辨率低一级的显示分辨率下的数据块,……,依次类推,直至得到最低级的显示分辨率下的数据块,具体可参阅图2和图3的相关说明。
可以理解的是,数据量越大其对内存的需求量就越大,加载区域作为三维体数据的部分区域,其显示分辨率受加载区域在视图区域投影面积的影响,会小于三维体数据的显示分辨率,因此在确定显示分辨率后,还需要进一步确定该显示分辨率下需要加载到加载区域的数据块。由于在低显示分辨率下加载到加载区域的数据量小于三维体数据的数据量,所以在后续加载过程中可以加快加载效率。
裁剪单元13,用于对加载区域进行裁剪,得到加载区域包括的所有可视数据块,其中可视数据块是加载到加载区域的数据块中在视景体内可见的数据块。
具体的,裁剪单元13具体用于:将加载区域的每个数据块的八个顶点的坐标和视景体的坐标进行对比。如果数据块的至少一个顶点的坐标包括在视景体的坐标内,则将数据块作为可视区域的可视数据块。
其中顶点的坐标包括在视景体的坐标内满足条件:视景体由六个面包围而成,每个面通过面的法向量确定面的里侧和外侧。面的里侧是指处于视景体内部的一侧,面的外侧处于视景体外部的一侧。当顶点处于面法向量指向的那一侧(里侧)时,顶点坐标代入平面方程时其方程值为正,反之为负。据此,当顶点坐标代入六个平面方程皆为正时,则该顶点处于视景体内部;否则,该顶点处于视景体外部。
计算单元14,用于依据视景体和显示分辨率,分别计算每个可视数据块在显示屏幕的空间位置。
加载单元15,用于在每个可视数据块的空间位置加载对应的可视数据块。
在本申请实施例中,计算单元14具体用于:依据视景体的坐标系和加载区域的坐标系,对可视数据块的坐标进行转换,得到基于视景体的坐标系的可视数据块的坐标。依据显示分辨率,将基于视景体的坐标系的可视数据块的坐标转换为可视数据块在显示屏幕中的空间位置。
加载单元15具体用于:获取各个可视数据块的景深。依据景深由远及近的顺序,依次在可视数据块的空间位置上加载对应的可视数据块。即按照每个可视数据块的景深,优先加载景深大即远处的可视数据块,然后再加载景深小即近处的可视数据块,以避免可视数据块的遮挡问题。
在本申请实施例中,可视数据块的景深按照由远及近顺序保存在子块链表中,该子块链表是一个维护加载的数据块信息的链表,在每次加载过程中都会根据加载区域裁剪和显示分辨率动态创建子块链表。并且子块链表并不存储实际的数据块,在加载完成后释放子块链表以达到节省加载所需内存的目的。在子块链表中记录的数据块信息可以包括:数据块的尺寸,数据块的景深以及数据块与子块链表的链表头之间的偏移量。
需要说明的是,本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。对于系统类实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
最后,还需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
为了描述的方便,描述以上系统时以功能分为各种单元分别描述。当然,在实施本申请时可以把各单元的功能在同一个或多个软件和/或硬件中实现。
通过以上的实施方式的描述可知,本领域的技术人员可以清楚地了解到本申请可借助软件加必需的通用硬件平台的方式来实现。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例或者实施例的某些部分所述的方法。
以上对本申请所提供的一种三维体数据可视化方法及装置进行了详细介绍,本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的方法及其核心思想;同时,对于本领域的一般技术人员,依据本申请的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本申请的限制。
Claims (10)
1.一种三维体数据可视化方法,其特征在于,包括:
获取用户输入的三维体数据的加载信息,生成所述加载信息对应的加载区域;
确定所述加载区域的显示分辨率以及所述显示分辨率下需要加载到所述加载区域的数据块,其中所述数据块是对所述三维体数据进行均分采样后得到的具有所述显示分辨率且具有相同体素的数据块;
对所述加载区域进行裁剪,得到所述加载区域包括的所有可视数据块,其中所述可视数据块是加载到加载区域的数据块中在视景体内可见的数据块;
依据所述视景体和所述显示分辨率,分别计算每个所述可视数据块在显示屏幕的空间位置;
在每个所述可视数据块的空间位置加载对应的所述可视数据块。
2.根据权利要求1所述的方法,其特征在于,确定所述加载区域的显示分辨率包括:
获取所述加载区域的最外层在视图区域的投影区域,其中所述视图区域是显示屏幕内可供图形显示的最大范围;
计算所述投影区域和所述视图区域的比值;
依据公式D=R×(L-1)得到所述加载区域的显示分辨率,其中L为分辨率的级数,R为比值,且当R大于1时将其设置为1。
3.根据权利要求2所述的方法,其特征在于,对所述加载区域进行裁剪,得到所述加载区域包括的所有可视数据块,包括:
将所述加载区域的每个数据块的八个顶点的坐标和所述视景体的坐标进行对比;
如果所述数据块的至少一个顶点的坐标包括在所述视景体的坐标内,则将所述数据块作为可视区域的可视数据块。
4.根据权利要求3所述的方法,其特征在于,依据所述视景体和所述显示分辨率,分别计算每个所述可视数据块的空间位置,包括:
依据所述视景体的坐标系和所述加载区域的坐标系,对所述可视数据块的坐标进行转换,得到基于所述视景体的坐标系的可视数据块的坐标;
依据所述显示分辨率,将所述基于所述视景体的坐标系的可视数据块的坐标转换为所述可视数据块在显示屏幕中的空间位置;
在每个所述可视数据块的空间位置加载对应的所述可视数据块,包括:获取各个所述可视数据块的景深;依据景深由远及近的顺序,依次在所述可视数据块的空间位置上加载对应的所述可视数据块。
5.根据权利要求1至4任意一项所述的方法,其特征在于,获取用户输入的三维体数据的加载信息,生成所述加载信息对应的加载区域,包括:
获取用户输入的三维实体数据的加载区域信息以及逻辑标志信息,其中所述加载区域信息是所述加载区域的大小信息,所述逻辑标志信息用于控制所述加载区域的形状;
依据所述加载区域信息和所述逻辑标志信息,生成所述加载区域。
6.一种三维体数据可视化装置,其特征在于,包括:
生成单元,用于获取用户输入的三维体数据的加载信息,生成所述加载信息对应的加载区域;
确定单元,用于确定所述加载区域的显示分辨率以及所述显示分辨率下需要加载到所述加载区域的数据块,其中所述数据块是对所述三维体数据进行均分采样后得到的具有所述显示分辨率且具有相同体素的数据块;
裁剪单元,用于对所述加载区域进行裁剪,得到所述加载区域包括的所有可视数据块,其中所述可视数据块是加载到加载区域的数据块中在视景体内可见的数据块;
计算单元,用于依据所述视景体和所述显示分辨率,分别计算每个所述可视数据块在显示屏幕的空间位置;
加载单元,用于在每个所述可视数据块的空间位置加载对应的所述可视数据块。
7.根据权利要求6所述的装置,其特征在于,所述确定单元包括:
获取子单元,用于获取所述加载区域的最外层在视图区域的投影区域,其中所述视图区域是显示屏幕内可供图形显示的最大范围;
第一计算子单元,用于计算所述投影区域和所述视图区域的比值;
第二计算子单元,用于依据公式D=R×(L-1)得到所述加载区域的显示分辨率,其中L为分辨率的级数,R为比值,且当R大于1时将其设置为1;
确定子单元,用于确定所述显示分辨率下需要加载到所述加载区域的数据块。
8.根据权利要求7所述的装置,其特征在于,所述裁剪单元具体用于:将所述加载区域的每个数据块的八个顶点的坐标和所述视景体的坐标进行对比;如果所述数据块的至少一个顶点的坐标包括在所述视景体的坐标内,则将所述数据块作为可视区域的可视数据块。
9.根据权利要求8所述的装置,其特征在于,所述计算单元具体用于:依据所述视景体的坐标系和所述加载区域的坐标系,对所述可视数据块的坐标进行转换,得到基于所述视景体的坐标系的可视数据块的坐标;依据所述显示分辨率,将所述基于所述视景体的坐标系的可视数据块的坐标转换为所述可视数据块在显示屏幕中的空间位置;
所述加载单元具体用于:获取各个所述可视数据块的景深;依据景深由远及近的顺序,依次在所述可视数据块的空间位置上加载对应的所述可视数据块。
10.根据权利要求6至9任意一项所述的装置,其特征在于,所述生成单元具体用于:获取用户输入的三维实体数据的加载区域信息以及逻辑标志信息,依据所述加载区域信息和所述逻辑标志信息,生成所述加载区域,其中所述加载区域信息是所述加载区域的大小信息,所述逻辑标志信息用于控制所述加载区域的形状。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310432189.7A CN103440678B (zh) | 2013-09-22 | 2013-09-22 | 一种三维体数据可视化方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310432189.7A CN103440678B (zh) | 2013-09-22 | 2013-09-22 | 一种三维体数据可视化方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103440678A CN103440678A (zh) | 2013-12-11 |
CN103440678B true CN103440678B (zh) | 2016-06-01 |
Family
ID=49694371
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201310432189.7A Active CN103440678B (zh) | 2013-09-22 | 2013-09-22 | 一种三维体数据可视化方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103440678B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103778658A (zh) * | 2014-01-23 | 2014-05-07 | 浙江财经大学 | 一种快速展示体数据特征的可视化方法 |
CN108010126A (zh) * | 2017-12-11 | 2018-05-08 | 苏州蜗牛数字科技股份有限公司 | 基于体素构建大规模复杂地形的方法及系统 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101540062A (zh) * | 2009-02-10 | 2009-09-23 | 朱一宁 | 使用可视化几何柱体对计算机三维体数据进行交互实时浏览处理方法 |
-
2013
- 2013-09-22 CN CN201310432189.7A patent/CN103440678B/zh active Active
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101540062A (zh) * | 2009-02-10 | 2009-09-23 | 朱一宁 | 使用可视化几何柱体对计算机三维体数据进行交互实时浏览处理方法 |
Non-Patent Citations (5)
Title |
---|
A Multiresolution Volume Rendering Framework for Large-Scale Time-Varying Data Visualization;Chaoli Wang et al;《Volume Graphics》;20051231;全文 * |
Distributed Data Management for Large Volume Visualization;Jinzhu Gao et al;《IEEE Visualization 2005》;20051028;全文 * |
GPU加速的八叉树体绘制算法;苏超轼 等;《计算机应用》;20080531;第28卷(第5期);全文 * |
LOD Map - A Visual Interface for Navigating Multiresolution Volume Visualization;Chaoli Wang et al;《IEEE TRANSACTIONS ON VISUALIZATION AND COMPUTER GRAPHICS》;20061031;第12卷(第5期);全文 * |
基于深度八叉树的三维数据场LOD可视化;马晓晨 等;《计算机应用》;20100131;第30卷(第1期);全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN103440678A (zh) | 2013-12-11 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110910505B (zh) | 一种场景模型的加速渲染方法 | |
CN108470374B (zh) | 海量点云数据处理方法及装置 | |
US7561156B2 (en) | Adaptive quadtree-based scalable surface rendering | |
CN103093499B (zh) | 一种适用于网络传输的城市三维模型数据组织方法 | |
CN103942306B (zh) | 三维城市模型自适应调度方法 | |
US20100271369A1 (en) | Curved surface rendering system and method | |
Peng et al. | Interactive modeling of topologically complex geometric detail | |
CN111127615A (zh) | 一种三维模型的数据调度方法、装置及电子设备 | |
CN105718643A (zh) | 一种基于最优化视角的船舶生产设计审图器实现方法 | |
US8587586B2 (en) | Electronic device and method for meshing curved surface | |
US7773085B2 (en) | Flexible landscape display system for information display and control | |
CN115578536A (zh) | 一种分层分块三维模型节点合并方法、装置和电子装置 | |
CN103440678B (zh) | 一种三维体数据可视化方法及装置 | |
US9454554B1 (en) | View dependent query of multi-resolution clustered 3D dataset | |
JP5834317B2 (ja) | 誤差画像生成方法 | |
CN114092611A (zh) | 虚拟表情驱动方法及装置、电子设备、存储介质 | |
KR101769013B1 (ko) | 공간타일 기반의 3차원 객체 모델 병합을 통한 3차원 모델 가시화 방법 | |
CN112687007A (zh) | 一种基于lod技术的立体网格图生成方法 | |
CN113591208B (zh) | 一种基于舰船特征提取的超大模型轻量化方法及电子设备 | |
CN115953541A (zh) | 一种四叉树lod地形生成方法、装置、设备及存储介质 | |
CN114820968A (zh) | 三维可视化方法和装置、机器人、电子设备和存储介质 | |
CN115035231A (zh) | 阴影烘焙方法、装置、电子设备和存储介质 | |
Wang et al. | Roaming of oblique photography model in unity3D | |
US6587103B1 (en) | Method and apparatus for determining coincident lines | |
CN104036547A (zh) | 基于Leap Motion控制的三维笔刷实时生成网络模型的方法与装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | 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 |