利用序列化的值通过镶嵌对网格信息的存储、渲染和显示的制作方法

文档序号:32446490发布日期:2022-12-07 00:34阅读:52来源:国知局
利用序列化的值通过镶嵌对网格信息的存储、渲染和显示的制作方法

1.本发明大体涉及一种用于通过镶嵌来高效地和准确地存储和显示用于网格的信息的系统和方法。


背景技术:

2.在三维对象的三维渲染中,细节可能很重要。例如,在牙科,牙齿或牙龈的颜色变化可以表明临床状况的变化。小缝隙可能是严重的牙齿问题的开始。不幸的是,这些细节的存储、显示和渲染可能是昂贵的。


技术实现要素:

3.本公开包括存储网格中的信息的方法,包括:
[0004]-对网格的多个输入片块进行镶嵌,其中,镶嵌为该多个输入片块中的每一个产生至少一个镶嵌顶点;
[0005]-对镶嵌的输入片块的顶点进行序列化;
[0006]-为每个顶点计算一值;
[0007]-根据顶点的序列化对该值进行序列化;以及
[0008]-储存序列化的值。
[0009]
本公开是存储网格中的信息、使得其能以高效和准确的方式存储、渲染和显示的方法。
[0010]
网格是顶点、边和面的集合。顶点是代表表面的单个点,边是连接顶点的线,而面是被顶点和边包围的连续区域。网格可以代表底层对象,例如代表牙齿的三维模型,或代表下巴的二维模型。图4显示了网格的示例。
[0011]
网格可以代表二维(2d)或三维(3d)对象。流行的用于三维网格的文件格式包括协同设计作业(collaborative design activity)(collada)、初始化图形交换规范(iges)、iso 10303(step)、stl、虚拟现实建模语言(vrml)。这些文件格式包括数据结构,该数据结构例如可以指示计算机如何构建网格模型。
[0012]
这里的数据结构被理解为在计算机科学中具有其通用含义,即存储允许访问和/或修改的数据的格式。数据结构可以包括,例如,列表、图元、字典、数组、树等。为了存储三维网格,数据结构应该存储有关其顶点、顶点如何被边连接以及基于这些顶点的每个面的布置的信息。
[0013]
在一个实施例中,与网格模型相关的数据结构被修改,以存储额外的信息作为序列化的值,所述值可以通过镶嵌被访问。信息可以是底层对象的属性,其可以与数值相关联。信息的示例包括底层对象的形状和/或颜色。
[0014]
将信息增加至网格的一种方法是使用更高分辨率的网格,也即向网格增加更多的顶点和边。更高分辨率的网格可能占据更大的文件大小。在必须快速进行渲染—例如其中用户正在实时放大和缩小以便向患者展示扫描的细节—的情况下,这可能是不合乎需要
的。此外,更大的文件大小可能会上传或下载缓慢,并且在云存储中花费更多。在有许多文件的情况下,这一点尤其值得关注。
[0015]
另一种在网格中显示更多信息的方法是镶嵌。镶嵌将网格的片块分割成更小的片,增加了该片块的复杂性。镶嵌允许将渲染网格所必需的计算机程序并行化,这会减少所需的时间。这允许细节实时地动态添加和移除。例如,查看三维对象的用户可以进行放大和缩小,且着色器可以增加细节以保持对象在屏幕上看起来平滑。下面图6显示了单个小面的镶嵌的示例。
[0016]
图6中详细描述了镶嵌的一个实施例,但总的来说:镶嵌取用输入片块,即网格的一个区域,并将其转换为一个基元,即标准形状。然后,该基元可以根据控制镶嵌的镶嵌参数进行细分。这种细分可以通过生成镶嵌顶点,即由镶嵌创建的新顶点,以及将网格顶点(即网格上的现有顶点)和/或镶嵌顶点利用边连接成面来完成。镶嵌顶点再被投射回到输入的片块上。由于标准形状,可以并行地对许多被镶嵌的基元进行操作。
[0017]
计算机硬件可能有嵌入式系统来协助镶嵌,因为它工作效果良好。例如,大多数nvidia芯片都允许进行镶嵌。渲染时,镶嵌可以由cpu和/或gpu执行。镶嵌也可以在软件中完成。镶嵌可以是渲染管线的一部分,如图5中所述。
[0018]
然而,镶嵌通常用于估计新的值。这对于诸如视频游戏的应用来说是可以接受的,其中模型只需要看起来合理即可。然而,对于临床应用来说,估计可能是不够的。
[0019]
本公开可以通过对来自镶嵌的输入片块的顶点进行序列化计算这些顶点的值以及然后存储序列化的值,来允许存储、渲染和显示网格的真实/已知信息。这允许关于网格的信息利用镶嵌进行重建,如下所述。
[0020]
本公开进一步包括对镶嵌的输入片块的顶点进行序列化,其中顶点包括网格顶点和镶嵌顶点。针对各个镶嵌,序列化以相同的方式为顶点排序。用于对顶点进行序列化的实施例包括:根据镶嵌参数计算数字,将坐标转换为数字。将在下文和图10中描述细节。
[0021]
然后为每个序列化的顶点计算一值。这可以例如通过比较附近顶点的值来完成,如图9中所述。然后根据顶点的序列化的顺序对该值进行序列化,并存储序列化的值。
[0022]
这些值可以包含,例如,颜色信息和/或几何信息。下面描述一个实施例,其中值具有颜色信息并且是颜色值。
[0023]
其中值具有几何信息并且可能是三维欧几里得坐标的实施例可以进一步包括欧几里得坐标和/或欧几里得坐标的位移。例如,这可能允许将来自扫描的进一步细节存储在分辨率低于该扫描的网格中。对于牙科模型,扫描的初始显示可能只需要一定的分辨率,但放大可能需要更多的表面细节。存储带有额外几何信息的序列化的值可以实现这一点。
[0024]
一实施例进一步包括一种方法,其中序列化包括基于坐标生成序列化顺序。
[0025]
生成序列化顺序(即顶点被序列化的顺序)的一种方法是使该顺序以基元上的坐标为基础。坐标可以是用于描述位置的一个数字或一组数字。坐标的示例包括:重心坐标、欧几里得坐标、笛卡尔坐标。
[0026]
在一个实施例中,三角形基元的重心坐标可被转换为序列化顺序。在另一个实施例中,四边形基元的欧几里得坐标可被转换为序列化顺序。细节见图10。
[0027]
一实施例包括一种方法,其中序列化进一步包括根据至少一个镶嵌参数生成序列化的数字。
[0028]
序列化顺序也可能基于用于对基元进行镶嵌的参数。
[0029]
一实施例进一步包括一种方法,其中值是颜色值。
[0030]
一实施例是在网格中使用颜色的方法,使得其可以快速、准确和高效地存储、渲染和显示。
[0031]
网格本身通常可以存储几何信息,即关于底层对象如何成形的信息。在一实施例中,与网格模型相关联的数据结构被修改,以同样存储关于底层对象的颜色的信息。
[0032]
颜色是一种视觉特征。颜色值是用来表达是什么颜色的系统性的方式,例如,红绿蓝值(rgb)、十进制值、十六进制值、青色品红色黄色键值(cmyk),或色库,如潘通库(pantone library)。
[0033]
为网格添加颜色信息的典型方法是通过纹理映射。纹理映射包括生成二维的纹理,然后通过将纹理上的特定点与网格上的特定点相匹配,将其映射到网格上。它可以被设想为数字版的汽车乙烯树脂包覆。
[0034]
然而,纹理映射在存储和计算方面都是昂贵的。首先,纹理必须作为单独的对象来存储,从而增加了文件的大小。将纹理与网格匹配需要计算时间和处理能力。此外,纹理映射可能会导致实际颜色的严重失真。
[0035]
另一种为网格添加颜色信息的方法是直接在网格中存储颜色信息。这通常是通过在顶点上存储颜色信息来实现的。然而,在这里,只有顶点处的颜色被存储。为了更仔细观察,要么网格必须有足够高的分辨率以提供足够的颜色信息,要么必须对颜色进行推断。
[0036]
更高分辨率的网格可能占据更大的文件大小。在必须快速完成渲染的情况下—例如在用户正实时放大和缩小以向患者展示扫描细节的情况下,这可能是不合乎需要的。此外,更大的文件大小可能会上传或下载缓慢,并且在云存储中花费更多。在有许多文件的情况下,这一点尤其值得关注。
[0037]
在网格中显示更多信息的一种方法是镶嵌。镶嵌将网格的片块分割成更小的片,从而增加了该片块的复杂性。镶嵌允许渲染网格所必需的计算机程序并行化,这会减少所需的时间。这允许细节被实时动态地添加和移除。例如,正在观察三维对象的用户可以放大和缩小,且着色器可以增加细节以保持对象在屏幕上看起来平滑。下面的图6显示了单个小面的镶嵌的示例。
[0038]
计算机硬件可能有嵌入式系统来协助镶嵌,因为它工作良好。例如,大多数nvidia芯片允许进行镶嵌。镶嵌也可以由软件来完成。
[0039]
在一实施例中,镶嵌将三角形网格的每个面投射到等边三角形上。由于这些面现在是统一的,不同的操作可以在所有这些面中快速执行。例如,较低分辨率的网格在屏幕上渲染时可能看起来是块状的。镶嵌可以针对每个小面推断几何形状,使得表面在渲染时呈现弯曲状。
[0040]
然而,存储的网格并不能立即为人类所见。渲染网格是为了准备显示网格,例如,在屏幕上显示网格。渲染管线通常被用来将网格渲染成二维图像。镶嵌可以由渲染管线中的不同进程来完成,例如,镶嵌阶段(包括壳层着色器、镶嵌器和域着色器)或几何着色器。着色器一次计算每个单元的指令;这允许它们非常快速地工作。下面在图5中针对常用的渲染管线opengl和microsoft direct3d/directx对渲染管线进行概述。
[0041]
渲染管线可以包括镶嵌阶段,包括壳层着色器、镶嵌器和一个域着色器(这些术语
用于direct3d中;它们在opengl中的等效物可以在图5中找到)。壳层着色器将初始片块作为输入,并将其投射到称为基元的标准形状。壳层着色器可以例如将初始片块的顶点与基元的顶点相匹配。例如,在具有三角形网格的实施例中,初始片块可以是网格的三角形小面,而基元可以是等边三角形或四边形。输入片块不需要与网格小面相匹配,因为它是由用户限定的。
[0042]
壳层着色器也是输入有关镶嵌参数—例如内镶嵌因子、外镶嵌因子和/或几何信息—的信息的地方,如下文所述。
[0043]
接下来,镶嵌器将来自壳层着色器的基元作为输入,并根据输入到壳层着色器中的参数对其进行镶嵌。在这里,对基元进行镶嵌是鉴于其在图形渲染中的一般理解,即把一个基元分解成更小的、可预测的片,并生成一组镶嵌顶点和镶嵌边来限定这些更小的片。
[0044]
镶嵌参数可帮助限定如何执行镶嵌。例如,参数可能是限定原始基元内部有多少个同心形状和/或是否有中心顶点的内镶嵌因子,以及决定向每个边添加多少个顶点的外镶嵌因子。另外的参数可能会指定由嵌片产生的顶点的间距。图10中进一步详细解释了三角形基元的镶嵌参数的示例。
[0045]
镶嵌器输出一组坐标,该坐标可以被映射回到原始输入片块上。这些坐标可以是镶嵌顶点的基础。
[0046]
例如,对于三角形基元,可以使用重心坐标。重心坐标是一个坐标系,它限定了三角形上相对于三角形中心的位置,而不是绝对距离。每个重心坐标对应于初始面上的位置。此外,基于这些重心坐标的一组镶嵌顶点可以被序列化,也就是说,每次都以相同的顺序进行操作。图10中显示了这种编号的示例
[0047]
对于四边形基元,可能会使用单位正方形,其中正方形的一个角被设为(0,0),而相对角被设为(1,1)。然后,其可以被映射到任何四边形上。
[0048]
接下来,域着色器将来自镶嵌器的重心坐标作为输入,并对其进行计算,如对关于对象的几何信息进行插值,然后使用来自镶嵌器的坐标将计算结果投射回原始面。位于这些坐标处的点可被视为由镶嵌产生的顶点,即镶嵌顶点。镶嵌顶点可与网格顶点不同,因为它们是由镶嵌产生的,而不存在于原始网格中。
[0049]
镶嵌也可以由几何着色器完成。
[0050]
在本公开中,镶嵌可以比更高分辨率的网格或纹理映射的网格更高效地存储颜色信息。由于本实施例每次都以相同的顺序序列化所述至少一个镶嵌顶点,所述至少一个面的颜色值可以例如作为附加到网格顶点或与小面相关联的列表被序列化和存储。
[0051]
在一个实施例中,通过对网格模型的多个面进行镶嵌,将颜色值存储在网格模型中,这会每个面产生至少一个镶嵌顶点。
[0052]
然后为每个镶嵌顶点计算颜色值。例如,这可以通过比较来自附近顶点的颜色值来完成,如图9中所述。
[0053]
由于被镶嵌的输入片块上的顶点总是以相同的顺序被序列化,颜色值可以按照这个顺序被序列化,并被存储。如果以后再对网格进行镶嵌,颜色值可以被重新分配到正确的镶嵌顶点上。关于镶嵌顶点本身的信息不需要被存储,只需要存储用于计算这些顶点的参数。
[0054]
通过以这种方式存储颜色信息,针对存储的相同颜色信息,与带纹理映射的网格
相比,网格模型需要较少的数据存储。例如,用于纹理映射的一组牙齿的文件大小为3314kb,而具有相同颜色分辨率的序列化的颜色值的网格模型的文件大小为2518kb。见图16。这也允许它根据需要通过使用镶嵌来快速地渲染。
[0055]
在牙科领域的一个实施例中,网格可以是牙科模型,是患者口腔情况的表示,包括但不限于牙齿、牙龈和/或牙齿对象。在这种情况下,网格可能包含关于患者的临床情况的信息,且可能合乎需要的是尽可能准确地反映患者口腔情况的实际颜色。
[0056]
一实施例进一步包括使用序列化的值来渲染网格。
[0057]
如上所述,存储的网格对人类来说不是立即可见的。渲染网格是为了准备显示网格,例如,在屏幕上显示网格。渲染管线可用于将网格渲染成准备显示的二维图像。
[0058]
在一实施例中,比网格本身可允许的相比,用序列化的值渲染网格添加了更高分辨率的值。渲染可以进一步包括栅格化,即从网格中获取可用的信息来计算在屏幕的每个像素上显示什么。它还可以包括像素着色器。渲染管线的示例在下面的图5中有更详细的描述。
[0059]
本公开允许对底层对象进行更准确的渲染,因为所使用的值更接近底层对象的真实值。此外,与更高分辨率的网格相比,本公开允许渲染管线本身更高效地显示相同数量的值。
[0060]
一实施例进一步包括,其中网格模型是基于三维对象。
[0061]
三维对象是指存在于三维空间的对象。在本公开的各种实施例中,三维对象包括但不限于:物理对象,如牙齿修复体和牙体;数字对象,如单个牙齿的模型;以及物理对象—如牙齿修复体和耳朵—的扫描。
[0062]
[权利要求]一实施例进一步包括基于多个子组件生成网格。
[0063]
网格可以由多个子组件生成。例如,网格可以是基于多个三维子扫描的牙科模型,这些子扫描被对齐,且然后被处理成一个连续的网格。扫描仪可能只能一次扫描口腔的一小部分;对齐这些片允许制作整个口腔的模型。子扫描可能具有关于扫描的对象的几何形状和/或颜色的信息。对齐可以通过已知的过程进行,例如,通过迭代最接近的对齐算法。
[0064]
一旦子扫描被对齐,就可以根据来自子扫描的数据点通过以下来生成网格,例如:在对齐的子扫描的表面上以固定的间隔选择点,并计算最近的子扫描顶点的平均值;结合对齐的子扫描的相邻顶点。后期处理可以例如通过网格的抽选来进行,以减少多余的数据点,或使网格整体平滑。然而,子组件仍然可以保留它们所包含的信息。
[0065]
一实施例进一步包括为网格上的点推导出至少一个值。
[0066]
在镶嵌中,进一步的信息可以被插值,即,估计。这对于诸如视频游戏的应用来说可能是有用的,其中,虚构的细节被填入。然而,对于临床应用来说,准确地反映底层对象的真实值可能是优选的。因此,可以推导出值,而不是插值。
[0067]
在一个实施例中,网格可以从子扫描中导出,其中每个子扫描由具有位置信息(例如笛卡尔或欧几里得坐标)和颜色信息(例如颜色值,如rgb和/或十六进制颜色)的顶点组成。
[0068]
在一个实施例中,对于网格上的点或在网格1毫米以内的点(如网格顶点、镶嵌顶点和/或附近的另一个点),该点的值可以通过使用最近的子扫描顶点的值来导出。接近度可以通过取网格模型上的点与子组件的顶点之间的最短欧几里得距离来计算。这意味着该
值可能是底层对象的真实值的反映,而不是猜测。
[0069]
在一个实施例中,对于网格上的点,该值是基于多个最近的邻居的值,即距离该点最近的多个子网格顶点的值。最近的邻居可以被计算为k个最近的邻居,其中k是正整数,且是所选择的最近的邻居的数量(例如,5个或10个最近的邻居)。最近的邻居也可以被计算为网格上离该点给定距离内—例如在网格的1毫米内—的多个子组件顶点。
[0070]
最近的邻居的值可以按距离比例加权,其中距离较近的子组件顶点比距离较远的顶点被赋予更多的权重。在计算平均数或加权平均数时,可以去除异常值,也可以进行可以提高网格上点数值的准确性的其他统计分析。
[0071]
[权利要求]本公开进一步包括将序列化的值保存到计算机存储装置中。
[0072]
一个实施例进一步包括将序列化的值保存到计算机存储装置,从而允许进一步压缩文件大小。
[0073]
上述的渲染管线可以单独在计算机内存中进行(也参见下面的图5),且因此,序列化的值的显示可以单独在内存中进行。计算机内存可以是允许容易地访问短期数据的构件,例如,ram、dram。计算机存储装置允许长期存储,且可以是例如硬盘驱动器、ssd和/或云中的存储。
[0074]
然而,序列化的值也可以保存到存储装置中,从而允许进一步压缩,如下文所述。关于存储的详细描述见图3。
[0075]
一实施例进一步包括将序列化的值存储在数据结构中,该数据结构移除了至少两个面之间共享的顶点的重复值。
[0076]
网格中会出现重复的信息,因为不同的面可能共享顶点和边。一实施例通过去除这些重复来减少所需的数据存储的量。在一实施例中,数据结构可以包含来自多个面的值,而序列化的值可以从数据结构中导出。细节在图15中描述。
[0077]
一实施例进一步包括将序列化的值存储为残差。
[0078]
在一实施例中,通过存储值的残差而不是值本身,进一步减少了存储网格值所需的数据存储量。残差一般可限定为预测值与观察值和/或真实值之间的差。在正常的统计图中,这可能是例如估计值和测量值之间的差,例如,估计的每日高温与该日测量的实际温度。残差的数值通常比绝对值小;例如,如果预测温度是30度,而实际温度是32度,残差将是2度。
[0079]
网格模型上的给定点的值并不是存在于真空中,相反,它往往与附近的值相似。例如,在牙齿的扫描中,牙齿并不是随机的颜色马赛克;相反,非白色的点很可能紧挨着另一个非白色的点,而且颜色的变化往往是渐进的。突然的颜色变化包含它们自己的信息
‑‑
例如,从粉色到白色的变化可能意味着扫描已经从牙龈变成了牙齿。通过存储这些颜色之间的差异而不是原始颜色,可以减少所需的数据存储量。
[0080]
例如,颜色值可以被存储为红绿蓝(rgb)值。可见光谱上的颜色可以被限定为红、绿和蓝之间的混合,通常在0到255的范围内。白色可具有(255,255,255)的颜色值,其中红色、绿色和蓝色为最大值。黑色可以限定为(0,0,0),即没有所有三种颜色。
[0081]
一个实施例通过存储原始网格顶点和镶嵌顶点的颜色值之间的差异,而不是绝对的颜色值,来利用颜色之间的相似性。例如,假设一个顶点的颜色是潘通11-0602tcx snow white,它的rgb值是(242,240,235)。如果相邻的点是(236,242,235),两者之间的差可以表
示为(6,-2,0),这样就少存储5个字符。进一步的细节,参见图13。
[0082]
一实施例包括对扫描的所有值进行平均,计算给定的点和平均值之间的差,并存储该差。正如下面所讨论的,单个扫描关于其颜色值可能有非常相似的范围,而存储该差则占据小得多的存储空间。在图14中可以看到颜色值的示例直方图。
[0083]
虽然到目前为止,本公开使用的是rgb值,因为它们相对直观且易于解释,但如上所述,颜色值也可以用其他格式存储。
[0084]
一实施例进一步包括在非暂时性介质中的计算机程序产品,其被配置为执行前述权利要求中的一项或多项。
附图说明
[0085]
本发明的上述和/或其他目的、特征和优点,将参考附图通过对本发明实施例的以下说明性和非限制性的详细描述来进一步描述,在附图中:
[0086]
图1显示了根据本公开的一个实施例的系统的示意图;
[0087]
图2显示了使用纹理映射为网格上色与使用具有序列化的颜色值的镶嵌为网格上色的比较的实例;
[0088]
图2a显示了使用纹理映射显示的口腔情况,图2b显示了使用具有序列化的颜色值的镶嵌显示的相同口腔情况;
[0089]
图2c显示了使用纹理映射显示的口腔情况,图2d显示了使用具有序列化的颜色值的镶嵌显示的相同口腔情况;
[0090]
图2e显示了使用纹理映射显示的口腔情况,图2f显示了使用具有序列化的颜色值的镶嵌显示的相同口腔情况;
[0091]
图3显示了根据本公开来存储、渲染和显示颜色的实施例;
[0092]
图4显示了网格模型的示例;
[0093]
图4a是臼齿的网格模型;
[0094]
图4b是口腔情况的下颚的网格模型;
[0095]
图5显示了渲染管线的两个实施例,opengl和microsoft direct3d;
[0096]
图5a显示了opengl渲染管线的实施例;
[0097]
图5b显示了direct3d渲染管线的实施例;
[0098]
图6显示了三角形基元的镶嵌的实施例;
[0099]
图7显示了其中针对三角形基元获得了序列化的颜色值的实施例;
[0100]
图8显示了其中针对三角形基元渲染并显示了序列化的颜色值的实施例;
[0101]
图9显示了用于从子组件获取值的方法的实施例;
[0102]
图9a显示了对齐的子组件901a、902a和903a以及网格904a;
[0103]
图9b显示了使用特定距离内的最近邻居从子组件获取值的实施例;
[0104]
图9c显示了使用特定数量的最近邻居从子组件中获取值的实施例;
[0105]
图10显示了用不同的镶嵌参数以及它们相应的序列化顺序来进行镶嵌的基元的示例;
[0106]
图10a显示了三角形基元;
[0107]
图10b显示了具有内镶嵌因子2、外镶嵌因子(2,1,1)以及均匀间隔的顶点的镶嵌
三角形基元;
[0108]
图10c显示了具有内镶嵌因子2、外镶嵌因子(2,2,2)以及均匀间隔的顶点的镶嵌三角形基元;
[0109]
图10d显示了具有内镶嵌因子4、外镶嵌因子(4,4,4)以及均匀间隔的顶点的镶嵌三角形基元;
[0110]
图10e显示了具有内镶嵌因子6、外镶嵌因子(6,6,6)以及均匀间隔的顶点的镶嵌三角形基元;
[0111]
图10f显示了具有内镶嵌因子(4,4)的镶嵌四边形基元;
[0112]
图10g显示了具有内镶嵌因子(6,7)和外镶嵌因子(4,2,9,3)的镶嵌四边形基元;
[0113]
图11显示了具有序列化的颜色值的网格的保存和加载工作流程的实施例;
[0114]
图12是具有网格顶点颜色的网格和具有序列化的颜色值的网格在相同颜色分辨率下所需的存储之间的比较的玩具示例;
[0115]
图13是使用插值颜色的残差的示例;
[0116]
图14显示了围绕平均值群集的颜色值的直方图;
[0117]
图14a显示了在典型牙科扫描中发现的顶点颜色值的直方图;
[0118]
图14b显示了在典型牙科扫描中发现的内部颜色值的直方图;
[0119]
图15显示了用于更高效地存储重复值的实施例;
[0120]
图15a显示了一个实施例,其中序列化的值被保存到列表中;
[0121]
图15b显示了一个实施例,其中值被保存,从而共享顶点可以被再次访问而不是被再次列出;
[0122]
图16显示了在不同分辨率下,无颜色的网格、带有纹理映射的相同网格和带有序列化的颜色值的相同网格的文件大小的比较。
具体实施方式
[0123]
在下面的描述中,对附图做出参考,附图以说明的方式显示了可如何实践本发明。
[0124]
该专利或申请文件至少包含一张彩色图样。在提出请求并支付必要的费用后,专利局将提供该专利或专利申请公开的具有彩色图样的副本。
[0125]
图1显示了根据本公开的一个实施例的系统的示意图。系统100包括计算机设备102,其包括计算机可读介质104和微处理器103。该系统进一步包括视觉显示单元107,输入单元,如计算机键盘105和计算机鼠标106,用于输入数据和激活视觉显示单元107上的可视化的虚拟按钮。视觉显示单元107例如可以是计算机屏幕。
[0126]
计算机设备102能够从数字建模设备101b获得三维模型,其中三维模型可能是网格。网格可以存储在计算机可读介质104中,并提供给处理器103。
[0127]
此外或备选地,计算机设备102进一步能够从图像采集设备101a,例如三维扫描设备,例如由3shape trios a/s制造的trios口内扫描仪,接收例如患者的一组牙齿和齿龈的表面的数字三维表示,或者能够从这样的三维扫描设备接收扫描数据,并基于这样的扫描数据形成患者的一组牙齿和/或齿龈的数字三维表示。收到的或形成的数字三维表示也可以是网格的形式,并可以存储在计算机可读介质104中并提供给微处理器103。
[0128]
系统100被配置为允许操作者通过镶嵌来存储和显示序列化发值。例如,这可以通
过在视觉显示单元107上显示牙科模型来实现,然后操作者可以在视觉显示单元上将带有序列化的值的网格可视化。
[0129]
该系统包括单元108,其用于将适用于在制造机器上制造以便生成牙科设备的具有数字数据格式的序列化的值的网格存储、渲染和显示至例如计算机辅助制造(cam)设备109或另一个计算机系统(例如位于制造定制牙科修复体的铣削或打印中心)。用于传输的单元可以是有线或无线连接,并且例如可以使用互联网或文件传输协议(ftp)进行该传输。
[0130]
使用三维扫描设备101a进行网格扫描和/或使用数字建模设备101b进行网格建模可在牙医处进行,而牙科设备设计可在牙科实验室进行。在这种情况下,牙科模型可以通过牙医和牙科实验室之间的互联网连接提供。
[0131]
如图所示的系统100是一个说明性的示例。例如,计算机设备102可以包括一个以上的微处理器103和/或一个以上的计算机可读介质104,视觉显示单元107可以集成在计算机设备102中或与计算机设备102分开,等等。
[0132]
图2显示了比较使用纹理映射为网格上色与使用具有序列化的颜色值的镶嵌为网格上色的实例。
[0133]
图2a显示了使用纹理映射显示的口腔情况,而图2b显示了使用具有序列化的颜色值的镶嵌显示的相同口腔情况。与图2a相比,图2b中的颜色在色值和位置两者上都更准确地反映了口腔情况的真实颜色。例如,在图2a中,从左边开始的第二颗牙齿显示为棕色/深红色的条纹。根据它们的形状和颜色,这些可以被解释为牙齿变色。图2b显示了同样的牙齿,其形状和颜色两者的失真较少,准确地显示出“污点”是不规则的形状和更明亮鲜艳的红色。消除失真可以允许更准确地解释为临时的血迹,也许是来自牙科手术。由于血迹是短暂的,图2b允许将颜色忽略为临时性的,而不像图2a那样,将该颜色解释为固定的污点。
[0134]
图2c显示了使用纹理映射显示的口腔情况,而图2d显示了使用具有序列化的颜色值的镶嵌显示的相同口腔情况。与图2c相比,图2d中的颜色在色值和位置两者上都更准确地反映了口腔情况的真实颜色。
[0135]
例如,在图2c和图2d的中心处的牙齿具有准备用于牙冠的金属柱。图2c显示了金属柱上的颜色具有水平条纹。图2d显示了同样的柱,其形状和颜色两者失真较小,显示出柱上的“条纹”是数字和字母。
[0136]
图2e显示了使用纹理映射显示的口腔情况,而图2f显示了使用具有序列化的颜色值的镶嵌显示的相同口腔情况。与图2e相比,图2f中的颜色在色值和位置两者上都更准确地反映了口腔情况的真实颜色。
[0137]
例如,在图2e和2f的口腔情况中,患者已经被缝合。来自图2f的更准确的颜色和颜色的位置可允许更好地监测缝合部位,例如在监测牙龈的炎症方面。要注意,在图2f中,与图2e中的相应特征相比,缝合的入口点是更鲜艳的红色,且牙龈的底层毛细血管也更明显。
[0138]
图3显示了根据本公开通过序列化的值来存储、渲染和显示额外信息的实施例。
[0139]
步骤301包括扫描以获得初始网格。初始网格可以例如由多个子扫描组成,然后这些子扫描组合成单一的扫描。初始网格可以例如仅表明模型的形状(即几何形状)。它可能没有关于模型的其他信息,包括颜色信息。
[0140]
步骤302包括将初始网格后处理为网格。这可以包括,例如,减少不必要的和/或多余的顶点,关闭网格中的孔,和/或从初始网格制作更规则的网格。
[0141]
步骤303对网格进行镶嵌,以获得镶嵌顶点。对于镶嵌被应用于其上的每个面,镶嵌将面分割成更小的规则的片。镶嵌在图6中有进一步的详细描述。
[0142]
每个小面的镶嵌顶点是根据任何镶嵌参数的值来获得的。顶点被序列化,例如,通过图10中描述的实施例。
[0143]
步骤304包括获得每个镶嵌顶点的值。对于经受镶嵌的每个小面,都会产生一组镶嵌顶点。对于这些中的每一个,都可以分配值。值可以通过几种方式确定;例如,其可以通过下面描述的最近的邻居算法来确定,或者通过最近的邻居的数量,或者通过一定距离内的最近的邻居。获取值的方法的示例在图9中详细示出。这些值可以从用于生成初始模型的子扫描中导出。这些值可以被序列化,也就是说,是有序的,与镶嵌顶点的顺序相同。
[0144]
步骤305存储镶嵌顶点的序列化的值。序列化的值可以存储在例如计算机内存或计算机存储装置中。要注意,序列化的值的顺序在与镶嵌相结合时可用于确定每个值的位置。步骤303-305在图7中进一步详细讨论。
[0145]
序列化的值可以在每个步骤310之后立即被渲染,或者它们可通过步骤306至309被进一步处理。
[0146]
步骤306包括将序列化的值保存在存储装置中。存储装置可以是,例如,硬盘、固态驱动器和/或云存储。计算机存储装置允许长期存储,以及进一步压缩文件大小,例如,如在步骤307和/或308中。步骤307和308可以被包含作为步骤306的一部分。步骤306在图11、步骤1100中进一步详细描述。
[0147]
步骤307进一步包括通过存储值(被存储为残差,即差值而不是绝对值),来减少具有序列化的值的网格的文件大小。实施例在图13和图14中讨论。
[0148]
步骤308进一步包括丢弃重复的值,例如,在其中顶点具有相同颜色的两个面之间的边上。图15中讨论了一个实施例。
[0149]
步骤309包括将序列化的值从存储装置加载回内存中。它可以被看作是步骤306的反转。通过将序列化的值加载回内存,步骤309为网格模型利用颜色进行渲染做准备。步骤309在图11、步骤1110中有进一步的详细描述。
[0150]
步骤310通过渲染管线—例如,opengl、directx和/或direct3d—将网格渲染成2d图像。渲染管线在图5中进一步详细讨论。步骤310进一步包括步骤311,用着色器对网格模型进行镶嵌,且步骤312读取镶嵌顶点的序列化的值。步骤311和312在图8中进一步详细讨论。
[0151]
步骤313在渲染后显示具有序列化的值的镶嵌的二维图像。例如,这可以在屏幕和/或监视器上完成。这将在图8中进一步详细讨论。
[0152]
图4显示了网格模型的示例。
[0153]
图4a是臼齿的网格模型。它是规则的三角形网格。
[0154]
图4b是口腔情况的下颚的网格模型。它是三角形的网格。
[0155]
图5显示了渲染管线的两个实施例,opengl和microsoft direct3d。渲染管线采取网格模型,并将其渲染为适合在二维屏幕上显示。尽管这两种管线之间存在差异,但它们的相似性足以使一个概述能够解释它们两者的主要步骤。有关进一步的细节,请参阅opengl的“渲染管线概述”和微软的"图形管线"。在本声明中,可能使用了direct3d的术语,但可能与opengl的对应术语互换。
[0156]
图5a显示了opengl渲染管线的一个实施例。
[0157]
图5b显示了direct3d渲染管线的一个实施例。
[0158]
顶点规范501a/输入组装器501b是其中限定了进入管线的初始输入的地方,从而可以应用渲染管线的其余部分。通常,网格的顶点被读入基元,即管线的着色器在其上完成其任务的基本对象。基元可以是,例如,三角形、四边形、点和/或线。在一个实施例中,使用了三角形。
[0159]
顶点着色器502a/顶点着色器502b执行对顶点的操作,例如,变换、照明等。
[0160]
镶嵌503a/503b可以是可选的步骤,其中基元被镶嵌成更小的片,以便可以添加更多的限定。例如,这可以是几何限定,例如,将单一的平坦小面改变为若干不同角度的较小的小面,以更好地模拟弯曲表面。
[0161]
在这个阶段的镶嵌可能包括三个着色器,镶嵌控制着色器504a/壳层着色器504b,镶嵌基元生成器505a/镶嵌器505b,以及镶嵌评估着色器506a。域着色器506b。在图6中显示了关于单个小面的镶嵌的更详细的示例。
[0162]
镶嵌也可以由几何着色器507a/507b完成。尽管在这里镶嵌显示为渲染管线的一部分,但它不一定是。镶嵌可以由硬件或软件来执行;镶嵌过程通常被嵌入到硬件中,因为它们允许大规模并行化。
[0163]
镶嵌控制着色器504a/壳层着色器504b将输入片块改变为镶嵌基元。输入片块可以是限定在网格上的任何片块,且可以是例如网格的小面,或独立于小面的区域。基元可以是例如三角形、四边形、点和/或线。在一个实施例中,输入片块可以是三角形网格的小面,且基元可以是等边三角形。在另一个实施例中,输入片块可以是四边形,而基元可以是正方形。镶嵌控制着色器504a/壳层着色器504b还传递关于镶嵌的参数,例如,内镶嵌因子、外镶嵌因子和/或镶嵌顶点间距。图10中显示了三角形基元的参数的示例。
[0164]
镶嵌基元生成器505a/镶嵌器505b根据来自镶嵌控制着色器504a/壳着色器504b的参数,在镶嵌基元上限定镶嵌顶点和镶嵌边。镶嵌顶点是可根据镶嵌参数在基元上生成的点,例如,通过计算重心坐标和/或单位正方形上的坐标。镶嵌边可通过连接镶嵌顶点和/或网格顶点而生成。图6和图9中讨论了实施例。
[0165]
由于镶嵌基元是统一的,对它们的操作可以很容易地被并行化,即在同一时间运行。这允许更高效的处理,且这也是为什么镶嵌法被嵌入到硬件中的一个原因。
[0166]
镶嵌评估着色器506a/域着色器506b将镶嵌顶点和镶嵌边投射回输入片块。在图6中显示了一个实施例。
[0167]
几何着色器507a/507b对基元进行进一步操作。几何着色器507a/507可以对单个基元而不是输入片块进行操作。基元的镶嵌也可以在这里完成。
[0168]
如图5a所描述的opengl在其管线概述中列出了一些额外的步骤。顶点后处理508a对顶点进行额外的操作,其可以例如准备顶点以用于基元组装509a和栅格化510a。基元组装509a包括将基元划分为单独的基本基元的序列和一些进一步的处理。
[0169]
栅格化510a/栅格化器510b将网格模型从形状和/或基元转换为栅格图像,例如像素。在图6中可以看到玩具示例。
[0170]
片段着色器511a/像素着色器511b对由栅格化过程产生的单独的片段和/或像素进行操作。操作的示例包括:每像素的照明、后处理。
[0171]
每采样操作512a/输出合并器512b决定最终的像素输出。
[0172]
图6显示了三角形基元的镶嵌的一个实施例。
[0173]
步骤601显示了输入片块的示例,这里是网格的三角形小面。
[0174]
步骤602将输入片块处理成基元。这里,基元可能是等边三角形。
[0175]
步骤603根据镶嵌参数生成镶嵌顶点和镶嵌边。镶嵌参数包括,例如:内镶嵌因子、外镶嵌因子、顶点间距和/或分辨率。参数在图10中进一步详细讨论。基元现在具有:来自原始网格的网格顶点和由镶嵌产生的镶嵌顶点;连接镶嵌顶点和/或网格顶点的镶嵌边;由镶嵌顶点和/或网格顶点限定的镶嵌小面。镶嵌边可以与网格的边重叠。
[0176]
为了计算镶嵌顶点在哪里,可以使用镶嵌器,例如重心坐标,来镶嵌多个小面。这些计算可以被并行化以更快地处理。诸如曲率或平移等细节也可以在这一步添加。
[0177]
步骤604将镶嵌顶点投射回输入片块上,产生镶嵌片块。这可以通过将重心坐标转换为原始网格的小面上的位置来完成。这可以对网格上的多个小面进行,从而与仅由网格顶点存储的相比以更高的分辨率渲染网格。这可以使用内置的镶嵌硬件相对快速地完成,使渲染过程比具有更多顶点的同一底层对象的网格更快。
[0178]
步骤605将镶嵌片块栅格化为二维图像,以及另外对该图像进行后处理。在上下文中,栅格化是将三维网格模型渲染成二维图像的过程,例如,以用于在像素化的屏幕上显示。这个示例是玩具的示例,以说明该过程。
[0179]
栅格化可以决定在单独的像素中显示什么。在这里,每个像素都比镶嵌片块更小,所以必须显示镶嵌片块的一部分。其他后处理可以考虑到所显示的镶嵌片块的区域的位置。例如,鉴于镶嵌片块在三维空间中作为平面存在,并假设来自上方的光源,小面的一个边可能比另一个边更暗。然而,在另一个实施例中,图像可以被"缩小",并且在单个像素中可以包含多个镶嵌片块。这些都被栅格化并相应的进行后处理。
[0180]
栅格化和后处理允许在网格的基础上显示图像。
[0181]
步骤606在屏幕上显示网格模型的栅格化和后处理的图像。这是为了说明而以黑色和白色渲染的玩具示例,但在标准屏幕上,例如在1366x768像素的标准屏幕上,这允许以显示底层对象的形状和尺寸的视觉细节渲染该底层对象。
[0182]
图7显示了一个实施例,其中为三角形基元获得了序列化的颜色值。
[0183]
步骤701显示了输入片块的一个实施例,它可能是网格模型的三角形面。该面有三个来自网格的顶点,它们被称为网格顶点。
[0184]
步骤702,将三角形面处理成等边三角形。
[0185]
步骤703根据镶嵌参数生成镶嵌顶点和镶嵌边,此处镶嵌参数为2的内镶嵌因子,(2,2,2)的外镶嵌因子,以及均匀间隔的顶点。步骤703还对顶点进行序列化,为镶嵌顶点上的每个顶点分配编号。例如,这可以根据图10a-e中的实施例来完成。
[0186]
基元现在具有:网格顶点1、3和5;镶嵌顶点0、2、4和6;连接镶嵌顶点和/或网格顶点的镶嵌边;由镶嵌顶点和/或网格顶点限定的镶嵌小面。
[0187]
步骤704将镶嵌顶点投射回面上。这是通过将重心坐标转换为三角形面上的位置来完成的。来自步骤703的顶点编号被保留。
[0188]
步骤705获得每个镶嵌顶点的颜色值,产生颜色值c0-c6,对应于顶点0-6的颜色值。该颜色值可以是上面讨论的格式之一。获得颜色值的方法将在下面的图9中讨论。
[0189]
步骤706根据顶点的序列化顺序将颜色值c0-c6序列化。序列化的颜色值可以被存储,例如,存储为列表、数组和/或其他数据结构,其中颜色值的顺序可以被确定。
[0190]
步骤707丢弃其他镶嵌信息,只留下原始小面和序列化的颜色值c0-c6。
[0191]
图8显示了一个实施例,其中序列化的颜色值针对三角形基元被渲染并显示。
[0192]
步骤801显示了一个具有序列化的颜色值c0-c6的网格的面的示例。该面可以用作输入片块。序列化的颜色值可以通过图7和图9中详述的实施例获得。
[0193]
步骤802将面处理成基元。这里,基元是等边三角形。壳层着色器还包含镶嵌参数,在本实施例中,镶嵌参数是:内镶嵌因子=2,外镶嵌因子=(2,2,2),顶点间距=均匀。
[0194]
步骤803生成镶嵌顶点和镶嵌边,并将镶嵌面上的顶点序列化。基元现在具有:网格顶点1、3和5;镶嵌顶点0、2、4和6;连接镶嵌顶点和/或网格顶点的镶嵌边;由镶嵌顶点和/或网格顶点限定的镶嵌小面。尽管网格顶点存在于输入片块/基元上,但镶嵌为每个网格顶点分配编号。
[0195]
步骤804将镶嵌顶点0-6投射回到原始小面,可能通过使用重心坐标来进行。
[0196]
步骤805将每个序列化的颜色值c0-c6分配给适当的镶嵌顶点,从而得到比步骤801中的原始基元有更多颜色细节的面。
[0197]
步骤806对面进行栅格化且另外对面进行后处理,使其成为二维图像。面上的颜色信息也被栅格化并被后处理。
[0198]
步骤807在屏幕上显示栅格化和后处理的图像,以及来自序列化的颜色值的色彩信息。
[0199]
图9显示了从子组件中获取值的方法的实施例。
[0200]
图9a显示了对齐的子组件901a、902a和903a以及网格904a。网格901-904a可以是例如三维三角形网格。在此,为了便于说明,网格以剖面显示。子组件901a-903a可以是例如来自用三维扫描仪扫描产生的子扫描的网格;各自具有顶点,顶点具有包括如下内容的信息:颜色值、位置值。网格904a可以是由子组件901a-903a的组合生成的网格。顶点905a是网格904a上的顶点。
[0201]
图9b显示了使用特定距离内的最近邻居从子组件获得值的一个实施例。如在图9a中,子组件901b-903b可以是来自用三维扫描仪扫描产生的子扫描的网格,网格904b可以是由子组件901b-903b的组合产生的网格,而顶点905b是网格904b上的顶点。
[0202]
为了获得几何网格上的顶点905b的值,限定了区域906b。区域906b可以是例如特定半径的球体或圆,该特定半径例如是10纳米、300纳米等等。顶点905b的值可以是例如来自区域906b中包含的子组件901b-903b的顶点的值的平均值或加权平均值。
[0203]
图9c显示了使用特定数量的最近邻居从子组件获得值的实施例。如在图9a中,子组件901c-903c可以是来自用三维扫描仪扫描产生的子扫描的网格,网格904c可以是由子组件901c-903c的组合产生的网格,而顶点905c是网格904c上的顶点。
[0204]
为了获得几何网格上顶点905c的值,从子组件901c-903c中找到一定数量的最近的相邻顶点;这里选择最近的三个,由欧氏距离决定。顶点905c的值可以是子组件顶点的值的平均值或加权平均值。
[0205]
图10显示了用不同的镶嵌参数—包括镶嵌基元上顶点的顺序—进行镶嵌的三角形基元的示例。
[0206]
图10显示了用不同的镶嵌参数以及它们相应的序列化顺序对基元进行镶嵌的示例。
[0207]
图10a-f显示了三角形基元。
[0208]
图10a显示了三角形基元,其网格顶点为v0、v1和v2。例如,这可能是在所有基元被规范化之后的壳层着色器的输出。壳层着色器可能包括用于限定如何执行镶嵌的镶嵌参数。三角形基元的镶嵌因子可以包括,例如:内镶嵌因子、外镶嵌因子、顶点间距。
[0209]
三角形的内镶嵌因子可以限定如下。“三角形的镶嵌是基于在外部三角形内生成同心三角形而限定的。但是,生成的同心三角形的数量是内部镶嵌水平的一半,向下取整。”内镶嵌因子的奇数意味着没有中心顶点;偶数意味着有存在中心顶点。
[0210]
三角形的外镶嵌因子只是指边上有多少个顶点,包括原始网格顶点。它可以表示为正整数,通常是三个的列表,即每条边一个。它们对每条边可能是相同的,也可能是不相同的。
[0211]
顶点间距决定了顶点如何相对于彼此间隔。在这里,它们可以是均匀地间隔开的。
[0212]
类似的镶嵌参数也可用于四边形。
[0213]
对于图10a的三角形基元来说,不会改变基元的镶嵌会具有内镶嵌因子1和外镶嵌因子(1,1,1)。
[0214]
对于图10a-e中的镶嵌基元,顶点的序列化顺序可以基于:重心坐标、镶嵌因子。
[0215]
找到顶点的索引编号的一个实施例可以如下。
[0216]
[0217][0218]
图10b显示了内镶嵌因子为2,外镶嵌因子为(2,1,1),顶点间隔均匀的镶嵌三角形基元。正如这里所展示的那样,外镶嵌因子不需要相同。这种级别的细节可能适合于某些功能。顶点的序列化可以根据上面的代码进行。请注意,顶点的编号可以是一致的,也就是说,在给定相同的镶嵌参数的情况下,对每个镶嵌都是一样的。
[0219]
图10c显示了镶嵌三角形基元,其内镶嵌因子为2,外镶嵌因子为(2,2,2),且顶点均匀间隔。顶点的序列化可以根据上面的代码进行。
[0220]
图10d显示了镶嵌三角形基元,其内镶嵌因子为4,外镶嵌因子为(4,4,4),且顶点均匀间隔。顶点的序列化可以按照上面的代码进行。通过选择更高的镶嵌因子值,可以渲染更多的细节,因为有更多的镶嵌顶点。
[0221]
图10e显示了镶嵌三角形基元,其内镶嵌因子为6,外镶嵌因子为(6,6,6),且顶点均匀间隔。顶点的序列化可以按照上面的代码进行。
[0222]
图10f和10g显示了四边形基元。针对它们的镶嵌参数的解释,请参见参考文献中opengl的“镶嵌”文章。
[0223]
对于镶嵌四边形的序列化顺序,对顶点序列化的实施例可以是
[0224][0225]
这一实施例适用于10f和10g中的编号。
[0226]
图10f显示了镶嵌四边形基元,具有内镶嵌因子(4,4)。顶点的序列化可以按照上面的伪代码进行。
[0227]
图10g显示了镶嵌四边形基元,具有内镶嵌因子(6,7)和外镶嵌因子(4,2,9,3)。顶点的序列化可以按照上面的伪代码进行。
[0228]
图11显示了具有序列化的颜色值的网格的保存和加载工作流的实施例。
[0229]
流程图1100显示了保存网格的实施例。
[0230]
步骤1101将顶点和小面序列化,以特定顺序存储每个顶点和相关小面。
[0231]
步骤1102存储网格连接,存储顶点以何种方式彼此连接。
[0232]
步骤1103将顶点颜色转换为残差,例如如图13中详细描述的那样。这就减少了存储文件所需的空间量。
[0233]
步骤1104将序列化的颜色值转换为残差,例如,如图13和/或图14中详细描述的那样。这就减少了存储文件所需的空间量。
[0234]
步骤1105用算术编码—例如,熵编码—将顶点颜色和内部颜色压缩到更小的文件大小。熵编码是一种一般的无损数据压缩方法,它通过使用与符号的概率成反比的比特量对符号进行编码,在wiegand&schwatrz中被进一步描述。
[0235]
步骤1106将顶点和内部颜色序列化,以便以后进行重建,例如,如图10中部分描述的。
[0236]
流程图1110显示了加载网格的实施例。
[0237]
通过获取序列化的顶点和小面,并将它们反序列化回到三维网格空间中,步骤1111与步骤1101相反。
[0238]
通过经由算术编码对顶点颜色和内部颜色进行解压,步骤1112与步骤1105相反。
[0239]
步骤1113使用从步骤1102存储的信息来生成网格连接。
[0240]
步骤1114将残差顶点颜色转换回其绝对颜色值,与步骤1103相反。参见,例如,图13,图14。
[0241]
步骤1115将序列化的颜色值的残差转换回其绝对颜色值,与步骤1104相反。参见,例如,图13,图14。
[0242]
步骤1116分配小面数据,即把解压后的颜色值分配到重建的网格中它们的正确位置。
[0243]
图12是一个简化的示例,比较了具有网格顶点颜色的网格和具有序列化的颜色值的网格在相同颜色分辨率下所需的存储量。
[0244]
网格1200是具有网格顶点颜色的网格。它有7个顶点,12条边,和6个小面。例如,它可以被存储为数据结构1201,其中每个顶点都被赋予位置值和颜色值,即具有7个各自有两个值的项的列表。
[0245]
网格1210是具有序列化的颜色值的网格。它有3个顶点,3条边,和1个小面。一旦它
被镶嵌,更多的细节将被渲染进去,包括颜色。例如,它可以被存储为数据结构1211,它是3个项的列表,其中第1个项具有位置值和7个颜色值,另外2个项各自存储位置。镶嵌可以生成其他顶点的位置信息,并加入正确的颜色值。
[0246]
正如显示的那样,网格1200和网格1210可能在相同的位置有相同的颜色值。然而,数据结构1211可能比数据结构1201使用更少的存储。
[0247]
图13是使用插值颜色的残差的示例。这里使用rgb值,尽管对其他值也可以采取类似的措施,诸如hexcodes或cmyk值。
[0248]
通常,颜色信息并不存在于真空中。附近的点很可能有类似的颜色。因此,给定的点的颜色可以根据其最近的邻居进行插值。
[0249]
这种预测可以用来减少原始颜色所需的存储空间,其中原始颜色可以是根据已知的测量结果而测量或计算的颜色。较大的数字需要更多的空间来存储。例如,rgb值是由一组三个值组成的,每个值各自最多三位。通过存储已知颜色和插值颜色之间的差异,存储空间得以减少。
[0250]
1300显示了镶嵌基元1301的原始颜色值的示例,颜色值存储在数据结构1302中。来自基元1301的网格顶点1、3和5属于原始网格;镶嵌顶点0、2、4和6是由镶嵌过程产生的顶点。术语内部颜色可用于与镶嵌顶点相关的颜色值,因为它们在原始小面的"内部"。
[0251]
相应的数据结构1302可以列出顶点0-6的原始颜色值作为rgb值。原始颜色值可以测量或例如通过图9中描述的方法从测量中计算出来。这些颜色值显示为非纯白色的阴影,其例如可以是牙齿小面的颜色。
[0252]
1310显示了一个用重心坐标插值颜色的方法的示例。
[0253]
基元1311与相应的数据结构1312可以有三个网格顶点,其颜色值为[246,237,237],[255,249,243],和[254,253,241]。基元1311可以被镶嵌到基元1313中;镶嵌的顶点可以有基于原始的三个顶点的重心坐标1314。重心坐标是三角形的坐标,它允许三角形上的任何点根据该点与三角形顶点的距离被映射出来。这里,它们基于[与顶点1的距离、与顶点3的距离、与顶点5的距离]而被赋予值。
[0254]
重心坐标可用于为镶嵌的顶点插值颜色值。例如,镶嵌的顶点2位于网格顶点1和3的中间,其重心坐标为[1/2,1/2,0]。因此,它的颜色值取自顶点1和3,各加权50%。对其他镶嵌顶点也是这样做的,结果得到基元1315,每个数据结构1316都有插值颜色。
[0255]
1320显示了如何存储基于插值颜色的残差。数据结构1322包含原始颜色值,数据结构1326包含插值的颜色值,而数据结构1327包含残差颜色,即1322和1326之间的差值。如从这个玩具示例可以看出,数据结构1327的字符数比1322少得多。
[0256]
图14显示了围绕平均值群集的颜色值直方图。
[0257]
图14a显示了在典型的牙科扫描中发现的顶点颜色值的直方图。
[0258]
图14b显示了在典型的牙科扫描中发现的内部颜色值的直方图。
[0259]
另一个其中减少了用于颜色值的存储的实施例包括存储原始颜色和平均颜色之间的残差。这可以与图13中对插值颜色的残差存储交替使用或结合使用。例如,顶点颜色可以作为来自平均数的残差来存储,而内部颜色可以根据来自插值的残差来存储。
[0260]
rgb值是存储颜色的一种方式。在这里,这些rgb值被转换为十进制值,以更容易地比较。从直方图14a和14b可以看出,有些颜色出现的频率比其他颜色高得多;选择最频繁的
颜色作为残差的基线允许用较少的空间存储网格中的颜色值。
[0261]
图15显示了一个用于更高效地存储重复值的实施例。
[0262]
当序列化的值被保存在存储装置中时,它们可以被更高效地存储,因为它们不需要被立即访问。做到这一点的一种方法是通过数据结构,其允许同一个值被多次读取。
[0263]
图15a显示了一个实施例,其中序列化的值被保存为一个长列表。如果你要在它们被读取以进行镶嵌时直接存储颜色,就会出现这种情况。网格1501a包括四个小面和19个顶点。数据结构1502a显示了每个小面的值存储,其中每个小面都以其中心顶点(a,h,o,v)命名,且每个值都被赋予小写字母。正如你可看到的,每个小面都存储了7个值,这意味着该列表有28个项那么长。然而,小面之间共享的顶点的值被记录了两次。
[0264]
图15b显示了一个实施例,其中值被保存,以便可以再次访问共享顶点而不是再次列出。六个小面可以存储有27个值。与图15a中只有四个小面的28个值相比。
[0265]
网格1501b包括六个小面和27个顶点。数据结构1502b显示了针对顶点存储的值。每个小面都是以网格1501b中的中心顶点命名的,得到a、h、l、p、t、x六个小面。通过以正确的顺序读取数据结构1502b,镶嵌将值分配给正确的顶点。例如,对于小面l,序列化的值将是l,d,m,n,o,j,i。
[0266]
为了从数据结构1502b中的颜色列表中读取这些内容,对于列表中的第n个小面,其中n》1,颜色0被发现处于4n+4处。
[0267]
对于n》2:要序列化的颜色从位置4n-6开始;对于n的偶数值,镶嵌顺序是[1,null,null,null,3,2,0,4,5,6],对于n的奇数值,镶嵌顺序是[1,null,null,null,null,6,5,null,0,2,3,4]。从表中可以看出,小面a(n=1)和小面h(n=2)是特殊情况。
[0268]
由于镶嵌分配值,这些值可以更高效地被存储。此外,在网格共享更多的顶点的情况下,更少的颜色需要被列出。
[0269]
图16显示了在不同的分辨率下,无颜色的网格、带有纹理包络的相同网格和带有序列化的颜色值的相同网格的文件大小的比较。
[0270]
小面1601是分辨率为1的三角形基元,即其中内镶嵌因子=1,外镶嵌因子=(1,1,1)。小面1602是分辨率为2的镶嵌的基元,其中内镶嵌因子=2,外镶嵌因子=(2,2,2)。小面1603是分辨率为4的镶嵌的基元,其中内镶嵌因子=4,且外镶嵌因子=(4,4,4)。
[0271]
表1604显示了一个实施例,比较针对特定网格以不同的分辨率和方法进行存储的文件大小。与没有颜色的网格相比,颜色所使用的kb量是确定的,为2286kb。
[0272]
在分辨率为1的情况下,带有纹理包络的网格占据3314kb,其中1028kb是颜色数据。相比之下,在分辨率为1的情况下,用序列化的颜色值进行镶嵌产生2518kb的文件大小,其中该文件的232kb用于颜色数据。
[0273]
在分辨率为2的情况下,用序列化的颜色值进行镶嵌产生3241kb的文件大小。请注意,这仍然比分辨率为1的纹理映射小,而且有两倍的颜色细节。在分辨率为4的情况下,用序列化的颜色值进行镶嵌产生5668kb的文件。
[0274]
尽管已经详细描述和显示了一些实施例,但本发明并不局限于这些实施例,而是也可以在以下权利要求中限定的主题范围内以其他方式实施。特别地,要理解的是,在不脱离本发明范围的情况下,可以利用其他实施例,且也可以对结构和功能进行修改。
[0275]
在列举几种手段的设备权利要求中,这些手段中的几种可以由同一个硬件项目来
实施。在相互不同的从属权利要求中列举某些措施或在不同的实施例中描述某些措施,这一事实并不表明这些措施的组合不能被用来发挥优势。
[0276]
一项权利要求可以指前述权利要求中的任何一项,而“任意”被理解为指前述权利要求中的“任意一项或多项”。
[0277]
本说明书中使用的术语“获取”可指使用医疗成像设备实际获取例如医疗图像,但其也可指例如将先前获取的图像或数字表示加载到计算机中。
[0278]
应该强调的是,在本说明书中使用时,术语“包括/包含”被认为是指定存在所述的特征、整数、步骤或组件,但不排除存在或增加一个或多个其他特征、整数、步骤、组件或其组。
[0279]
上面和下面描述的方法的特征可以用软件实现,并在数据处理系统或其他由执行计算机可执行指令引起的处理手段上进行。该指令可以是从存储介质或通过计算机网络从另一台计算机加载在内存—如ram—中的程序代码手段。备选地,所描述的特征可以通过硬接线电路代替软件或与软件结合来实现。
[0280]
参考文献
[0281]“渲染管线概述(rendering pipeline overview)”,opengl,https://www.khronos.org/opengl/wiki/rendering_pipeline_overview,2019年4月8日。
[0282]“镶嵌(tessellation)”,opengl,https://www.khronos.org/opengl/wiki/tessellation,2019年12月31日。
[0283]“图形管线(graphics pipeline)”,微软,https://docs.microsoft.com/en-us/windows/win32/direct3d11/overviews-direct3d-11-graphics-pipeline,2018年5月31日。
[0284]“如何使用边和内镶嵌因子完成三角形片块的镶嵌?(how triangle patch tessellation is done using edge and inner tessellation factors)”https://stackoverflow.com/questions/37647181/how-triangle-patch-tessellation-is-done-using-edge-and-inner-tessellation-factor,2016年6月5日。
[0285]
wiegand,thomas和schwarz,heiko;来自“源代码:源与视频编码基础第一部分(source coding:part i of fundamentals of source and video coding)”的“第3.5章:概率区间分割熵编码(chapter 3.5probability interval partitioning entropy coding)”,参见http://iphome.hhi.de/wiegand/assets/pdfs/vbpart1.pdf,2011年。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1