面向图像分割三维打印方法及系统与流程

文档序号:18552097发布日期:2019-08-30 22:08阅读:688来源:国知局
面向图像分割三维打印方法及系统与流程

本发明涉及三维(3d)或固体打印系统,并且更具体地,涉及从待分割的3d或其它图像数据创建3d成像定义或数据并打印该数据。



背景技术:

3d打印系统通常基于输入的计算机数据或定义,通过将连续的材料层形成沿z轴(通常在形成层的方向上上和下)组合的横断面图案来创建三维对象,以形成三维对象。固体打印系统包括通过例如立体光刻、激光烧结、熔融沉积建模、选择性沉积建模(例如喷墨沉积)、膜转移印刷以及其他来构建部件的系统。

3d打印机可以采用定义要打印的对象的输入数据。3d打印机输入数据或3d定义文件的示例可以包括诸如stl(立体光刻)格式数据、amf(附加制造文件格式)和vrml(虚拟现实建模语言)格式数据的多边形(具有三角形的表面的近似)数据。

可能希望使用诸如3d医学图像数据的图像数据,例如医学数据中的数字成像和通信(dicom)、ct(计算机断层检查)数据、mr或mri(磁共振成像)数据、超声数据或图像切片的堆叠来创建3d对象。例如,可以对患者成像,并且可以期望打印患者的血管系统、心脏、脊柱等的全部或部分的3d模型。3d图像数据到3d打印机数据的转换可能不是直接的:例如,不同的3d打印机具有不同的特性,并且转换可能不考虑这些特性。



技术实现要素:

一种用于将成像数据(例如医学成像数据)转换为三维打印机数据的系统和方法。可以接收例如描述受试者或患者的三维体积的成像数据。使用描述特定打印机的打印机定义数据,可以从描述三维体积的至少一部分的成像数据创建3d打印机输入数据。

附图说明

被视为本发明的主题在说明书的结论部分中特别指出并明确要求保护。为了说明的简单和清楚,图中所示的元件不一定按比例绘制。例如,为了清晰地呈现,一些元件的尺寸可以相对于其它元件被夸大。此外,可以在附图中重复附图标记以指示相应的或类似的元件。然而,当结合附图阅读时,通过参考以下详细描述,可以最好地理解关于操作的组织和方法及其目的、特征和优点的说明书,其中:

图1是示出根据本发明的实施例的计算装置的示意性框图。

图2是示出根据本发明的实施例的系统的示意性框图。

图3是描述根据本发明一个实施例的方法的流程图。

图4a和图4b示出了根据本发明一个实施例的具有图4a所示空隙的3d体积的二维(2d)表示,填充以产生图4b所示的体积。

图5a和图5b示出了根据本发明一个实施例的在牙齿和下颌骨之间具有如图5a所示的边界的3d体积的2d表示,移除以在图5b中产生间隙。

图6a和图6b示出了根据本发明一个实施例的具有骨段的3d体积的2d表示。

图7a、图7b和图7c示出了根据本发明一个实施例的膨胀之前和之后的模型。

应当理解,为了说明的简单和清楚,附图中所示的元件不一定按比例绘制。例如,为了清楚起见,一些元件的尺寸可以相对于其它元件被夸大。此外,在认为适当的情况下,附图中可以重复附图标记以指示相应的或类似的元件。

具体实施方式

在下面的详细描述中,为了提供对一些实施例的透彻理解,阐述了许多具体细节。然而,本领域普通技术人员将理解,可以在没有这些详细细节的情况下实践一些实施例。在其它情况下,未详细描述公知的方法、过程、组件、单元和/或电路,以便不模糊讨论。

本文中使用诸如,例如“处理”、“计算”、“估算”、“确定”、“建立”、“分析”、“检查”等术语的讨论,可指计算机、计算平台、计算系统或其它电子计算装置的操作和/或处理,该操作和/或处理操纵和/或将表示为计算机的寄存器和/或存储器内的物理(例如,电子)量的数据转换为其他数据,其他数据类似地表示为计算机的寄存器和/或存储器或其他信息存储介质(其他信息储存介质可以储存指令以执行操作和/或处理)内的物理量。

对“一个实施例”、“实施例”、“示范实施例”、“示例性实施例”、“各种实施例”等的引用表明,如此描述的实施例可以包括特定特征、结构或特性,但并非每个实施例都必须包括特定特征、结构或特性。尽管它可以,但是短语“在一个实施例中”的重复使用不一定指同一实施例。某些实施例可以包括来自实施例的不同描述的特征:例如,系统和方法可以使用加厚和/或空隙创建和/或分辨率调整等。

本文描述的逻辑、模块、装置和接口可以执行可以用硬件和/或代码实现的功能。硬件和/或代码可以包括被设计为实现功能的软件、固件、微码、处理器、状态机、芯片组或其组合。

本发明的实施例可以执行“面向打印”的分割(“pos”)或数据转换。实施例可以通过输入描述受试者(例如,人类患者)的3d体积的成像数据,并且在pos处理中,使用或根据从描述三维体积的至少一部分的成像数据3d打印机输入数据创建的打印机定义数据(例如,描述期望用于打印的特定打印机、用于特定打印作业的打印机设置、用于作业的打印材料或其他参数),将成像数据(例如,表示3d体积)转换为3d打印机数据。成像数据可以被分割,这通常涉及将医学成像数据转换到掩模、3d矩阵,3d矩阵包括例如3d材料应当被打印的1,以及例如材料不应被打印的0。可以使用其它合适的数据结构。分割可包括将体积分割成待打印的部分,和/或选择待打印的某些部分(例如,根据用户输入)。分割可以例如通过阈值和/或为特定类型的结构设计的特定已知工具或算法来执行。例如,已知的工具或模块可以分割以将成像数据分割成不同的骨,并且已知的工具或模块可以分割以将成像数据分割成不同的软组织器官。分割可以产生一个或多个掩模-例如,每个椎骨一个掩模或每个牙齿一个掩模。已知的转换或分割方法可以包括例如已知的牙齿分割(例如,“individualtoothsegmentationfromctimagesusinglevelsetmethodwithshapeandintensityprior”,huigao和oksamchae,模式识别,第43卷,第7期,2010年7月,第2406-2417页)和血管分割(例如,“areviewof3dvessellumensegmentationtechniques:models,featuresandextractionschemes”,davidlesagelini,isabellebloch,garethfunka-lea,医学图像分析,第13卷,第6期,2009年12月,第819-845页)。

分割通常在转换为打印机数据之前执行。然后打印机可以使用打印机输入数据来打印和创建3d对象。现有技术的分割和数据转换通常与分割的数据是否将被3d打印和/或考虑打印机特性无关,并且不考虑分割的数据是否将被3d打印和/或考虑打印机特性,导致较差的打印质量。例如,当打印机在接收到这样的打印作业时可以提供分割不够好的通知,这是因为例如部件太薄或者缺少连接部件。相反,本发明的实施例可以执行分割或数据转换处理,其考虑到输出是针对具有一组规格的特定3d打印机的。可以创建3d模型,这使用3d打印机规格(约束和/或优点)以有效的方式实现最合适的打印模型。这可以减少或消除诸如薄弱部分、不准确部件或“像素化”模型的问题,如果不考虑特定打印机,则可能会发生这种情况。当与诸如由dicom、mr或ct数据定义的医学级体积一起使用时,本发明的实施例尤其是有利的,但是本发明的实施例可以与诸如非医学成像数据的其它数据一起工作。

图1描述了根据本发明一个实施例的系统。成像系统90可以对受试者92(例如,人类患者)成像以产生图像数据94(表示受试者或受试者的一部分),诸如3d医学图像数据,例如ct数据、mr或mri数据、超声数据、图像切片堆叠或其它图像数据,并且可以是例如ct系统或mri系统。可以使用其它医学或非医学成像系统。虽然本文描述了医学成像或成像数据,但可以使用其它成像系统,并且可以在不对特定对象成像的情况下人工创建本文使用的成像数据。例如,输入数据可以是3d对象。3d对象可以包括3d成像数据、网格数据、体积对象、多边形网格对象、点云、3d对象的功能表示、cad文件、3dpdf文件、stl文件和/或可以表示3d对象的任何输入。3d成像数据可以包括医学成像数据,包括ct数据、锥形束ct(“cbct”)成像数据、mri数据和/或mra成像数据(例如,具有造影剂的mri)或超声成像数据。3d对象可以是解剖学(例如,复杂解剖学)、工业数据或任何3d对象。

成像系统90可将图像数据94发送或传输到计算机20,例如个人计算机、工作站等。计算机20可考虑或根据打印机定义数据22来处理图像数据94,并将3d打印机输入数据11(例如3d网格、3d定义文件、ply(多边形文件格式)、stl(立体光刻)、amf(astm附加制造文件格式)、vrml(虚拟现实建模语言))输出到3d打印机10,其可将数据打印为物理现实世界3d打印对象12。虽然图像数据94、打印机定义数据22和3d打印机输入数据11被示出为由计算机20存储(例如,在图2的存储器40中),但是如果合适,这种数据可以由图1的装置存储或共享,图1的装置包括成像系统90和打印机10。例如,成像系统90可以生成图像数据94(其可以以另一种方式生成,并且可以来自另一个源),并且可以将图像数据94发送或传输到计算机20,计算机20可以创建3d打印机输入数据11并且将数据11发送或传输到3d打印机10。

3d打印机10可使用各种方法来使用输入或构建材料(例如,光聚合物或其它材料)来产生物理的现实世界3d打印对象12,其打印可相对于x/y/z轴定义或讨论,z轴定义一组沉积材料层的垂直关系。

成像系统90、计算机20和3d打印机10中的每一个可以包括计算组件,诸如图2中描述的某些版本的组件,并且可以通过例如网络60连接。在其它实施例中,并不是示出的所有组件都可以被使用。例如,成像数据可以不直接从成像系统90输入到计算机20,而是例如经由闪存驱动器、磁盘等。组件可以被组合:例如,被描述为将图像或成像数据94转换为3d打印机数据11的计算机20的功能可以被结合到3d打印机10中。

在一个实施例中,3d打印机10可包括例如盒14,盒14包括可选择性地分配到托盘18上的对象创建构建材料16的供应。托盘18保持用于在构建过程期间构建3d对象12的固体打印材料。在一个实施例中,固体打印材料可以是本领域已知的或此后设计的任何光固化材料。适于与本发明的各种实施例一起使用的打印或对象创建材料的示例包括例如光固化材料、塑料和金属。固体打印材料16可以从盒14通过盒的底壁上的一个或多个分配器、喷墨或可选择性打开的阀15来分配。诸如梭19的移动装置可以大致沿着固体打印装置10的x轴和/或y轴来回移动分配器或阀15,并且可以沿着z轴上下移动分配器或阀15以创建层。本发明的其它实施例包括用于将打印材料分配到托盘中的替代装置。其它实施例不需要使用选择性沉积或所示的特定组件;例如,3d打印机10可以使用系统将粘合剂材料逐层沉积到具有喷墨打印头的粉末床上,或者sls(选择性激光烧结),其中激光烧结粉末材料。

图2描述了可以是例如打印系统90、计算机20和3d打印机10的一部分的计算组件。计算装置30可以包括控制器32,控制器32可以是例如中央处理单元处理器(cpu)、芯片或任何合适的计算或可计算装置、通用处理单元(gpu)33、操作系统50、存储器34、存储装置36、输入装置38和输出装置40。

操作系统50可以是或可以包括任何代码段,该代码段被设计和/或配置为执行任务,该任务涉及计算装置30的协调、调度、仲裁、监督、控制或以其他方式管理操作,例如,调度程序的执行。存储器34可以是或可以包括,例如,随机存取存储器(ram)、只读存储器(rom)、动态ram(dram)、同步dram(sd-ram)、双倍数据速率(ddr)存储器芯片、闪存、易失性存储器、非易失性存储器、高速缓存存储器、缓冲器、短期存储器单元、长期存储器单元或其它合适的存储器单元或存储装置单元。存储器34可以是或者可以包括多个、可能不同的存储器单元。可执行代码或软件52可以是任何可执行代码,例如,应用程序、程序、进程、任务或脚本。可执行代码或软件52可包括例如分割算法或处理、将图像数据转换为3d打印规格数据的处理等。可执行代码52可由控制器32在操作系统50的控制下执行。例如,可执行代码52可以是执行本文所讨论的方法的应用程序。控制器32可以被配置为例如通过执行代码52来执行本文所讨论的方法。

存储装置36可以是或者可以包括例如硬盘驱动器、软盘驱动器、光盘(cd)驱动器、cd可记录(cd-r)驱动器、通用串行总线(usb)装置或者其他合适的可移动和/或固定存储单元。

输入装置38可以是或可以包括鼠标、键盘、触摸屏或触摸板或任何合适的输入装置。应当认识到,可以连接任意适当数目的输入装置。输出装置40可以包括例如一个或多个显示器、扬声器和/或任何其它合适的输出装置。将认识到,任何适当数目的输出装置可以可操作地连接。

本发明的实施例可包括诸如计算机或处理器非瞬时可读介质的物品,或计算机或诸如例如存储器、磁盘驱动器或usb闪存的处理器非瞬时存储介质,其编码、包括或存储指令,例如计算机可执行指令,当由处理器或控制器执行时,指令使得处理器或控制器执行本文公开的方法。

图3是描述根据本发明一个实施例的方法的流程图。在操作300中,可以输入成像信息和/或打印机信息。例如,可以输入3d体积(例如,图像数据94,诸如3d图像或成像数据)和打印机规格或清晰度数据22(例如,描述特定打印机、使用的材料等)。输入还可以是例如描述图像数据的数据,诸如分辨率。在操作310中,可以执行初始分割、处理或转换。初始分割可以将3d体积转换为一个或多个掩模24,掩模24可以是初始掩模。分割可以包括识别诸如体内特征(例如,不同的骨、器官、牙齿等)的特征,并且根据不同的特征来划分一个或多个掩模。可以使用各种分割算法和指定工具,诸如阈值分割。初始处理320可包括诸如分辨率改变、填充空隙、侵蚀或移除触摸掩模之间的边界的处理。某些操作可以被组合:例如,分割310可以结合分辨率变化。初始处理320可考虑打印机规格或定义数据22。

在操作330中,可以针对例如质量、强度和/或可打印性来评估先前操作(例如,一个或多个掩模)的输出。在操作340中,如果掩模或掩模的一部分不可打印,或未能通过某些质量测试,则可以在可能不影响精度的情况下来调整、改变或固定掩模,例如,“修复”可以是与打印机的分辨率相同的分辨率。评估和改变或调整可以是迭代的或重复的。通常,在调整340之后再次执行评估330。

在操作350中,如果掩模是可打印的,则可以对掩模执行后处理,例如已知的操作(诸如平滑或形态操作(诸如稀释或腐蚀))。在一些实施例中,后处理的输出可以是评估,操作330,以确定后处理是否导致可打印掩模或不可打印掩模。在操作360中,掩模可被转换为描述可被输入或发送到打印机的3d体积的至少一部分的数据;例如,掩模可以被转换成网格。在操作370中,网格可以由3d打印机打印。

在本发明的一个实施例中,在考虑打印机规范或定义数据22或根据打印机规范或定义数据22的同时,可以将图像数据94(例如,3d图像或成像数据)转换为3d打印机输入数据11(例如,网格)。例如,打印机输入数据可以从图像或成像数据94创建(例如,从图像或成像数据94转换),图像或成像数据94可以描述3d体积的至少一部分,或者允许3d打印机打印3d体积的至少一部分。成像数据可以是例如包括可能需要分割的3d彩色或灰度数据的体积(例如,ct或mr的dicom图像、一系列二维(2d)图像)。然后,3d打印机可以打印与打印机输入数据以及成像数据或3d体积相对应的一个或多个3d对象。打印机规格或定义数据22通常描述用户打算用于特定打印作业的特定打印机或打印机类型。打印机规格或定义数据22可以描述特定3d打印机和/或打印机的特定模型的操作参数、分辨率、公差、精度等。打印机规格或定义数据22可以包括目标打印机(例如,打算被使用的打印机或用户选择要使用的打印机)正在使用的特定打印材料上的数据,并且某些打印机可以使用不同的材料。因此,打印机规格或定义数据22可以包括描述特定打印机及其旨在用于特定作业的材料的变体的数据。转换可以包括分割:识别诸如体内特征(例如器官、血管系统、器官的部分、骨等)的特征,并且创建例如一个或多个掩模24。每个掩模24可以表示例如待打印体积、器官、待打印身体部分、骨等内的不同对象。图像数据94可以描述或描绘受试者(例如,患者,尽管在一些实施例中非生物对象可以是受试者)的三维体积。然而,图像数据94不需要是完整的3d数据;例如,一组2d切片可以形成图像数据94,并且可以描述3d体积。例如,可以输入ct数据,该ct数据可以是2d切片的床,其中每个切片之间的距离或间隔是已知的。

在转换为打印机数据之前,可以将图像数据划分或分割成期望打印的一个或多个部分(例如器官、组织);可以排除外部图像数据(例如,不打印的内部身体体积,诸如与用户无关的器官或组织)。划分或分割可以产生一个或多个成像数据段或部分(例如掩模),并且这些成像数据段或部分中的每一个可以被转换为打印机输入、规范或定义数据,每个段表示要打印的对象。可以使用掩模24或其它数据结构,或者可以产生或创建掩模24或其它数据结构作为分割的输出。掩模24可以使得仅由掩模定义的成像数据的部分被转换为3d打印机输入数据。例如,图像数据可以是体积,诸如患者的胸部,包括用户想要转换成3d对象(例如心脏)的组织,以及用户不想转换成3d对象的组织(例如肺、结缔组织、骨、皮肤等)。掩模24可以定义要打印的对象或器官。在一个实施例中,掩模可以是表示具有与图像数据94所描述的尺寸或体积相同的体积或区域的数据结构,如果图像数据94中的每个体素应该转换为3d对象,则用布尔值(例如,1/0,真/假,尽管可以使用其他值)描述图像数据94中的每个体素。在一个实施例中,掩模最初可以包括所有假/0值,并且要打印的体素/部分可以具有改变为真/1的值。如果不使用体素,则掩模24可以以另一种方式对图像数据94进行操作,例如包括对应于图像数据94的部分的布尔值,或者另一种方法。例如,1可以指示包括在3d对象中,以及0可以指示不包括。可以使用多个掩模24,每个掩模对应于一个对象:例如,一个掩模可以对应于并导致打印心脏的一个腔室,而另一个掩模可以对应于并导致打印心脏的另一个腔室。

在一个实施例中,诸如计算机20的工作站可以从打印机10接收诸如打印机定义数据22的打印机规范,或者可以包括打印机定义数据22,或者例如多组打印机定义数据22,一组打印机定义数据22用于多个特定打印机或打印机模型中的每一个。计算机20(或执行分割的装置)可以具有分割工具或算法,诸如自动骨分割,例如存储在存储器34或存储装置36中。

计算机20可以包括,或者可以接收打印机定义数据22,例如使用例如安装在计算机10上的驱动器从打印机10接收打印机定义数据22。存储在计算机10上的文件或软件可以包括这样的数据,这些数据可以例如为每个支持的打印机安装或更新;这样的数据不需要从打印机接收。打印机定义数据22可以包括用户可以使用或选择的每个打印机的数据,例如,空间分辨率、层厚度\z轴分辨率数据(例如,打印机打印的层之间的距离)、打印公差(例如,精度)、打印机模型或类型、目标打印机使用的打印机技术(例如,sla、数字部件物化(dpm)、熔融沉积成型(fdm)等)、使用的材料(其用于导出或查找材料强度;材料强度被称为单独的参数)等。

向计算机20提供输入的用户可以由相应打印机定义数据22,选择某些3d打印机(例如,系统可以经由例如输入装置38接收用户输入),并且在一些实施例中可以输入要与打印机一起使用的单独材料选择,或者可以输入打印机定义数据22。

计算机20可从例如成像系统90或从另一源,接收待处理和/或分割的体积,诸如图像数据94。在一个实施例中,可以在计算机20上进行从图像数据94到打印机输入数据11的数据转换,包括分割,但是在其它实施例中,可以在例如3d打印机10上进行处理。计算机20可以使用分割或划分工具和其他算法(例如,由控制器32执行或在控制器32上执行)并且输出一个或多个掩模24。

在一个实施例中,用户可以选择分割如何进行:例如,用户可以根据心脏的部分,来决定应当分割心脏以产生一个物理3d对象,或者可以决定应当分割心脏以产生多个物理3d对象。用户可以例如点击(使用指点装置)所显示的区域以提供种子点,并且诸如连接组件算法的已知算法可以使用种子来选择诸如器官或骨的特征。使用已知算法,可以创建掩模,例如对应于每个器官、骨或器官部分(例如心脏腔室)的一个掩模。可以接收对分割处理的其他用户输入。用户可以经由例如输入装置38向计算机20提供这样的输入,并且系统可以经由例如输入装置38接收用户输入。

可以使用各种已知的分割算法或处理。例如,可以使用阈值,其中对于输入体积中的每个体素,如果其在所需值范围内,或者高于或低于阈值,则对其进行分割——例如,在掩模中将其标记为真或“打印”。可以使用其它合适的分割算法。

掩模24可以是划分或分割处理的输出,并且可以包括例如3d布尔数据,该3d布尔数据可以参考体积指示3d模型或模型部分存在的位置。

每个掩模24例如可以是表示可能在一组相关对象中的对象的数据对象。例如,第一掩模可以是心脏的第一部分,以及第二掩模可以是心脏的第二部分。在一些实施例中,不需要使用掩模或分割。例如,本文讨论的转换处理可以在没有分割的情况下对数据进行操作。

计算机20可以使用掩模,或者将掩模应用于图像数据94,并且将数据转换为3d打印体积定义或3d模型构造,例如创建或计算3d打印体积定义、3d模型构造、网格等,例如以3d打印机输入数据11的形式,并且将数据发送到打印机10。然后打印机可以使用例如3d打印机输入数据11打印3d对象。

一个或多个操作可单独使用或组合使用,以将图像数据转换为打印机输入数据,或同时将图像数据转换为打印机输入数据。例如,pos处理可包括增加分辨率、调整层厚度、填充或边界加厚、处理复杂掩模结构、分离具有现实世界连接的结构以及用于打印的连接部件。

在各种实施例中,作为初始分割(例如,操作310)的一部分,可以执行指定工具骨分割或其它分割。例如,已知的阈值算法可以使用骨值(例如,基于ct模态的minthreshval=100hu,maxthreshval=1000hu;hu=亨氏单位来转换成像数据中的体素)。作为分割过程的一部分,骨分割算法可以返回或识别骨的内部部分。用于这种结果的分割处理可以是例如图上的α扩展(alphaexpansion)算法,以区分期望的骨、其它骨和背景。α展开算法可以包括优化数据分离的算法(例如,“骨”和“非骨”)。

图6a示出了具有识别的骨段610的3d体积600的2d表示。图6a示出了从结果中选择的连接部件的基于阈值的分割的结果。图6b示出了具有识别的骨段610的3d体积600的2d表示。图6b示出了根据一个实施例的面向打印的分割,其中填充间隙和孔605以创建更可打印和更坚固的对象。

可以执行其它分割,例如分离器官的部分(例如心脏的腔室)或分离不同的器官。

调整分辨率

在各种实施例中,作为初始处理(例如,上面的操作320)的一部分,3d打印机输入数据可以具有与打印机的能力和分辨率相关的修改的分辨率或所需分辨率(例如,体积分辨率)。例如,打印机及其相关输入数据,可具有例如描述为打印机容差、层间距离、体素的大小、x、y或z行或体素的数目等的分辨率。创建3d打印机输入数据可包括根据描述打印机的打印机定义数据或描述打印机设置来调整输出的掩模的分辨率。例如,在获得分割之后,可以以更高的分辨率平滑分割结果(例如,相同或高于打印机精度)。

初始输入体积可以是例如医学输入数据或图像数据94(例如ct、mr数据)。该体积可以由具有特定尺寸的体素组成(例如,取决于模态、医学协议、扫描装置等)。可以改变该初始医学输入数据体积或图像数据94的分辨率,其转而可以改变掩模的分辨率。

当改变分辨率时,可考虑打印机公差。在一个实施例中,处理可以考虑打印机公差(例如,打印平面上的打印的精度)和层厚度(例如,打印机在z方向上的精度)作为打印机分辨率。3d打印机通常根据例如网格,或体素数据逐层打印。每一层的高度就是层的厚度。3d打印机应例如根据体素将材料放置在特定的x、y位置。然而,3d打印机可能不准确,而将材料放置在x+t,y+t,其中t是公差(例如,t可以在毫米或微米的范围内)。公差可以在z/厚度/层方向上存在,并且可以具有与x和y的公差不同的值。用于特定打印机或打印机模型的公差(例如,用于x/y/z的一组公差)是已知的。公差和层厚度可以由用户已知或估计,并且可以被考虑。

层厚和公差可以构成“打印机分辨率”,类似于体积分辨率。3d打印机应该有信息或“知道”是否应该打印空间中的任何特定点的材料。空间中(在3d打印构建区域中)的点的最小尺寸(或分辨率)是层厚度和公差。如果输入医学体积分辨率被“调整”或符合更利于打印的打印机分辨率(例如,层厚度和公差),则可以实现更好的pos。

例如,如果由打印机定义数据选择或描述的3d打印机具有比要成像的体积更高的分辨率,则可以进行内插以增加体积的分辨率,使得体积中的每个体素与打印机精度相同或比打印机精度更高。

可以使用诸如resizefun(volumeinput,resizevector)的函数,该函数可以是本领域公知的内插医学成像体积或掩模以增加或降低分辨率的任何函数(例如,如果输入体积具有比打印机更高的分辨率)。合适的已知函数包括mathworks.com上显示的多模态非刚性演示算法图像配准。

这样的函数可以接受作为输入volumeinput,其可以是要调整大小的体积,其可以是3d掩模或3d体积,以及可以是指示每个维度中的改变大小的调整大小参数的resizevector。

调整大小向量可以是或包括指示打印机分辨率和体积分辨率之间的分辨率因子的无量纲数。例如,如果打印机分辨率是(1,1,0.5)单位是[mm(当然可以是其他维度)]并且体积分辨率是(2,2,2)单位也是[mm](当然可以是其他维度),则调整大小向量是(2,2,4)而没有维度(没有单位)。

在一个实施例中,resizevector=volumerresolution/printerresulotion。

在一个实施例中,如果假定:

volumeinput具有以下分辨率rx、ry、rz以及宽度、深度、高度(行数、列数和切片数);

数据来自例如dicom文件:

rx和ry是指dicom标签(0028,0030)pixelspacing[mm]

rz可以是dicom标签(0018,0050)slicethickness或如dicom标签(0020,1041)(两者单位是[mm])所描述的切片位置之间的差异。

打印机公差可以是prtol和prlay的层厚度,其单位为[mm],但可以是其它尺寸,例如英寸、微米等。

在这样的示例中,调整大小向量resizevector=[rx/prtol,ry/prtol,rz/prlay](对于每个维度,可以有不同的值)。

在一个实施例中,resizefun可以是已知函数,诸如matlab函数vq=interp3(x,y,z,volumeinput,xq,yq,zq)。

其中例如:

[x,y,z]=网格(0:rx:宽度×rx,0:ry:深度×ry,0:rz:高度×rz);

[xq,yq,zq]=网格(0:resizevector(1):宽度×rx,

0:resizevector(2):深度×ry,

0:resizevector(3):高度×rz);

在一个实施例中,[x,y,z]=网格(x,y,z),其基于向量x、y和z中包含的坐标返回3-d网格坐标。由x、y和z表示的网格具有大小长度(y)乘以长度(x)乘以长度(z)。网格可以是已知的函数,诸如作为interp3函数的预处理所需要的上面描述的matlab函数。

在一个实施例中,volumeinput可以具有分辨率rx、ry、rz。打印机公差可以是prtol(例如打印机“轴向”尺寸、z方向上的打印机分辨率)和层厚度prlay(例如打印机的rz)。在一个实现中:

resizevector=[rx/prtol,ry/prtol,rz/prlay]

对于每个维度,可能有不同的值。与本文描述的所有公式、数据结构和特定序列一样,可以使用其它或不同的公式、其它数据结构和其它序列。

填充或边界增厚/可打印性评估/固定或更改掩模

在各种实施例中,创建3d打印机输入数据可包括根据或考虑打印机定义数据评估3d掩模以确定其是否可打印,和/或固化检测到的问题,诸如打印机输入数据的部分的厚度的增加或减小,或要打印的特征或结构(增加或减小3d对象的相应部分的厚度)。创建3d打印机输入数据可以包括根据打印机定义数据在实心区域中创建空隙或孔,例如,以减少材料的使用量。

当分割或打印中空或薄区域时,这些区域中的3d打印模型可能不够强。本发明的实施例可以检测这样的区域,并且可以执行自动形态操作以增加模型强度。

3d打印对象12不应断裂或萎陷。如果3d打印对象12的边界(壁厚)太薄和/或由不能在特定模型中保持自身的材料制成(与材料强度有关),则模型可能在打印期间或之后不久断裂。如果在分割或数据转换期间已知打印材料16的强度和/或其它性质,则例如在pos期间可以确定3d打印对象12的部分的宽度或厚度。在网格或3d打印机数据11上可以存在“壁厚分析”和“边界”变薄或变宽的类似处理。这是已知且快速的处理,并且在一些实施例中,可以在pos中、在掩模上以及不晚于作为网格来执行该处理。与在网格上进行的强度分析相比,作为pos处理进行的强度分析,例如在掩模上,可以产生更好地匹配原始数据、经历更少变换的结果。

打印机定义数据22(例如打印机技术)可影响材料。打印机定义数据22可以影响填充和其它处理,在其他处理中例如可以以打印机分辨率的增量来完成增厚、减薄、添加和移除材料。

强度分析(例如,stran,下面将讨论)可以在要打印的掩模、模型或体积上进行(例如,completemask-其可以被定义为要打印的最终掩模),并且通常在分割之后进行。

可打印性评估可以以不同的精确度水平执行。例如,可以使用一般模型可打印性检查(例如,“是”或“否”答案——该模型是否可以打印),或者结果可以是特定于位置的,例如,诸如“热图”的数据结构指示可以打印模型的哪些区域。已知的算法可以使用用于建造的材料的已知特性来确定在建造之后某个部分是否过于脆弱。例如,一定厚度的模型的一部分如果由塑料制成,则可能被确定为过于脆弱,但是如果由金属制成则不是。连接到较大部分的模型的一部分如果由塑料制成,则可能被确定为太弱,但是如果由金属制成则不是,以及这当然可以取决于连接部分的尺寸。

热图的数学模型可以是例如:maskinput可以是布尔掩模,例如初始掩模,用作输入以生成强度分析处理(例如,使用stran,下面将讨论),该处理返回诸如称为例如heatmap的“热图”的数据结构,描述输入掩模是否打印就绪,以及如果没有打印就绪,是在哪个区域。

heatmap=stran(maskinput)。heatmap可以是与maskinput相同大小的体积:具有没有材料时诸如0的值和浮点数以指示强度,例如部分地基于相邻体素中的材料量和局部结构来确定。

在一些实施例中,heatmap(~maskinput)=0;(任何没有掩码的地方,热图都是零——不“受关注”)。

作为示例输出的一部分,heatmap中满足或为heatmap>strthres的任何体素都能够或允许打印。“是”(打印)或“否”(不能打印)选项的输入具有相同的数学模型-只有当heatmap中的所有体素>strthres时,才能打印模型。

stran可以是任何已知的强度分析功能或处理,诸如例如壁厚分析、有限元分析(fea,也称为有限元方法(fem))或其它工具。这种方法包括已知的技术,并且可以在网格上工作。

用于stran处理的不同方法可以包括例如通过从掩模数据制造网格并使用本领域已知的算法执行强度分析来评估可打印性。评估的示例流程可以包括例如:

将初始掩模转换为网格(例如,使用诸如行进立方体的已知的方法;以及执行网格分析(例如,使用已知的方法,例如,壁厚分析或fea)。还可以对掩模执行可打印性检查。这可以使处理更简单(例如,不需要创建网格)。

强度分析可能取决于模型(结构、壁宽等)和打印机(打印机类型、打印机材料)。这可以在stran期间进行评估,并且strthres可以由这些因素决定。

在一个实施例中,可以创建新的或附加的掩模(例如,weakmask)来标记要打印的区域,这些区域在原始打印定义中不是要打印的,但是发现它们与弱区域交界。因此,低于特定阈值(例如厚度阈值或预测强度阈值)的弱区域可被标记为新掩模,例如:

weakmask=stran<strthres

weakmask可以是由stran中的每个体素定义的(或者“heatmap”,其可以指示可以打印模型的哪些区域以及哪些区域由于例如强度问题而需要调整)低于strthres值的新掩模。

形态膨胀(morphofun)可定义为例如:

morphomask=dilationfun(weakmask)

morphomask可以是在对上述定义的weakmask执行膨胀处理(dialtionfun)之后产生的掩模。

并且morphomask可以与completemask结合或组合:

completemask=morphomaskucompletemask

为了对掩模或打印数据中的每个真体素(例如,指示应沉积的建造材料)执行膨胀,围绕或邻近那个真体素的每个假体素被设置为真;这可以进行到一定的厚度,因此在每个方向上,与真体素相邻的整数x体素被设置为真。在膨胀中,通常,被改变以指示材料应被打印的体素或区域连接到、邻接或邻近相关体素或边界。相反,对于填充函数,被改变以指示材料应被打印的体素或区域不一定连接到、邻接或邻近相关体素或边界。

在一个实施例中,这可以是迭代的:可以再次分析所得到的completemask的弱点,并且可以再次执行该处理,直到所有模型都高于strthres。

增强掩模的另一个实施例可以类似于前面讨论的处理,但是具有以下类型的膨胀功能:

dilationfun(weakmask,stran)

该处理可能会根据stran而膨胀weakmask(区域越弱,将“得到”更多膨胀)。

增强掩模的另一个实施例可以类似于前面讨论的处理,但是使用定义为膨胀函数的morphofun代替定义为膨胀函数的形态填充函数,形态填充函数定义为:

morphomask=fillfun(weakmask)

一个简单的实施例可以通过加厚边界来增强模型。一个实施例可以将具有半径r的球形元件的膨胀定义为a(+)r。为获得一方面尽可能接近解剖结构而另一方面可打印的模型,膨胀可以在对模型或模型的使用“不重要”的方向上。

图7a、图7b和图7c示出了膨胀前(图7a,初始)和膨胀后(图7b,初始膨胀,图7c向外膨胀)的模型。对于图7a所示的初始薄模型700,使模型加厚的一种选择可能是将其向内膨胀。以这种方式,模型在外边界方面可能是准确的,同时它也足够厚。如果模型的外部结构是重要的(在图7的示例中,主动脉的大小和结构是重要的),则可以使用这种方式。相反,向外扩张是可能的,所以内部结构是准确的。如图7c所示,如果装置(例如,医学工具)应插入打印模型中或其内部,则需要这种方式,并且只应保留内部结构的尺寸。

填补空隙

在一个实施例中,初始处理或分割(例如,操作310或操作320)或调整或后处理(例如,操作340或操作350)可以包括填充空隙,空隙可以是3d对象的中空部分,并且其中不沉积打印材料。例如,填充算法可用于获得或创建更稳健的结构。图4a和图4b示出了一个示例填充动作,示出了具有空隙410的3d体积400的2d表示,如图4a所示,填充以产生图4b所示的体积。表示体积400的掩模可以改变其数据以将空隙数据转换为打印材料数据。

在一些实施例中,用户和/或已知的分割工具或算法可以决定填充哪个区域,并且然后填充算法或方法可以填充该区域,例如,作为上述操作310或操作320的一部分。例如,如果使用被设计用于分割这种骨的特定类型的结构的模块,并且该模块确定在分割的骨中存在空隙,则该模块可以使用已知的填充算法。用户可以使用图形用户界面,点击或选择要填充的区域,并且然后已知的填充算法可以填充该区域。

在一些实施例中,在分割或初始分割(例如,上面的操作310)以及可能的其它处理(例如,上面描述的初始处理320)之后,自动处理可以确定(例如,上面描述的评估330)需要填充的区域,例如,以提高强度。然后,填充可以作为例如上面的调节操作340的一部分来完成。

在一个示例性实施例中,填充掩模处理可以通过使用本领域公知的用于图像填充的任何功能分别填充多个切片或部分(例如,构成体积的平坦或相对平坦的部分)中的每一个来执行。这种函数可以是例如matlab函数imfill:bw2=imfill(bw,'holes')。该函数可以填充输入二值图像bw中的孔洞,其中孔洞是通过从图像的边缘填充背景而不能完成的一组背景像素。bw可以是特定切片中的原始掩模(例如,2d掩模)。

虽然3d填充可以是简单的动作(例如,填充当前或所有空隙),但是如果在全部3d体积上执行,则用户可能难以预测结果。如果空隙有一个小孔洞,则3d填充的结果可能是填充整个体积。替代地对每个切片执行2d填充的实施例可以被更多地包含,并且可以仅填充受关注的区域。该动作可以在任何方向上执行,例如轴向填充,并遍历所有z切片,或矢状填充。在轴向取向上执行一个实施例,因为对于一些应用,它对于大多数情况都很好地工作。

清除或创建边界、腐蚀

在一个实施例中,初始处理、分割或后处理可以包括去除边界,或者在触摸掩模之间创建间隙或隔离区,例如在边界处腐蚀,或者创建间隙或间隙区,例如通过打印机分辨率的宽度,或者根据打印机定义数据。与其它处理一样,材料的去除可以通过改变掩模以将“打印”部分改变为“不打印”来完成,例如改变掩模以使得间隙由没有被打印的材料(例如零)来限定。打印机定义数据可以用作输入,以确定最小打印机分辨率单元,其确定间隙宽度。例如,可以这样做,以去除每个掩模的接触或邻接的部件,但是对于这些部件,期望该部件在打印后不接触或分离:可以通过操纵数据来人工分离这些部分。例如,实际上当在成像对象中存在空隙或物理分离时,但其中打印机分辨率可导致每个掩模的部件接触或邻接,并且希望在打印之后部件不接触或分离,可以这样做。可以识别彼此接触的掩模,并且腐蚀掩模的材料以防止接触。在一个实施例中,算法可以确定掩模的不同区域之间存在空隙或间隙,并且因此确定该空隙应当保持在打印的3d模型中。

在一些实施例中,用户和/或已知的分割工具或算法可以决定移除哪个边界或材料,以及然后适当的已知算法或方法可以移除或腐蚀材料,例如,作为上述操作310或操作320的一部分。例如,如果使用被设计用于分割这种骨的特定类型的结构的模块,并且该模块确定相邻区域是不同的骨,则该模块可以使用已知的腐蚀算法。用户可以使用图形用户界面,点击或选择要分离的区域,以及然后已知的腐蚀算法可以分离区域。腐蚀可以作为后处理350的一部分来执行。

掩模可以具有复杂的结构,使得相邻区域之间存在小间隙。如果从同一模型打印不同的掩模(例如,一个用于牙齿的掩模和另一个用于下颌骨的掩模)并且它们彼此非常接近或接触,也可能是这种情况。这么做的结果可以是具有连接的或接触的掩模的3d模型,或者如果需要可分离的模型(例如心脏的不同部分),则在不应该出现连接的区域中相同掩模的连接的或接触的部分。如果3d打印机分辨率已知,则可以确定分割的部件之间的最小差异。在最终的3d打印对象中,物理上相邻的心脏腔室可以被没有沉积建造材料的窄间隙分开或隔开,使得物理上连接的(在现实生活中)心脏腔室可以被检查最终建造作业的人拆开。

层厚和打印机公差可以构成打印机分辨率。如果希望分离作为一个批次或打印作业打印的部件,则掩模之间的最小差异在一个实施例中应当是打印机分辨率。如果这在pos处理期间是已知的,则可以改变分割部件之间的距离(在成像体积中:例如,在体素世界中,体积或成像世界中)。在一些实施例中,可以使用默认参数(例如,打印机参数、材料等),而不必绑定到实际打印机或材料,这可以在根本不考虑打印机或材料的处理上改进分割和/或3d打印。

图5a和图5b示出了在牙齿520和下颌骨530之间具有边界510(图5a所示)的3d体积500的2d表示,在图5b中移除或腐蚀以产生间隙或间隙区域520,间隙表示没有打印材料的3d模型的部分。表示体积500的掩模可以改变其数据以将边界数据转换为非打印材料或间隙数据。

例如,如果maska和maskb是两个相邻的掩模(例如,在图5中,牙齿和下颌骨),则两个掩模都可以用具有r=rx,ry,rz的空间分辨率的打印机打印。在一个实施例中,rx和ry是打印机精度或公差,并且rz是层厚度。打印机精度通常在x和y方向上定义。掩模可以不按照旋转及其轴向或者x/y/z轴与打印机轴向或者x/y/z轴对齐,并且可能需要,例如使用旋转变换矩阵t来执行校正或旋转。例如,打印机中的x方向可以与掩模的z方向对齐。因为腐蚀功能(例如,在掩模上移除材料并产生间隙的功能)可以使用r(来自打印机),所以可能获得错误的参数。正确的写入方式可能是:打印机具有r'=r'x,r'y,r'z的空间分辨率。当t是掩模和打印机之间的旋转变换矩阵时,r=t(r'))。

为了产生分离maska和maskb的打印模型,可以执行形态操作。例如,形态操作可以采用掩模,并且通过与一些对象(在具有半径r的球形下方的特定示例中)的卷积来创建新掩模,这在本领域中是公知的。

例如,在一个实施例中,如果定义了:

半径为r的球形元件的腐蚀(此处表示为“aθr”)

maska^'=maskaθr

maska^'=maskbθr

maska'和maskb'是最接近或最相似于maska和maskb的掩模,其可以用具有公差r的打印机打印。例如,如果给定打印机的规格,从其边界处的maska和/或maskb移除最少量的材料,使得它们在打印时不会物理接触,这可能意味着maska'是给定打印机的maska的最相似掩模,并且材料已经被移除。与本文讨论的其它变化一样,这通常意味着修改定义对象的数据结构(例如,掩模)。在一个实施例中,可以使用诸如以下的操作:

根据matlab函数定义distx=bwdist(maskx),该函数从maskx的边缘创建距离图distx。bwdist可以计算二值图像bw的欧几里德距离变换。对于bw中的每个像素,距离变换可以分配一个数字,该数字是该像素与bw的最近的非零像素之间的距离。

r可以是打印机的公差(假设所有方向上的公差相等)

maska和maskb是两个掩模,应以距离r隔开。

为了创建由r隔开的两个掩模maska'和maskb',执行以下操作:

dista=bwdist(maska)

distb=bwdist(maskb)

maska'=maska&distb>r/2(&是“与”操作)

maskb'=maskb&dista>r/2

创建空隙/细化

在一个实施例中,分割310或初始处理320可以包括创建3d打印机输入数据,该3d打印机输入数据例如可以包括根据打印机定义数据在实心区域中创建空隙或中空区域,或者在打印机定义数据中细化区域,或者以其他方式去除材料。通常,去除材料是为了减少材料的使用量(例如,降低成本、减少浪费、使打印更快),或者为了减轻重量,或者出于其它原因。该材料可被移除到一定程度,使得强度或稳定性不受损害。

可以使用已知的算法来检测或识别应当被制成中空或具有空隙的区域,以识别连接的组件区域,其可以包括3d对象的不接触掩模的其它块或区域的任何块或区域。在一个实施例中,任何这样的块或区域都应该是中空的。

如果分割区域、掩模或3d打印机输入数据的区域是实心的或完全填充的,并且不需要材料的实心区域,则打印材料可能浪费在内部区域上。通常,这种不必要的或冗余的填充区域是内部的,并且与打印对象的外部区域没有交界。如果已知该模型将用于打印,则可以将已经填充的区域打孔或形成空隙或使创建的空间变空(没有建造材料),从而将建造材料移除至最小厚度,例如如下所示:

completemask可以变成或转换成具有小边界厚度(例如,initthick)的外壳掩模(例如,shellmask)。

completemask可以是“常规”分割之后的掩模,并且希望被中空化。shellmask(例如布尔掩模或矩阵)是completemask的外壳,例如它仅在completemask的外壳上为真(例如1)。在处理开始时,shellmask的壁厚可以为initthick(例如,1mm)。在必要时(例如,取决于强度分析,诸如stran),可以使shellmask膨胀,或者使shellmask更宽或更厚。

然后,可以对shellmask进行强度分析(例如,stran)。

在一些实施例中,在细化和评估(例如,操作330)之后,如果模型被确定为太弱或不可打印,则可以执行校正性增厚或膨胀,例如,使用经由dilationfun函数的膨胀、本文公开的用于增加打印机输入数据的部分的厚度的方法或其他方法,但通常仅对掩模的内部部分(例如,模型的不面向外部世界的部分)执行校正性增厚或膨胀。

了解什么是模型内部的一个选项是采用completemask并计算距离边缘变换上的梯度。

d=bwdist(~completemask)(例如,使用completemask负值的matlabbwdist函数)。

gradient(d)-距离变换的matlab梯度函数将给出外部方向。其他方向是向内。

一个实施例包括去除内掩模的对于模型的结构不重要的部分,这减少了打印材料,但也保持了模型的强度。此外,移除材料、添加材料或其它处理可重复地或迭代地结合质量、可打印性或强度评估来执行,以确定要移除多少材料。以这种方式,可以执行“模拟”。例如,根据初始模型或掩模填充的主动脉可以移除其内部部分的一部分。这可以反馈到上述操作330中,其中可以针对例如强度来评估输出或掩模。这可以重复地或迭代地执行,直到模型强度降低到阈值以下,例如在heatmap<strthres中存在至少一个区域。在这样的实施例中,步骤的先前迭代或版本(例如,当所有heatmap仍然>=strthres)是具有尽可能少的材料量的模型,其保持所需的强度和结构。通过使用打印机定义数据对空隙创建、增厚或细化之后发生的可打印性分析的强度分析,打印机定义数据可以被输入到空隙创建处理或增厚或细化处理中(并且因此这些处理可以根据打印机定义数据来执行)。

在一些实施例中,移除(例如,细化、创建间隙或创建空隙)时的迭代可以包括迭代,直到评估(例如,上面的操作330)确定模型或掩模太弱,并且然后使用确定为可打印的先前迭代作为模型。在其它实施例中,移除时的迭代可以包括迭代,直到评估确定模型或掩模太弱并且然后结合评估处理使用加厚处理来创建可打印掩模或模型。

可以使用其他方法。

虽然本文已经说明和描述了本发明的某些特征,但是本领域技术人员可能会想到许多修改、替换、改变和等同物。因此,应当理解,所附权利要求意在覆盖落入本发明真正精神内的所有这种修改和变化。已经呈现了各种实施例。这些实施例中的每一个当然可以包括来自所呈现的其它实施例的特征,并且未具体描述的实施例可以包括本文所描述的各种特征。

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