用于实时渲染复杂数据的系统和方法与流程

文档序号:18706180发布日期:2019-09-17 23:44阅读:264来源:国知局
用于实时渲染复杂数据的系统和方法与流程

本发明总体上涉及在计算机上渲染数据。更具体地,本发明涉及在二维(2d)显示器、虚拟现实和/或增强现实上渲染三维(3d)对象。



背景技术:

目前,可以渲染三维(“3d”)对象。当前系统可以允许可视化通过例如成像装置、其他系统和/或输入获得的3d对象。目前,可以处理3d对象,用于3d打印、在二维(“2d”)屏幕上可视化、和/或在增强和/或虚拟现实中可视化。

当前3d对象可以为医疗专业人员提供重要信息。例如,对于对新生儿进行心脏手术的医生来说,将新生儿的心脏(而不是普通的新生儿心脏模型)可视化,可能是手术成功和失败的区别。可以期望经由计算机屏幕(例如,二维(“2d”)屏幕)、经由虚拟现实、经由增强现实和/或通过3d打印新生儿模型来可视化。

当前用于可视化3d对象的系统可能是有限的。例如,虽然3d对象可以呈现给用户(例如,医生),但是可以是通常以足够的速度渲染3d对象以避免当缩放或旋转对象时延迟的呈现。延迟可能会很长,以至于无法实现利用这些当前系统。例如,医生可能想要在患者观看的情况下可视化3d对象。在另一示例中,医生可能想要与另一医生一起检查3d对象。在这些场景中,当前系统渲染体积所需的持续时间可能会阻止医生在实时处理可能更重要的场景中使用这些当前系统。例如,用于渲染具有100个切片的ct图像的当前方法可以具有2帧/秒的渲染速率。虚拟现实可能需要以90帧/秒的速度渲染。

另外,当前系统可能无法以高分辨率渲染3d对象,从而当观看时可以明确对象的小细节(例如,心脏的血管)。精度方面的一个困难包括区分3d对象的不同部分。例如,当渲染包括组织的3d对象时,当前的渲染技术通常不能区分软组织和血管。因此,这两个部分通常渲染为具有相同的颜色。因此,可以期望以足够的速度和/或精度对3d对象进行体渲染,使得该渲染是可用的。



技术实现要素:

本发明的一个优点在于,可以在可视化和/或3d打印期间提供更大的渲染速度和/或更少的数据量,例如,通过提供比已知方法更快和/或需要更少计算的方法。

本发明的另一优点在于,可以提供3d对象的更精确的表示,例如,以高保真度显示对象的小细节。本发明的另一优点在于,当可视化时,可以提供更快的缩放、旋转、网格创建、掩模创建、数据修改以及3d对象片段的添加和/或移除。本发明的另一优点在于,可以允许改进对象各部分之间的区分。

根据本发明的实施例,提供了用于体渲染三维(3d)图像数据的方法以及包含用于产生该方法的程序指令的非暂时性计算机可读介质。

根据本发明的实施例,一种方法可以包括:针对3d成像数据中的每个体素,确定材料分类;针对每个材料分类,确定对应传递函数;并且基于对应于与体素对应的材料分类的传递函数,渲染3d成像数据中的每个体素。确定对应传递函数可以进一步基于hu值。

在本发明的一些实施例中,确定材料分类,还可以包括:确定初始材料分类;分割3d成像数据;并且基于初始材料分类和分割的3d成像数据,确定材料分类。确定初始材料分类值可以基于相应体素的hu值、概率图或其任意组合。

在本发明的一些实施例中,分割基于每个体素的梯度的大小。分割3d成像数据还可以包括确定分割的3d成像数据之间的交集。

根据本发明的实施例,另一种方法可以包括:对3d对象执行第一光线投射,以产生第一中间帧,该第一光线投射具有第一开始位置和第一步长;对3d对象执行第二光线投射,以产生第二中间帧;并且混合第一中间帧和第二中间帧,以渲染3d对象。

第一光线投射可以具有第一位置和第一步长,第二光线投射可以具有第二开始位置和第二步长。第一开始位置和第二位置可以不同,并且第一步长和第二步长可以不同。第一步长可以基于重铸的采样速率。第二步长可以基于第一步长和偏移量。

在本发明的一些实施例中,第二开始位置可以是具有偏移值的第一开始位置。偏移值可以随机生成、由用户输入或其任意组合。

在本发明的一些实施例中,混合第一中间帧值和第二中间帧值还可以包括:对于相同像素位置处的第一中间帧和第二中间帧中的每个像素,混合像素位置处的第一中间帧值和第二中间帧值,以确定像素位置处的最终像素值。

在本发明的一些实施例中,混合第一中间帧值和第二中间帧值还可以包括将第一中间帧值和第二中间帧值平均、执行第一中间帧值和第二中间帧值的加权平均、累积平均或其任意组合。

根据本发明的实施例,另一种方法可以包括基于3d对象生成体素网格。该体素网格中的每个体素可以具有三维位置、尺寸规格和体素值。该体素网格中的每个体素可以表示具有相应尺寸规格的3d立方体体积的中心点。尺寸规格可以由用户基于3d对象的类型、3d对象的尺寸及其任意组合来输入。

针对体素网格中的每个体素:可以确定3d立方体体积是否为空。如果3d立方体体积为空,则可以为体素网格中的当前体素分配空值。如果3d立方体体积不为空,则可以为体素网格中的当前体素分配当前值。针对体素网格中具有当前值的每个体素,可以基于对应3d对象将对应3d立方体体积渲染到帧,以用于在2d屏幕上显示。

在一些实施例中,该方法包括将基于当前值和空值的体素网格渲染到帧,用于在3d屏幕上显示。可以对图形处理单元执行渲染。

附图说明

本公开的实施例的非限制性示例将在下文中参考在本段之后列出的附图进行描述。出现在多个图中的相同特征通常在它们出现的所有图中用相同的标签标记。在图中标记代表本公开的实施例的给定特征的图标的标签可以用于引用给定特征。选择图中所示特征的尺寸是为了方便和清楚呈现,并不一定按比例显示。

在说明书的结尾部分特别指出并明确要求保护被认为是本发明的主题。然而,当结合附图阅读时,通过参考以下详细描述,可以最好地理解本发明的组织和操作方法及其目的、特征和优点。本发明的实施例以示例的方式示出,并且不限于附图中的图,其中,相同的附图标记表示对应的、相似的或类似的元件,并且其中:

图1示出了根据本发明的说明性实施例的用于体渲染的计算系统的框图;

图2示出了根据本发明的说明性实施例的用于渲染3d对象的方法的流程图;

图3示出了根据本发明的说明性实施例的可与图2的方法一起使用的表;

图4示出了根据本发明的说明性实施例的用于渲染3d对象的方法的流程图;

图5示出了根据本发明的说明性实施例的用于渲染3d对象的方法的流程图;以及

图6示出了根据本发明的一些实施例的体积、优化树和帧的截屏。

应当理解,为了简单和清楚说明,图中所示的元件不一定是精确地或按比例渲染的。例如,为了清楚起见,一些元件的尺寸可以相对于其他元件放大,或者几个物理组件可以包括在一个功能块或元件中。此外,在认为合适的情况下,可以在图中重复附图标记,以指示对应或类似的元件。

具体实施方式

在以下详细描述中,阐述了许多具体细节,以便提供对本发明的透彻理解。然而,本领域技术人员将理解,在没有这些具体细节的情况下,也可以实施本发明。在其他情况下,没有详细描述众所周知的方法、过程和组件、模块、单元和/或电路,以免使本发明模糊。相对于一个实施例描述的一些特征或元件可以与相对于其他实施例描述的特征或元件相结合。为了清楚起见,不能重复讨论相同或相似的特征或元件。

尽管本发明的实施例不限于该方面,但是利用诸如“处理”、“计算”、“估算”、“确定”、“建立”、“分析”、“检查”等术语的讨论可以指计算机、计算平台、计算系统或其他电子计算装置的操作和/或过程,其操纵和/或将表示为计算机寄存器和/或存储器中的物理(例如,电子)量的数据转换为类似地表示为计算机寄存器和/或存储器或者其他信息非暂时性存储介质中的物理量的其他数据,这些介质可以存储执行操作和/或过程的指令。尽管本发明的实施例不限于该方面,但是本文使用的术语“复数个”和“多个”可以包括例如“多个”或“两个或更多”。术语“复数个”或“多个”可以在整个说明书中用来描述两个或多个组件、装置、元件、单元、参数等。本文使用的术语集可以包括一个或多个项目。除非明确声明,否则本文描述的方法实施例不限于特定的顺序或序列。此外,一些所描述的方法实施例或其元件可以同时、在同一时间点或并行发生或执行。

图1示出了根据本发明的说明性实施例的用于体渲染的计算系统的框图。计算系统100可以包括控制器105,控制器105可以是例如图形处理单元(gpu)和/或中央处理单元处理器(cpu)、芯片或任何合适的计算或计算装置、操作系统115、存储器120、可执行代码125、存储系统130、输入装置135和输出装置140。

控制器105(或一个或多个控制器或处理器,可能在多个单元或装置上)可以执行本文描述的方法,和/或执行各种模块、单元。

操作系统115可以包括能够执行涉及计算系统100的协调、调度、仲裁、监督、控制或其他管理操作的任务的任何代码段(例如,类似于本文描述的可执行代码125的代码段),例如,调度软件程序或可执行代码段的执行,或者使软件程序或其他模块或单元能够通信。操作系统115可以是商业操作系统。

存储器120可以是随机存取存储器(ram)、只读存储器(rom)、动态ram(dram)、同步dram(sd-ram)、双数据速率(ddr)存储器芯片、闪存、易失性存储器、非易失性存储器、高速缓冲存储器、缓冲器、短期存储器单元、长期存储器单元、或其他合适的存储器单元或存储单元或其任意组合。存储器120可以是或可以包括多个存储单元。存储器120可以是计算机或处理器非暂时性可读介质或计算机非暂时性存储介质,例如,ram。

可执行代码125可以是任何可执行代码,例如,应用程序、程序、过程、任务或脚本。可执行代码125可以在操作系统115的控制下可能由控制器105执行。例如,可执行代码125可以是在2d屏幕上渲染3d对象或者产生用于通过3d打印机打印3d对象的指令的应用程序,如本文进一步描述的。尽管为了清楚起见,在图1中示出了可执行代码125的单个项,但是根据本发明的一些实施例的系统可以包括类似于可执行代码125的多个可执行代码段,这些可执行代码段可以加载到存储器120中并使得控制器105执行本文描述的方法。例如,本文描述的单元或模块可以是或可以包括控制器105、存储器120和可执行代码125。

存储系统130可以是或可以包括例如硬盘驱动器、光盘(cd)驱动器、可记录光盘(cd-r)驱动器、蓝光光盘(bd)、通用串行总线(usb)装置或其他合适的可移动和/或固定存储单元。内容可以存储在存储系统130中,并且可以从存储系统130加载到存储器120中,在存储器120中可以由控制器105处理。如图所示,存储系统130可以存储3d对象(例如,成像数据131)、掩模数据132、渲染数据133、传递函数数据134、体素网格数据136和/或材料id列表137。3d对象可以包括表示3d对象的任何数据。3d对象可以包括3d成像数据、网格数据、体积对象、多边形网格对象、点云、3d对象的功能表示、cad文件、3dpdf文件、stl文件和/或可以表示3d对象的任何输入。3d成像数据可以包括医学成像数据,包括计算机断层摄影(“ct”)成像数据、锥形束计算机断层摄影(“cbct”)成像数据、磁共振成像(“mri”)成像数据和/或mra成像数据(例如,具有造影剂的mri)或超声成像数据。3d对象可以是解剖学(例如,复杂解剖学)、工业数据或任何3d对象。

本文进一步描述存储在存储系统130中的数据。对于本领域普通技术人员来说显而易见的是,存储系统130和其中的每个数据集都可以在一个存储系统中或者以各种配置分布到多个存储系统中。

在一些实施例中,可以省略图1所示的一些组件。例如,存储器120可以是具有存储系统130的存储容量的非易失性存储器。因此,尽管显示为独立的组件,存储系统130可以嵌入或包括在存储器120中。

输入装置135可以是或可以包括鼠标、键盘、触摸屏或触摸板或任何合适的输入装置。将认识到,任何合适数量的输入装置都可以可操作地连接到计算系统100,如方框135所示。输出装置140可以包括一个或多个屏幕、显示器或监视器、扬声器和/或任何其他合适的输出装置。将认识到,任何合适数量的输出装置都可以可操作地连接到计算系统100,如方框140所示。

如方框135和140所示,任何适用的输入/输出(i/o)装置都可以连接到计算系统100。例如,有线或无线网络接口卡(nic)、打印机、通用串行总线(usb)装置或外部硬盘驱动器可以包括在输入装置135和/或输出装置140中。

根据本发明的一些实施例的系统可以包括组件,例如但不限于多个中央处理单元(cpu)或任何其他合适的多用途或特定处理器或控制器(例如,类似于控制器105的控制器)、多个输入单元、多个输出单元、多个存储器单元和多个存储单元。系统还可以包括其他合适的硬件组件和/或软件组件。在一些实施例中,系统可以包括或可以是例如个人计算机、台式计算机、膝上型计算机、工作站、服务器计算机、网络装置或任何其他合适的计算装置。例如,本文描述的系统可以包括一个或多个装置,例如,计算系统100。

成像数据131可以是本领域已知的任何成像数据,例如,成像数据131可以是医疗数据,例如,由ct系统或mri系统和/或cbct系统产生的数据。

掩模132中包括的掩模可以对应于对象类型。例如,对于心脏的对象,掩模可以是右心室、左心室、右主动脉、左主动脉。对于手机来说,掩模可以是按键、按钮、电线、电脑芯片、屏幕等。掩模可以是例如数据构造,包括例如较大数据集中每个体素或数据点的布尔值(例如,1/0,是/否)。掩模可以包括指定体素外观的视觉标记(例如颜色和/或图案)。当应用于较大数据集时,掩模可以指示标记或未标记体素。

在一些实施例中,接收3d对象(例如,诸如头部或心脏的器官)的输入。系统可以从存储器中检索对应于对象类型的一组掩码。系统可以用对应3d对象数据填充这组掩模中的每个掩模。例如,可以从存储器中检索心脏、左室掩模和右室掩模的成像数据。对应于心脏右室的成像数据的一部分可以分配给右室掩模,并且对应于左室掩模的成像数据的一部分可以分配给左室掩模。

对掩模执行的操作可以包括对体素执行的操作,例如,侵蚀、扩大、扩展或收缩体素尺寸等。应当理解,掩模、网格和体素可以是本领域已知的数字对象,或者可以由数字对象来表示或描述,因此,可以对掩模、网格和体素或者在其上执行任何形态学或逻辑运算,并且在本文进行描述。例如,扩大体素可以包括改变体素的一个或多个值,例如,尺寸、位置等。

例如,使用形态学或逻辑运算,可以用半径为r的球形元件来扩大体素组a(本文表示为),可以用半径为r的球形元件来侵蚀体素组a(本文表示为),可以用半径为r的球形元件来打开体素组a(本文表示为),并且可以用半径为r的球形元件来闭合体素组a(本文表示为)。

该系统可以将分配了成像数据的掩模组渲染成能够在2d屏幕上显示、在虚拟现实中显示、在增强现实中显示和/或3d打印的格式。例如,基于从ct或mri系统接收的成像数据以及基于一组掩模,一些实施例可以产生用于在2d屏幕上显示3d对象的帧。

渲染数据133可以是可用于渲染图像或打印3d对象的任何数据。例如,渲染数据133可以是可用于渲染或打印本领域已知的图像或对象的一组像素值(例如,rgba和hu值、色调、强度等),和/或渲染数据133可以是可用于使3d打印机打印本领域已知的对象的一组指令。

传递函数134可以是任何函数或逻辑。例如,传递函数134可以是接收一组输入值(例如,hu值和材料标识)并产生像素描述(例如,像素的rgba值、位置或偏移等)作为输出的函数或逻辑。例如,传递函数134可以包括用于相应器官组的一组转换表,例如,用于心脏的第一转换表、用于骨骼的第二转换表,并且每个转换表可以将hu值与所描述的像素描述相关联。

体素网格136可以是表示空间或体积的一组体素。例如,体素网格可以是表示包含3d器官或系统的空间的一组体素,例如,体素网格中的体素可以覆盖、包括或占据包括血管或系统、头部等的3d表示的空间。可以使用任意数量的体素网格,例如,第一体素网格可以覆盖整个对象、器官或空间,第二体素网格可以覆盖或涉及骨骼,第三体素网格可以描述、包括、覆盖或涉及血管等。

材料标识(id)列表137可以是将一组值映射或链接到相应材料组的任何列表、表或构造。例如,材料id列表137可以将hu值映射到材料,例如,如图3中的表310所示。

网格(或现有技术中已知的多边形网格或三角形网格)可以是定义或描述3d对象的一组顶点、边和面。如本领域所知,网格可用于3d打印的格式的转换。

在体渲染期间,可以期望渲染区分3d成像数据的各部分的体积。例如,在成像过程中区分骨骼和患者躺的床。

在一个方面,本发明可以包括基于材料分类索引针对3d成像数据中的每个体素从一组传递函数中确定传递函数。改变3d成像数据内的体素之间的传递函数,可以允许具有清晰度的高质量图像,例如,通过选择对应于被渲染的对象的特定部分的传递函数。

图2是根据本发明的说明性实施例的用于体渲染的方法的流程图。该方法包括确定3d成像数据中每个体素的材料分类(步骤210)。可以基于体素的一个或多个属性值来确定材料分类。例如,可以基于hu属性如下确定材料分类:可以给hu值在-2048到-600范围内的体素分配空气的材料分类,可以给hu值在200到450范围内的体素分配骨骼的材料分类。

在一些实施例中,通过i)执行3d成像数据中的体素的初始材料分类,ii)分割3d成像数据中的体素,和/或iii)执行3d成像数据中的分割体素的最终材料分类,来确定材料分类。

i.执行初始材料分类

初始分类可以基于3d成像数据的类型(例如,ct成像数据、cbct成像数据或mra(mr加造影剂)成像数据)而变化。

对于ct成像数据,初始材料分类可以基于hu属性。例如,图3示出了可用于确定初始材料分类的表310的示例。如表310所示,hu范围可以对应于材料类型。对于本领域普通技术人员来说显而易见的是,表310仅仅是一个示例,并且hu值可以分配给不同的材料类型。

对于cbct成像数据,初始材料分类可以基于偏置场估计的结果。如m.n.ahmed等人在“amodifiedfuzzyc-meansalgorithmforbiasfieldestimationandsegmentationofmridata”2002,医学成像的ieee期刊中所示,可以确定偏置场估计,该论文的全文通过引用结合于此,以下作为示例输入:期望均值σ=0.5,ε=10-5,α=1,p=2。可以通过用平均值ui确定6个高斯的高斯混合模型来确定期望均值。每种材料的期望均值可以通过最大化[-500,3000]范围内的体素来确定。期望均值可以设置为[u1,…u6,-1000]。偏置场估计的输出可以表示针对每种材料的偏置场和3d体积pi的一组概率。最佳概率图(bpm)可以基于每个体素的最大概率的指数i来确定。初始材料分类可以基于bpm值。例如,bpm值为7的体素可以初始分类为“空气”;bpm值为1、2、3的体素可以被初始分类为“软组织”;bpm值为4、5、6的体素可以被初始分类为“骨骼”。

对于mra成像数据,初始材料分类可以基于偏置场估计,例如,如上关于cbct成像数据所述,以下作为示例输入:期望均值σ=1,ε=10-5,a=1,p=2。可以通过用平均值ui确定5个高斯的高斯混合模型来确定期望均值。可以基于平滑和/或过滤的mra成像数据来计算每种材料的期望均值。

例如,可以平滑mra成像数据和/或可以确定背景阈值。mra成像数据可以经由高斯平滑方法进行平滑,其中,σ=1。背景阈值可以如下如方程1和方程2所示确定:

nodatathreshold=0.02*maxhu(smoothedmraimagingdata)方程1

modifiedmraimagingdata=[i>nodatathreshold]方程2。

期望均值可以设置为[u1,…u5]。可以基于偏置场估计的输出来确定bpm。mra成像数据的初始材料分类可以基于bpm值。例如,bpm值为1的体素可以被初始分类为“空气”;所有未被分类为空气的体素都可以被分类为“身体”;“身体”周围的体素可以被分类为“皮肤”;被分类为“身体”而未被分类为“皮肤”的bpm值为2的体素可以被分类为“软组织”;被分类为“身体”而未被分类为“皮肤”的bpm值为3的体素可以被分类为“肌肉”;被分类为“身体”而未被分类为“皮肤”的bpm值大于4的体素被分类为“脉管系统”;剩余的体素被分类为“噪声”。

ii.分割体素

可以基于初始材料分类索引,分割3d成像数据体素。例如,假设材料分类是骨骼、脉管系统和肌肉。具有骨骼材料分类的3d成像数据中的每个体素可以分割成第一段,具有脉管材料分类的3d成像数据中的每个体素可以分割成第二段,并且具有肌肉材料分类的3d成像数据中的每个体素可以分割成第三段。

在一些实施例中,分割还可以包括扩大、侵蚀、打开和/或关闭最初分割的体素。在一些实施例中,分割可以基于3d成像数据的类型(例如,ct成像数据、cbct成像数据或mra成像数据)而变化。

在一些实施例中,可以将ct成像数据分割成血管、骨骼、肌肉和/或低对比度脉管系统。对于血管段(“vesselsegment”),可以如下确定分割:

a.被初始分类为“骨骼”或“脉管系统”的体素可以分割成一般段(“generalsegment”);

b.被初始分类为“致密骨”或“牙齿”的体素可以分割成可能的金属段(“possiblemetalsegment”);

c.被初始分类为“脉管系统”的体素可以间歇地分割成下脉管段(“lowvesselsegment”);

d.

可以如下确定梯度的大小如方程3至方程6所示:

其中,x'、y'和z'是正在为其确定材料分类索引的当前体素的坐标。可以如下确定梯度的大小,如方程7所示:

e.

f.vesselsegment=vesselsegment∪

(possiblemetalsegment∩generalsegment),例如,步骤“f”可以移除血管周围的支架或其他金属元件的图像;

g.例如,步骤“g”可以将小血管相互连接,打开操作可以去除由肌肉组织引起的噪音;

h.例如,步骤“v”可将小血管连接到血管段中的大血管,并可以从血管周围的骨组织中去除噪音;

i.从血管段中移除低于1000体素的所有连接组件,例如,消除由小连接组件表征或引起的噪声;以及

j.vesselsegment=vesselsegment⊙4,例如,血管段可以包括血管组织或软组织边界。

可以如下确定骨骼段(“bonesegment”):

a.被初始分类为“骨骼”或“致密骨”或“牙齿”的体素可以分割成真正的骨骼段(“truebonesegment”);

b.从真正的骨骼段中移除低于50个体素的连接组件,例如,步骤“b”可以减少被分类为骨骼的钙化;

c.例如,可以确保真正的骨骼段覆盖密集骨骼组织周围的区域;

d.

e.从可能的骨骼段中移除不通过100个体素接触真正的骨骼段的每个连接组件,以获得骨骼段,例如,步骤“e”可以将软组织体素连接到致密骨组织体素。

可以如下确定肌肉段(“musclesegment”):

a.被初始分类为“肌肉”的体素可以分割成肌肉段;

b.被初始分类为“脉管系统”的体素可以分割成低对比度片段(“lowcontrastsegment”)。

在一些实施例中,被分割为“脉管系统”或“骨骼”的某些体素未正确地分割,因为它们可以是另一对象的体素(例如,hu>100的对象)。在一些实施例中,体素可以如下分割为“床”或“皮肤”:

a.hu大于-150的体素可以分割成相关段(“relevantsegment”);

b.相关段中最大的连接组件可以分割成对象段(“objectsegment”);

c.例如,步骤“c”可以填充对象段中的孔,对象段可以描述场景中的对象体及其周围环境;

d.

e.

在一些实施例中,cbct成像数据可以分割成皮肤和/或噪声。可以如下确定cbct皮肤段(“skinsegment”)和噪声段(“noisesegment”):

a.cbct三维成像数据的最小值可以标记为(“minhuval”);

b.可以确定可能的对象段(“probableobjectsegment”):

c.对象段(“objectsegment”)可以通过区域增长的具有标准偏差(例如,10)的可能的对象段来确定,将hu值限制在[-600,-500]之间;

d.松弛的对象段(“objectsegmentrelaxed”)可以是区域增长的可能的对象段的结果,其中,hu值为[-700,-500],并且标准偏差为10;

e.

例如,步骤“e”可以填充对象段中的孔;

f.

g.

h.可以确定dicom场景段(“dicomscenesegment”):

dicomscenesegment=[hu>minhuval];

i.例如,步骤“i”可以填充dicom场景段中的孔;

j.移除dicom场景掩膜中的最后50行,例如,由于大多数扫描都是管状的,因此可能需要步骤“j”,因此可以忽略颅骨的后部;

k.

l.

iii.执行最终材料分类

可以确定最终材料分类。在一些实施例中,3d成像数据可以具有等同于初始材料分类的最终材料分类。

可以基于分割对3d成像数据进行最终实质性分类。

在各种实施例中,对于ct成像数据,属于)的体素最终可以实质性分类为“致密骨”;属于(generalsegment∩(vesselsegment∩)))的体素可以最终实质性分类为“脉管系统”;属于(truebonesegment∩(musclemsak∪lowcontrastsegment)))的体素可以分类为“骨骼/脉管系统”;属于的体素可以最终实质性分类为“噪声”。

在一些实施例中,使用具有“脂肪”体素的1个体素半径的开放操作,移除具有“脂肪”初始材料分类的体素。移除的体素可以最终实质性分类为“噪声”。

在各种实施例中,皮肤段中的体素可以最终实质性分类为“皮肤”,和/或“床段”中的体素可以最终实质性分类为“床”。

在各种实施例中,对于cbct成像数据,属于噪声段的体素最终实质性分类为“噪声”,并且皮肤段最终实质性分类为“皮肤”。

在一些实施例中,mra成像数据的体素根据其初始材料分类最终实质性分类。

可以对体素材料分类进行各种校正或修改。例如,可能存在hu值远离其初始阈值的体素(例如,由于如上所述的操作),这些体素可能被错误分类。为了纠正这种错误分类,一个实施例可以执行以下一些或全部步骤:

a.hu大于-20的“脂肪”体素分类为脉管系统;

b.与骨组织体素相邻的“脂肪”体素分类为“骨骼”;

c.hu大于390的“肌肉”体素分类为骨骼/脉管系统;

d.hu大于10的“皮肤”体素分类为肌肉。

确定用于ct成像数据的材料分类索引还可以包括确定输入ct成像数据的最大维度(例如,最大宽度/长度/深度),并且如果最大维度高于阈值,则ct成像数据可以缩放到例如预定维度。

该方法还可以包括为每个材料分类确定传递函数(例如,传递函数134,如上面图1中所述)(步骤215)。例如,如果3d成像数据的第一体素的材料分类(例如,指示骨骼)不同于第二体素的材料分类(例如,值指示组织),则可以使用第一传递函数来渲染第一体素,并且可以使用第二传递函数来渲染第二体素。第一传递函数和第二传递函数可以不同。

可以通过从一组传递函数中选择一个传递函数来确定传递函数。这组传递函数可以存储在存储器中和/或由用户输入。这组传递函数可以基于特定对象类型的期望颜色。例如,血管通常是红色的,骨骼通常是白色的。因此,传递函数可以包括红色和白色之间的平滑颜色传递。对于普通技术人员来说显而易见的是,所讨论的这种传递函数和颜色仅仅是示例性的。在一些实施例中,对于不同的hu/灰度值(例如,对于cbct和/或mra),传递函数可以是常数。表1如下显示了基于分类和hu值的传递函数的示例:

表1

在一些实施例中,多个材料分类可以具有相同的传递函数。例如,对于cbct成像数据,分类为“软组织”的材料可以具有与分类为“脂肪”的材料相同的传递函数。在另一示例中,分类为“骨骼”的材料可以具有与分类为“致密骨”的材料相同的传递函数。

该方法还可以包括通过应用对应于与体素对应的材料分类的传递函数来渲染每个体素(步骤220)。传递函数可以接收相应体素的hu值,作为输入。基于hu值,传递函数可以输出颜色(例如,rgb颜色),来渲染体素。

图4是根据本发明的一些实施例的用于体渲染的方法的流程图。渲染3d对象可以包括识别受关注区域并确定该受关注区域中要渲染的点。例如,渲染3d对象可以包括光线投射。对于在2d屏幕上渲染的每一帧,在虚拟现实设置和/或增强现实设置内,可以执行光线投射。每次可视化图像改变(例如,缩放、旋转和/或修改)时,通常可以确定多个新帧,并且对于每个新帧,可以执行射线投射。当前用于射线投射的方法可以计算密集和/或导致大量数据,这可能导致非常慢地经由射线投射渲染3d对象。例如,在2d屏幕上渲染心脏的3d对象,使得用户可以旋转心脏,可以导致心脏旋转时的图像出现像素化和/或导致用户的计算机崩溃。该方法可以包括递增射线投射,这可以导致计算强度和/或数据量减少。

该方法可以包括对3d对象执行第一光线投射,以产生第一中间帧,第一光线投射具有第一开始位置和第一步长(步骤410)。射线投射可以具有采样速率,步长可以基于采样速率。例如,如果采样速率是每条射线10个点,则步长可以是1/10。3d对象可以用体积来描述。该体积可以是完全包围(或基本完全包围)3d对象的立方体。

体积大小可以取决于3d对象的大小、3d对象的分辨率或其任意组合。例如,由于例如高分辨率扫描,儿科心脏ct可以在物理上很小,但是体积可以很大。在一些实施例中,体积可以具有255×255×300体素的大小。在各种实施例中,体积是本领域已知的任何体积形状。

第一开始位置可以是第一体素,其在从视点方向看的体积中具有数据。

该方法可以包括对3d对象执行第二射线投射,以产生第二中间帧(步骤415)。第二射线铸造可以包括第二步长的第二开始位置。第一开始位置和第二开始位置可以不同。第二开始位置可以偏离第一开始位置。偏移量可以是随机生成的数字、用户输入、基于gpu的噪声函数、常数值或其任意组合。在一些实施例中,偏移量是0和1之间的随机数。在一些实施例中,对偏移进行检查,以确保第二开始位置不超过距第一开始位置的预定距离。

第一步长和第二步长可以不同。第二步长可以偏离第一步长。在一些实施例中,偏移量大于第一步长的1/4。

如步骤420处所示,该方法可以包括混合第一中间帧和第二中间帧,以渲染3d对象。混合第一中间帧和第二中间帧可以包括混合在帧中相同位置处的第一帧和第二帧的像素值(例如,颜色值)。

在一些实施例中,混合值包括取在帧中相同位置处的第一中间帧和第二中间帧的像素的平均值。在一些实施例中,混合值包括取像素的加权平均值。例如,可以给第一帧提供较高的权重,并且给第二后续帧提供较低的权重,使得第二后续帧对所得像素或帧的影响较小。在一些实施例中,可以与基于3d对象数据类型选择的其他功能进行混合。例如,如果3d对象数据类型是网格并且执行光线相交,则可以使用能够混合两个或更多光线相交的混合函数。

在一些实施例中,执行射线投射超过n次,其中,n是整数。在一些实施例中,n基于渲染对象中期望的细节水平。在一些实施例中,n是输入。每次进行射线投射时,所进行的每次射线投射的开始位置和/或步长可以与先前的射线投射操作不同或相同。在这些实施例中,每次进行射线投射时,混合可以包括确定所有射线投射的累积平均值。在一些实施例中,每次投射光线时,添加细节和/或渲染对象将显得更丰富。在一些实施例中,执行射线投射的次数取决于图像的期望保真度水平。

如上所述,当前用于体渲染的方法可能非常慢。一个困难是,通常在体渲染期间,无论是否存在,都渲染体积中的所有体素。例如,体积的某些部分可以不包含或包括对应数据。例如,头部的3d对象只能占据64×64×256体素大小的体积的一部分。渲染64×64×256体积中的所有体素可能是低效的,因为许多体素没有任何受关注的要渲染的数据(例如,对象之外或与对象无关的数据)。在各种实施例中,体积是本领域已知的任何体积形状。

图5是根据本发明的说明性实施例的用于体渲染的方法的流程图。通常,该方法可以包括在体积内创建立方体,并确定每个立方体内是否存在任何数据(例如,确定体素网格)。如果立方体是空的,则该方法可以包括将立方体标记为空的,例如,通过给体素分配预定义的值。如果立方体不是空的,例如,包括数据,则该方法可以包括使用立方体的值来将3d对象渲染到帧,以用于在2d屏幕上显示。以这种方式,可以减少要渲染的立方体的数量。在各种实施例中,立方体是本领域已知的任何体积形状。

该方法可以包括基于3d对象生成体素网格,体素网格中的每个体素具有3d位置、尺寸规格和体素值(步骤510)。体素网格中的每个体素可以表示3d立方体体积的中心点。可以使用多个3d立方体体积,使得它们填充体积空间。

例如,体积可以具有255×255×300体素的大小。多个3d立方体可以在体积内生成为3d立方体体积,多个3d立方体中的每一个在体积内具有唯一的3d位置。3d立方体体积可以有尺寸规格。尺寸规格可以是在3d立方体体积中包含的多个体素或3d尺寸规格(例如,a×b×c体素)。例如,3d立方体体积可以具有27个相邻体素的尺寸规格。在该示例中,3d立方体体积的大小为3×3×3体素。在另一示例中,3d立方体体积可以具有4×4×4体素的尺寸规格。在该示例中,在3d立方体体积中设置有64个体素。尺寸规格可以由用户输入和/或取决于3d对象的对象类型。

可以通过确定每个3d立方体体积的中心点并将该中心点分配给体素网格,来生成体素网格。例如,假设体积具有四个3d立方体,并且在每个3d立方体中设置有四个体素。在这个示例中,体积有16个体素,并且该体素网格有4个体素。

该方法还包括对于体素网格中的每个体素:i)确定3d立方体体积是否为空,以及ii)如果3d立方体体积为空,则为体素网格中的当前体素分配空值,否则为体素网格中的当前体素分配当前值(步骤515)。

确定3d立方体体积是否为空,可以包括评估采样的体素。如果采样的体素包含值,则确定3d立方体体积不为空。如果采样的体素不包含值,则确定3d立方体体积为空。在一些实施例中,如果采样的体素的值高于阈值,则确定3d立方体体积不为空,并且如果低于阈值,则确定3d立方体体积为空。

通过识别和忽略体积中数据很少或没有数据的部分,处理会大幅减少。例如,位于头部的3d模型周围的空间(例如,空气)中的立方体可以具有零值,并且可以忽略,因此,大幅减少了所需的处理。

在一些实施例中,通过设置立方体的大小(例如,相对于3d对象的大小和/或1/64立方体的大小,64×64×64),检查每个立方体的输入数据(例如,ct数据),来创建树结构,如果立方体中的输入数据(例如,ct数据)没有大于阈值的值,则一些实施例可以将立方体标记为不受关注(例如,给其提供零值或表示没有数据的任何其他预定义值)。可以在进一步处理中忽略标记为不受关注(例如,不包含数据)的立方体,例如,排除在树结构之外。

如果在立方体中发现大于阈值的值,则一些实施例可以将立方体标记为受关注的(例如,给其提供表示数据的一个或任何其他预定义值的值)。标记为受关注(例如,包含数据)的立方体可以插入或包括在树结构中。在一些实施例中,可以基于树结构,例如,基于标记为受关注的立方体,来创建网格。

该方法还可以包括对于具有当前值的体素网格中的每个立方体,基于对应3d对象渲染对应3d立方体体积(步骤520)。例如,如果体积中的立方体包括数据(例如,指示或对应于诸如骨骼或血管的对象的rgba值),则可以基于立方体的数据来确定在2d帧中表示立方体的像素的值。在一些实施例中,包括标记为受关注的立方体的树可以由cpu(例如,控制器105)创建。在一些实施例中,树可以由专用硬件单元创建,例如,由图形处理单元(gpu)创建。

例如,在一些实施例中,gpu可以定义体素网格,例如,基于gpu的存储器中的64×64×64体素生成体素网格,该体素网格在每个点处具有立方体(每个点具有3d位置和3d尺寸)。应当注意,与cpu相比,用gpu实现图5的方法可以提高速度。

用户可以定义实施例可以在其上搜索具有(和/或不具有)所述数据的立方体的3d空间的尺寸。例如,用户可以选择任何其他尺寸,而不是所述的尺寸64×64×256的体积。可以使用任何采样速率、步长或分辨率,例如,可以使用16×16×16立方体,来代替用于分析gpu中立方体的8×8×8立方体,例如,以便提高性能。

图6示出了根据本发明的一些实施例的体积、优化树和帧的截屏。如截屏610所示,体积可以由单个立方体表示。如截屏620所示,该体积可以分成更小的立方体。例如,一些实施例可以将体积分成可能具有相同的尺寸的更小的立方体,而不是对完整的或整个体积使用一个立方体。立方体的颜色可以基于体积中的某个区域是否包含数据。截图630示出了使用所述树创建的体渲染的示例。

对于本领域普通技术人员来说显而易见的是,体渲染可以包括执行材料分类、树优化和增量射线投射的任意组合。

在本申请的说明书和权利要求中,每个动词“包括”、“包含”和“具有”及其缀合物用于指示动词的一个或多个对象不一定是动词的一个或多个主题的组件、元件或部分的完整列表。除非另有说明,诸如“基本上”和“大约”的形容词修饰本公开的实施例的一个或多个特征的条件或关系特性,应理解为表示该条件或特性限定在所描述的实施例的操作可接受的公差范围内。此外,单词“或”被认为是包含性的“或”,而不是排他性的“或”,并且表示其所结合的项目中的至少一个或任何组合。

本申请中对本发明实施例的描述是以示例的方式提供的,并不旨在限制本发明的范围。所描述的实施例包括不同的特征,并非所有实施例都需要这些特征。一些实施例仅利用一些特征或特征的可能组合。本领域普通技术人员将会想到所描述的本发明的实施例以及包括所描述的实施例中所指出的特征的不同组合的实施例的变型。本发明的范围仅由权利要求限定。

除非明确声明,否则本文描述的方法实施例不限于特定的时间顺序或先后顺序。此外,在方法的一系列操作期间,可以跳过或重复一些所描述的方法元件。

虽然本文已经示出和描述了本发明的某些特征,但是本领域技术人员可以想到许多修改、替换、改变和等同物。因此,应当理解,所附权利要求旨在覆盖落入本发明的真实精神内的所有这些修改和改变。

已经呈现了各种实施例。这些实施例中的每一个当然可以包括来自呈现的其他实施例的特征,并且未具体描述的实施例可以包括本文描述的各种特征。

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