分析和显示计算机体层摄影术数据的系统和方法

文档序号:6406802阅读:189来源:国知局
专利名称:分析和显示计算机体层摄影术数据的系统和方法
技术领域
本发明一般地涉及分析和显示利用计算机体层摄影术所获得的数据,计算机体层摄影术可表现人体的各种器官。更具体地,本发明涉及一个计算机化的系统,用于分析从人体的管状结构,例如结肠或胃肠管道所获得的数据,和以一定方式显示该数据,以快速评价管状结构的组织结构和准确确定任何异常的存在。
背景技术
在工业化国家,结肠直肠癌是第二位主要的恶性肿瘤死亡的原因。在美国,每年确诊差不多15万人患有结肠癌。不幸的是,结肠癌每年又导致约6万人死亡,在美国人口中只有肺癌可引起更多的死亡。使这些统计数据真正不幸的是,结肠癌也许是最能够预防的癌症之一,因为它们一般开始时只是良性的息肉,经过5到10年的缓慢发展后,转变为癌。如果这些息肉被检测到和移除,发展成结肠癌的危险性就极大地降低了。
遗憾的是,广泛的结肠直肠检查和预防措施由于多个实际的障碍而受到妨碍,这包括有限的资源、方法的不足、和病人的低接受度导致的低顺从度。另外,排泄物的潜隐血测试(FOBT)不能检测出大多数的癌和前期癌性的息肉。由于S状结肠镜只能检查结肠的一部分,它也不能觉察许多的息肉。钡灌肠剂的准确性在多个中心之间是不同的,因此常常是不可靠的。
因此,需要一种新的测试,可被用于检查前期癌性的息肉,以及其它异常,如其它手段可能不能发现的由瘤所引起的结肠直肠壁的增厚。同所有检查性的测试一样,这种新的测试必须是相对便宜、最小限度地入侵和高度特效的。
利用螺旋状(也称为螺旋形)的计算机体层摄影术(CT)来创建计算机模拟的穿过结肠内腔的飞行技术,由Vining D J、Shifrin R Y、Grishaw E K、Liu K、Gelfand D W在《Radiology Scientific Prgm》1994;193(P)446的“Virtual colonoscopy(虚拟结肠镜检查)”摘要中提出,作为检测结肠直肠赘生物的一种新方法。该技术首次由Vining等人描述,发表在Vining D J和Gelfand DW的较早的论文摘要中,题目为“Noninvasive colonoscopy using helical CT scanning,3D reconstruction,and virtual reality”(利用螺旋状CT扫描、3D重构和虚拟现实的非入侵的结肠镜检查)(《SGR Scientific Program》,1994年)。该技术,即称为“虚拟结肠镜检查”,需要一个注入空气的洁净结肠,约30~60秒的螺旋状CT扫描,和专业的三维(3D)成像软件,以提取和显示粘膜表面。从CT扫描数据所产生的腔内图像被显示给医疗人员用于诊断。
重新格式化与结肠中线垂直的2D横截面的技术也描述在1995年10月17日出版的美国第5458111号专利中。然而,直接解释横截面的图像是困难的,因为结肠的扫描包括几百张轴向X线体层照片。没有先进的图像处理工具,仅仅解释从这些横截面得到的结肠的复杂三维形状,对于医疗人员来说是十分困难的。
提高准确性的一种方法包括在横截面和与结肠中线正交的角度上产生重新格式化的2D图像。当观察相应的腔内的3D图像时,这些重新格式化的2D图像可以提供有用的诊断信息。利用创新的3D绘制(rendering)技术,可以在低价格的计算机硬件上进行快速、交互式的评价,这样提高了诊断效率。
尽管这些技术已经推动了利用CT扫描来协助诊断结肠直肠癌以及其它疾病,但先有技术典型地要求大的计算能力和专业化的工作站。此外,先有技术还被局限于提供结肠直肠路径的视图,该结肠直肠路径可能遮蔽息肉的出现,并且不提供有关结肠直肠路径或被分析的其它管状结构的表面下形态的任何信息。典型地,提供给医师或技师查看数据显示的仅有视图是被评价的管状结构的二维和三维腔内、冠状、矢状和轴向视图。
一般地,一台CT扫描器和计算机工作站被用于人体的管状结构的成像,如活人的消化管道的成像。该CT扫描器产生人的结肠的横截面轴向图像,然后这些图像被传递到该计算机工作站。结肠中线被定义为沿着结肠的内腔。通过产生和显示重新格式化的横截面图像、体积绘制粗查情况和腔内视图,该计算机工作站支持结肠中线的界定。半自动的中线定义工具也可以包括进来。在定义中线之后,显示图像的组合用于诊断的目的。这些图像包括轴截面、腔横截面(transluminalcross section)和腔内体积绘制图像。
半自动方法通过识别结肠近似的中线,被用于描绘结肠的三维形状。这是由显示冠状、矢状和轴向视图,以及与中线正交的轴外平面支持的。沿中线拉直的弯曲截面和来自中线末端的一个绘制视图也被显示。在这些视图的任何一个中编辑中线将典型地引起其它视图相应地更新。在描绘结肠的中线之后,提取数据,这样可以高效地检查结肠。
在使用上述设备的一般实践中,医疗人员,如一位放射线学者通过沿着已描绘的中线移动虚拟视点,可以检查病人的管状结构,如病人的结肠。可以显示三维正交轴外横截面、体积绘制的腔外粗查情况(volume rendered extraluminal scouts)或原始轴向的2D图像,和结肠内表面的高分辨率透视图(perspective rendering),这样使医生可以观察到被分析的管状结构的组织结构。透视图可以典型地在任何方向重新定向。也可以显示沿结肠中线的可旋转的纵向切片。这个视图可以沿结肠的整个长度推进,它增进了沿3D图像向前或向后的路径导航和3D图像的解释。
经验已经显示,同时显示横截面和绘制的视图比单独的横截面或腔内视图更能增强CT数据的诊断解释。CT数据的体积绘制由常规的算法来执行,常规算法利用纹理(texture)的预计算和其它技术,以在中等价位的工作站上实现交互性能。
通常,如上文所述的至少两个产生的三维图像视图被显示给医师。第一个视图典型地是一个前向腔内视图,它包括结肠的一个视图,视点是朝远离结肠的终点位置,如肛门边缘看过去。第二个视图可以是一个后向腔内视图,它包括结肠的一个视图,视点是向结肠的终点位置,如肛门边缘看过来。显示两个视图减小一个可能性,即由于结肠的布局而看不清楚感兴趣的特征。
通过把光标指针指向图像并同时按键或向计算机工作站发出适当的指令,医师可以移动视点离开先前定义的中线,且包括2D重格式化图像、3D腔内图像、2D轴向图像的所有图像可以被更新为对应于指定位置的视图。医师通过使用这个指示设备可以随机地移动视点,或返回到预定中线上的最近点。
为协助诊断,打开或展开的结肠视图也可以显示给观察者。结肠的展开视图对应于整个结肠的一个视图,就好象它已经被实际地分割和展开用于检查,如同把一个橡胶软管沿其纵向轴切成两半,保持结肠的弯曲。然而,这种“打开”技术只允许查看管状结构或结肠的内部结构,而不提供结肠内壁的一个真正“展平”的视图,其中结肠固有的弯曲被“展平”,因此允许从结肠的内壁伸出的结构,如结肠袋脊背(Haustral ridges)隐藏如小息肉这样的结构或其它异常物,使医生不能看到。
此外,当前没有系统、方法或技术被认为能够提供管状结构壁的评价。例如,一些结肠直肠癌不由息肉发展而来,但出现在结肠壁内。这样的癌不能利用上述的方法观察到,因为这些方法没有一种能够对管状结构壁的厚度或密度进行分析。
所需要的、而迄今还没有的是,提供高效的和准确的CT数据表现的技术,CT数据提供管状结构的展平视图,展平的视图防止在管状结构内的结构隐藏结肠内如息肉的异常物的视图。而且,这些技术应该能够有效地和快速地运行在常用的计算机平台上,如Apple或IBM所制造的系列计算机上。另外,这样的系统也应该能够分析在管状结构壁中出现的异常,如壁厚度或密度的变化,它们可指示出瘤的生长或其它疾病的存在。本发明满足这些和其它的一些要求。

发明内容
在最主要的方面,本发明具体化为绘制三维图像的一种系统和方法,给用户提供扫描人体的选择部分所产生的数据的视图,设计这些视图是为了帮助该用户或另一个人,如一位外科医生或内科医生诊断疾病情况和提出针对这些情况的治疗方案。本发明还公开的是,利用适当的模式识别和分析软件,进一步处理三维体积数据的一种系统和方法,以识别在成像的身体结构中,尤其是在诸如结肠的身体管状结构中的异常。
一方面,本发明具体化为管状身体结构的成像方法,管状身体结构具有由壁围绕的内腔,该方法包括的步骤是,提供包含数据的数据组,这些数据表示沿管状体的纵向轴的身体管状结构的多个横截面图像,处理数据组以重构管状体的三维图像,识别通过该三维图像的内腔的中心路径,沿该中心路径选择一个起点,处理始于该起点和继续沿结肠的该三维图像的纵向长度的数据,和绘制该三维图像的一个展平视图,在图像缓冲器中存储代表该展平视图的数据,以及显示图像的展平视图。
另一方面,本发明具体化为一种方法,它进一步包括沿中心路径选择一点,处理在该选择点的数据,在该选择点绘制管状结构壁的横截面的图像,以及显示该管状结构壁的横截面的图像。
在本发明的另一方面,本发明包括,处理数据和绘制展平的图像,投射一条从起点到壁的射线,该射线的方向对应于视图的角度,以及将三维像素(voxel)值添加到图像缓冲器中。在一个替代方案中,所述方法还可包括,把视图的角度偏移一度,和投射另一条从起点到壁的射线,如果视图的角度还没有从初始起点偏移总共360度,则该射线的方向对应于视图的偏移角度。在另一替代方案中,所述方法还包括,如果视图的角度已经从初始起点偏移了总共360度,则沿内腔的纵向轴推进起点一个选定值,以及重复投射射线和将三维像素值存储在图像缓冲器中的步骤,直到内腔的整个长度已经被处理为止。
在另一实施例中,本发明包括一种生成身体的管状结构壁的内部视图的方法,该视图包括邻近所述壁外部的组织,该方法包括(a)提供一个包含数据的数据组,该数据表示一个三维体积,该三维体积表示沿管状体的纵向轴的身体管状结构,该管状体具有由壁界定的一个内腔;(b)沿中心路径选择一个起点,该中心路径的布置沿着所述管状体的纵向轴;(c)向所述壁以一个选定的距离投射一条射线,通过从所述起点沿所述射线移向所述壁;(d)在所述射线的每步位置处计算三维像素值;(e)将所述三维像素值添加到图像缓冲器中;(f)把所述射线的角投射增加一度;(g)确定自从选择所述起点之后,所述射线的角投射是否已经增加了360度;(h)向所述壁投射一条具有增加的角度的射线;(i)重复步骤(d)到(h),直到所述射线的角投射已经增加了360度为止;和(j)显示下表面体积图像。
在另一实施例中,本发明包括,把三维体积数据组与代表预定异常物的几何模式的一个库进行比较,及如果确定一个结构匹配预定容差内的至少一个几何模式库,就将包含在所述三维体积数据组中的该结构识别为异常的。在一个替代实施例中,本发明包括,进一步处理所识别的异常结构,以确定识别的结构是否不是异常的。
在又一方面,本发明具体化为一台计算机,它具有一个处理器,一个程序存储器,和一个半永久性储存存储器。该处理器被一个软件程序编程,该软件程序被设计为接收由扫描器生成的数据组,处理其存储器中的数据组中的数据,以绘制所扫描的数据的三维视图,以及还绘制所扫描的数据的展平视图。可替代地,处理器处理扫描的数据,以绘制感兴趣结构的表面下的视图。
根据随后的详细描述,结合附图,本发明的其它特点和优点将变得显而易见,这些附图以示例的方式示出本发明的特点,。


图1是根据本发明实施例的系统的一个图形表示,该系统用于给病人做CT扫描,包括向远程计算机传送CT扫描数据以进行处理和显示的通信装置;图2是一个示意利用本发明的实施例来诊断的一般过程的块图;
图3是病人结肠的二维图像的视图,显示线(wire)飞行路径的内腔中心点的标识;图4是代表性显示的视图,表示利用本发明的方法从CT扫描数据导出的病人结肠的各种视图;图5是一个示意图,表示结合本发明的方法的软件程序的一般过程;图6是根据本发明的方法,绘制的病人结肠的二维图像的视图;图7是结肠的一个截面的示意图,表示从内腔中心点到结肠壁的射线的图;图8是图7的结肠截面的展平截面的侧图;图9是一个图形显示,表示结肠截面的展平截面和俯视图的关系;图10是一个流程图,代表在展平结肠截面的三维图像中包括的步骤;图11是结肠的横截面视图的一个组合视图,包括代表从内腔中心点到达和通过结肠壁的射线的步进点,配合利用本发明方法绘制的图像的显示的两个代表视图;图12是一个流程图,代表在计算和显示结肠壁截面的表面下视图中包括的步骤;图13是一个代表本发明实施例的流程图,包括计算机辅助诊断,它利用存储数据的模式识别软件分析来执行,所存储的数据是利用本发明的各个方面产生的;图14是利用本发明的系统和方法可能产生的报告的一个实施例的图形化表示;图15是利用本发明的系统和方法产生的报告的另一个实施例的图形化表示,其与图14的实施例相配合。
具体实施例方式
本发明一般涉及产生和显示代表人体结构的交互性二维和三维图形的一种方法和系统。三维结构是人体的选择区域的一般形式,尤其是具有中空内腔的人体器官,如结肠、气管支气管的通气孔、血管等等。根据本发明的方法和系统,一个选择的人体器官的交互性三维绘制图像是产生于一系列获得的二维图像,这些二维图像产生于由计算机化体层摄影扫描器或CAT扫描所获得的数据。CAT扫描技术的最新进展,即著名的螺旋状或螺旋形CAT扫描器使用的到来,已使人体结构扫描发生革命性的变化,因为它们允许在相对短的时间段内收集特别大量的数据。例如,一个完全的结肠直肠扫描可以在病人屏住呼吸的时间内完成,但是,正如本领域技术人员了解的是,任何类型的数字图像可以利用本发明的系统和方法进行处理,这些数字图像是从扫描器产生的数据组得到的,例如由CAT扫描器、磁共振(MRI)、电子发射体层摄影术扫描器(PET)、超声波设备等等产生的那些数据组。
典型地,一位病人位于扫描器内,且该病人的身体所期望的部分被扫描。用适当的识别信息提取和存储代表病人的扫描情况的数据组。该数据组然后可被传送到计算机工作站用于分析。本领域所公知的是,扫描数据可被压缩,以使之能够通过各种手段传输到分析站点。例如,本发明特别适合在基于个人计算机的计算机工作站上使用,如一台Macintosh计算机或IBM系列的计算机,它们具有适当量的工作内存、处理能力和硬驱动存储容量。本发明人已在苹果公司的Macintosh G4以及其它计算机上操作体现本发明的软件。
因为本发明的系统和方法不需要专业化的工作站,如先前用于减少CT扫描数据和产生三维图像的方法,所以CT扫描数据可通过因特网、局域网或电话线,使用本领域已公知的适当通信设备和技术被传送到远离扫描器的计算机和工作站,在结合本发明内容的软件的控制下操作,以进行进一步处理和分析。
通过清洁病人的结肠,病人为成像做最初的准备。清洁程序的目的是从结肠清除排泄物。在CT扫描之前,所希望的最好是完全干净的结肠,因为留下的排泄物和体液可以模仿或屏蔽小的息肉。
一旦结肠清洁完毕,向结肠内吹入气体来扩张结肠。扩张结肠保证结肠的内表面将在最后的图像显示中是清晰可见的。插入一个直肠导管,即直径为半英寸(1.27cm)的一个标准钡灌肠剂导管,通过它把气体导入结肠。以不连续的喷气或以一固定的流速导入气体,结肠被填充至一个预定的压力或体积。尽管可以使用空气,但最好是二氧化碳CO2,因为CO2通过结肠粘膜进入到血流中,随后可被呼出,因此减少了膨胀量和病人在检查后所经受的腹痛。不同于传统的结肠镜检查,这个程序不需要给病人服用镇静剂。
吹入气体后,可用例如一台螺旋状CT扫描器扫描结肠,以产生结肠的一系列二维图像。图像中的图像元素或像素表示有关结肠的至少一个物理特征。例如,物理特征可以是结肠壁的X射线衰减或在结肠内气柱的X射线衰减。这些图像通常是在遍及病人腹部区域的有规律的间隔位置拍照的。连续图像之间的间隔越小,最后显示的图像上的分辨率越高。连续图像之间的间隔最好是1毫米,以产生各向同性三维像素,因为每个三维像素的X维和Y维是每个约1毫米。
在结肠膨胀之后,立即扫描腹部,例如,使用GE的HispeedAdvantage Helical CT扫描器,在约30~50秒内完成的单次屏住呼吸的时间内进行扫描。扫描参数可以包括,例如,0.20英寸(5毫米)X射线束视准,提供2∶1倾斜度的0.4英寸/秒(10毫米/秒)的工作台速度,和0.04英寸(1毫米)图像重构间隔。X射线束视准是确立CT切片厚度和Z轴空间分辨率的X射线束的宽度。倾斜度是由视准除CT工作台速度。图像重构间隔反映重构二维图像时的间隔。利用5毫米的X射线波束视准,选择的1毫米的重构间隔,在1毫米间隔处产生反映5毫米CT切片厚度的图像。结果,在1毫米重构间隔处的连续的5毫米厚度图像之间具有4毫米的重叠。
在Z轴方向上以10毫米/秒的工作台速度的一个50秒扫描,可以创建Z轴长度为500毫米的体积数据。在体积数据的Z轴长度上利用1毫米的重构间隔产生500张图像,每个图像表示沿Z轴的5毫米厚的截面。典型地,扫描要进行两次,一次是病人在俯卧的位置,另一次是病人在仰卧的位置,这样产生约1000张图像。较新的多切片CT系统,包括那些具有4个和16个通道的数据获取带宽的CT系统,可以在约30~40秒内每隔2毫米得到5毫米厚的切片,产生具有200~250张图像的数据组。每隔1.0毫米扫描2.5毫米厚的切片将把该数目增加到每个数据组400~500张图像。完成CT扫描之后,移去直肠导管,排除气体,病人就可以离开了。
图1一般描述根据本发明的主要内容的可用于绘制图像的一个系统。系统10包括连接到一台计算机14的一台扫描器12。计算机14用于控制扫描器12的操作,也用于获得扫描器12产生的数据。计算机14可以是任何具有充分的计算能力、存储量和内存的计算机,这样,它能够运行控制扫描器的常规软件,获得和存储扫描器在扫描病人的身体或选择的病人的一部分身体过程中产生的数据。除了能够运行常规软件的处理器或微处理器之外,计算机14还包括可以是随机存取存储器或只读存储器的一个存储器18,和合适的存储介质20,介质20可包括,例如硬盘驱动器、CD或DVD驱动器、或适于存储扫描器产生的数据的其它存储介质。显示器16连接到计算机14,以允许操作者查看数据的显示和操作扫描器的参数,以及扫描器产生的数据所绘制的图像。另外,尽管图上没有标出,计算机14也将可操作地连接到允许扫描器的用户输入命令的设备。这样的输入设备包括鼠标或其他定点设备、键盘、条形码扫描器或其它设备。
计算机14也将可操作地连接到调制解调器或其它通信设备,以允许提供到通信装置22,如电话线、电缆、DSL连接、局域网、因特网或无线网络的连接。这允许计算机14与其它被适当编程的计算机系统或工作站24通信,传输扫描器产生的数据,到达其它计算机系统或工作站24。
计算机或工作站24是类似的配备以通过通信装置22与计算机14通信,把计算机24所产生的分析和报告传送到计算机14的用户。计算机24也包括处理器或微处理器、存储器26和存储介质26。另外,一个鼠标或其它定点设备32也可以通过有线或无线接入而被连接,以允许输入命令到运行在计算机24上的软件程序中,控制软件程序的操作。计算机24的处理器典型地以结合本发明方法的常规软件来编程,以提供在显示器30上显示的扫描产生的数据的各种视图。尽管本发明方法将在下文描述,就好像根据这些方法运行的软件控制计算机24,但本领域技术人员可以理解的是,相同的软件可以操作和控制计算机14,给计算机14的用户提供计算机24产生的同样的分析、视图和报告,而不需要把扫描病人的过程中所产生的数据传输到一个远端位置。
现在参考图2,它描述一个通用的流程图,说明通过系统的数据流,该系统运行编程的软件以执行本发明方法。通过有线或无线通信系统来接收包含CT扫描数据的数据库,就得到这个数据库。可替代地,该数据库可以人工提供给系统,如通过利用便携式硬盘驱动器、ZIP盘、CD或DVD或者其他具有足够容量的便携式存储介质。
扫描数据典型地包括一系列表示切片的二维图像,切片取自作为扫描对象的结构。这些二维图像被转换为或变为一个三维图像。这些二维图像可以典型地从计算机控制台操作的螺旋状CT扫描器得到。例如,该扫描器可以是General Electric HiSpeed Advantage螺旋状CT扫描器,它连接到可选的General Electric Independent计算机控制台或医师的控制台。然而,所述计算机控制台可以是螺旋状CT扫描器的一个集成部分,而不是分离的独立式控制台。所述二维图像也可以从超声波、正电子发射体层摄影术、发射计算机体层摄影术和磁共振成像得到。测量的物理特征直接与产生二维图像所使用的扫描技术有关。对于CT图像来说,测量的物理特征典型的是X射线衰减,而对于磁共振图像(MRI)来说,测量的物理特征通常涉及各种特征,如质子密度。
每个单独的二维图像定义一个图像元素或像素的二维(X-Y)矩阵,每个像素代表关联三维结构或三维结构中特定位置的器官的预定身体特征。在贯穿三维结构的第三维方向(Z)上,连续的二维图像是有间隔的。
典型地,通过堆叠连续的二维图像以形成一个三维体积13,而继续分析,由此定义一个三维矩阵(X、Y和Z轴),其代表至少一个物理特征,所述物理特征与位于在三维体积内定位的坐标上的三维结构相关。该三维矩阵包括三维体积元素或三维像素,其类似于二维像素。从该三维体积,可以选择目标体积用于三维绘制。例如,目标体积可以包括选择的器官或感兴趣的区域,它可以从原来的三维体积中分离出来。目标体积可以包括一个完全的器官,或者包括在器官内或器官的内腔内的空气柱或空气容积。
代表原始三维体积的一个数据组可以选择性地经历数据组减小过程,以降低图像或空间分辨率或分割原来的体积为较小的数据子体积,这是在隔离目标体积之前。数据组减小和/或子体积选择只有在图形计算机的能力不足以为了有效和高效的三维绘制处理全部的三维体积时是必须的。为了得到实时的三维构建,可能必须减小表示三维图像体积的数据组的大小。例如,原始三维体积的数据组可能需要从原来的100~250兆字节减少到约5~10兆字节。但是,如果有的话,减少的量可以变化,这根据原来数据组的大小、用于进行三维绘制的计算机的处理速度和容量来决定。
数据组减小之后,器官或感兴趣区域的三维图像可从体积数据中隔离或分离。取决于测量的物理特征,例如,X射线衰减的组织值的范围可以进行选择以指定器官或感兴趣的区域。然后,所述器官或感兴趣的区域从体积数据中分离出来。例如,感兴趣的区域可以是包含结肠或气管支气管通气孔的空气柱,或身体的一些其它部分,它们的内腔充满同质的物质,如空气、血液、尿、造影剂等等。可替代地,感兴趣的区域可以是部分的骨骼。
例如,通过指定由阈限值约束的物理特征值的范围,可以实现分割过程,阈限值的作用是指定感兴趣的器官。对于选择的体积或子体积来说,落在选择的阈值范围内的三维像素被分配一个单一的值,例如,255被提供给白色,而落在选择的阈值范围外的三维像素被分配一个不同的单一值,例如,0被提供给黑色。因此,选择的体积是通过比较选择体积内的每个三维像素与阈限值而确定界限,并通过分配适当的色彩值0或255给每个这样的三维像素,这取决于每个这样的三维像素是落在阈限值所定义的阈值范围之内还是之外。通过对选择的体积限定阈值,形成具有相同三维像素值的目标体积。更特殊的是,产生白色的目标器官,同时也产生在阈限值之外的所有体积,其具有黑色。除了可以利用图像处理技术而消除的各种人造物之外,只有限定阈值的目标器官被染成白色,其它的一切被染成黑色。
再回到图2,一旦在逻辑框50中得到CT数据,该数据可被输入到分割数据的子程序中,放射线学者或技师则对该数据组加以说明,并准备一个全面的报告,如同逻辑框55所表示的。这一步骤是可选的,可以省略而不偏离本发明的本质。
不管数据是否由逻辑框55的方法处理,扫描数据被修改和作为二维图像输出,并存储在一个预定的存储位置,如以相关的病人身份信息标识的一个文件夹,并以合适的文件格式表示,例如“pict”文件。本领域技术人员可以理解的是,也可以使用其它文件格式,特别是能够存储图像数据的格式,它们可保持原始轴向图像的完全位深(bitdepth),并可不必以受损的方式剪裁或压缩图像。
一旦数据存储在一系列的二维图像中,那么所述数据可被输入到一个子程序,该子程序允许如以上所述的方法那样处理数据并绘制成三维图像,如逻辑框60所示。可以使用的程序已经被本发明者开发,且名称为VISUALIZE,尽管可以使用任何可以把二维图像转变或转换为具有适当分辨率的三维图像的绘制程序。例如,绘制过程可以使用通用目的的体积显像程序来完成,如IRIS ExplorerTM。
三维对象如结肠的管状结构的图像,被投影到二维屏幕坐标,以显示数据给使用射线搜索技术的观察者。从用户视点发出的虚构射线通过观察的平面,定位到用户的监视器屏幕,并进入该对象。如果一条射线与对象相交,相对应的观察平面像素被染上不同于背景色的一种颜色。如果没有发现相交,则像素被染成和背景同样的颜色。用于停止射线的标准决定哪个值被投影到观察的平面像素上。这个过程不同于表面绘制,表面绘制典型地利用多边形绘制来产生图像;相反,体积绘制沿一条射线投影所有三维像素的加权平均值,以产生一个图像。
现在三维图像可以在监视器上显示,其形式是给用户提供“飞行”通过管状结构例如结肠的能力。为了方便飞行,也为了允许更先进的三维图像分析和显示,在逻辑框65中确定穿过结肠的一个中心路径。这个步骤将在下文中更详细地讨论。
一旦在逻辑框65确定线飞行的路径,可在逻辑框70进一步地处理数据,以提供结肠的一个展平视图。结肠的展平视图提供了好比是仔细切割结肠并在板上展开结肠的一个视图,以使弯曲的结肠壁不再隐藏诸如息肉那样的结构,而当利用更加传统的多平面视图观察时这些结构可能就被隐藏起来。另外,可以进行数据的进一步处理,以产生结肠壁的表面下视图,同步使用展平视图,以助于诊断结肠壁的异常,如扁平瘤或壁压缩物,而当仅观察展平的图像时,这些可能是不明显的。
一旦完成所有希望的图像处理,就存储包含处理的图像数据的数据组。可以理解的是,这些数据组包含的数据,其排列形式允许用户查看数据组中的图像,如同数据组是一部电影。这种排列允许医师在评价扫描的数据时,以任何方向飞过结肠,跳跃到已经检查出异常的结肠的选择部分,并做出标记用于以后的分析。
在本发明的一个实施例中,数据组可以被传送给放射线学者,他接收展平的体积视图、3D体积和表面下的视图数据用于分析,如在逻辑框75中所指出的。该放射线学者然后观察数据,在逻辑框80中绘制他的诊断病例。在逻辑框85中,诊断报告然后被传给外科医生和/或病人的内科医师。
关于图2中一般描述的系统的各个方面,现在将更加详细地描述。现在参考图3,描述结肠中的中心路径的确定。如图所示,一部分结肠,这里是一个S形结肠被识别为感兴趣的区域。利用专业软件,或由一位适当训练的技师人工标识沿结肠内腔的中心点100。尽管可以使用自动化的中心“沿线飞行”路径生成,但常常是人工确定方法更有优势,以保证得到准确的路径,准确路径通过的是有时曲折、收缩或折叠的路径。如图3所示,技师可在结肠的中心内腔内标识一系列的点。这些点是通过滚动穿过结肠的二维多平面表示,在希望的位置定位鼠标或其它适当的设备,并点击来标识的,以标记数据库中代表所希望的中心点的点。软件存储这个位置,并把它与其它这样确定的中心点连接以确定线飞行路径。
结肠的中心线可以以多种方式之一来确定。例如,在确定通过结肠内腔的中心路径的一个方法中,选择的第一点是,位于结肠内腔中的一个所希望的起始位置。确定具有最小横截面区域的通过起点的平面,并标记这种区域的中心。然后选择一个新的点,例如在相对于平面的表面区域垂直方向上的位于离中心点1厘米的位置。新平面的最小区域被确定,该区域切开结肠并通过这个新的点,且该新区域的相应的中心被标记。重复这一过程,直到确定了连接中心点的一条中心路径。如上所述,这只是用于确定通过结肠内腔的中心路径的多种方法中的一种,且并不是为了限制。
一旦确定了线飞行路径,就可以实时地处理数据,以提供象电影似的飞行,飞过整个结肠,或结肠的选择部分。而且,本发明的系统和方法允许数据的显示在用户希望的任何时候暂停,用户可使用适当的鼠标点击或键盘命令来暂停。这允许当用户观察到需要更近距离评价的结肠的一个区域,如存在息肉或瘤时,用户可以暂停飞行。如下文将更加详细描述的,结肠内由用户识别出异常物的位置,可以采用多种方式显示给用户。
三维对象动画,如上文所描述的“飞行”,是通过快速地显示体积的多个三维视图实现的。使用当前可用的计算机平台的表面绘制计算快得足以允许交互性地处理体积。另外,绘制软件典型地包括一些模块,它们提供了增强对象特征的能力,这是通过改变每个观察的平面像素的颜色深浅实现的。例如,“阴暗的表面”图像通过使像素的色彩接近具有较亮图案阴影的相机视点来添加立体感效应。在阴暗表面图像中的像素反映了介于动画结构和用户的视点之间的距离。用户和虚拟光源的相对“位置”的信息,连同关于所绘制结构的信息被用于适当地遮蔽所绘制的体积,以产生解剖的真实印象。
如上所述,绘制或会聚步骤60快速且交互地发生,这样给了用户“飞行”通过体积数据的能力。“飞行”的方向是通过利用鼠标或键盘输入的命令,通过光标的方向指示来控制的,速度(前进和后退)也可以通过点击鼠标或键盘上的按钮来控制。交互性的三维绘制的速度产生一个“虚拟现实”环境,且允许用户检查图像数据,检查方式类似于实际的内窥镜检查法。
每次模拟飞行的路线,无论是穿过整个结肠或结肠的一个主要部分的较短、局部飞行还是长距离的飞行,都可以被记录,并用在“回放”模式中以回描飞行路线。单个的三维情景也可以象照片一样存储在计算机上。如果想要的话,穿过结肠的每次模拟“飞行”可以被记录在录象机的VHS录象带上,或其它合适的存储介质上用于存档。另外,数据可以被存储,以使它可以传送给肠胃病专家和外科医生以进行进一步的评论和分析。
为达到足够的绘制速度,同时保存原始CT数据体积的解剖细节,有可能导航或“飞行”通过从减小的数据组体积建立的减小的三维图像。当运动停止时,利用原始的CT图像体积,三维场面可以以可能最高的分辨率重新显示。
另外,显示其它图像是有用的,如飞行过程中的轴向图像,和多平面正交轴向、矢状与冠状图像,以帮助用户分析结肠的形态。这种显示的示例在图4中描述。
图4显示使用本发明方法绘制的结肠的六个单独的同步视图。如图所示,基准线210指向结肠内的特定位置,该位置在飞行过程中已经被识别出具有需要进一步评价的结构。在这一操作的模式中,用户飞行穿过结肠,利用鼠标来控制飞行的速度和方向。通过点击该基准线,图像可以前进或后退,允许用户向上和向下飞行。当用户飞行通过结肠时,该基准线在名为“可变宽度的展平视图”图象上移动,下文对此将更详尽地描述。每个其它视图,如磁轴向(Mag Axial)、磁矢状(Mag Sagittal)(MPR)、腔内和磁冠状(Endoluminal and Mag Coronal)(MPR)视图是和该基准线同步的,允许操作者从各种视点研究异常的结构。
另外,图4中所示的显示包括一个表面下视图,下文予以更详细地描述。该视图允许医师或经过培训的技师也可检查结肠壁的异常。同步显示结肠壁厚度的能力允许诊断肿瘤或可能不表现为息肉或结肠内表面上可见的其它异常结构的其它疾病。如在表面下视图中的“*”220所示,以及其它视图中的十字准线,所有的视图已经与增厚的结肠壁区域同步,给用户提供多种视图以评价结肠壁,并使壁厚度与结肠的任何其它结构的异常相互关联。
下表面视图能够被“开窗口”,就是说,用于产生视图的参数可以如用户所希望的那样改变。例如,现有的对比度限制可以进行调整,以优化小异常物的显示,或者可以调节视图的分辨率。可替代地,对参数调节或开窗术(windowing)的程度限制可编程为软件,以防止在二维轴向、矢状与冠状息肉搜索中常用的高对比度、狭窄的“肺状(lung)”设定。如果所用的“肺状”窗口太狭窄,观察二维多平面视图的用户就可能观察不到收缩的瘤,如果该用户不能调节开窗口的参数以估计结肠壁的厚度的话。
一般系统描述图5是一个流程图,它总体上阐明通过本发明方法和系统的分级结构和信息流。系统300的开始,如典型的软件程序一样,在逻辑框310中是通过调用和初始化各种变量、对象,查找表和用户可定义的其它子程序。在逻辑框310中完成初始化之后,监视器在步骤320显示一个默认的窗口布局。主循环(main loop)330然后可以被初始化,等待用户的输入,以确定待显示图像的哪些部分在监视器上绘制。如前所述,一旦给用户呈现结肠的开始部分的一个概图,用户可以利用鼠标或键盘命令,或另外的定位设备,发出指令指导运行软件的计算机,以滚动通过堆叠的三维图像,这些三维图像形成待显示的三维体积。随着用户输入命令到计算机中以滚动通过数据,各种子程序被初始化,比如子程序350,它在步骤360中打开三维体积,并提供一个预先展平的大的轴向多平面窗口布局。在本发明的一个实施例中,该步骤提供二维多平面图像的快速绘制,这可由用户用来人工指定腔内图像的中心点。可替代地,利用设计的软件可以分析包括这些视图的数据,自动地确定和指定腔内的中心点,自动地一个切片一个切片地前进,通过整个结肠图像,或通过结肠图像的指定部分,以确定穿过结肠的线飞行路径。
另外,如由逻辑框370所指出的,和参考在图4中描述的多个视图显示的说明内容,体现本发明的软件进行必要的计算,以展平被绘制的部分管状结构,及在逻辑框380中创建展平的体积,然后在步骤390显示该展平的视图。尽管各种视图都可以计算,但结肠的概图也可在步骤400到420产生,与各种其它视图一起显示。
一旦完成穿过结肠的滚动或飞行,逻辑框430提供对展平视图的进一步分析以识别出结肠中的异常物。例如,当用户在结肠的特定展平段观察到异常物时,该异常物被标记,如同在逻辑框440中那样,并被测量,如同逻辑框450中那样。另外,对怀疑的异常物做局部三维像素密度测量,以试图区别所怀疑的异常物,例如,区别于排泄物或充气的支囊。这些测量可以被记录,用于进一步分析,在逻辑框440标记异常物的所在位置也可被存储,或以标记的异常物菜单的形式提供,或由用户打印出来,进行进一步分析。
图5还描述了在图4中显示的多平面(MPR)视图可以采取的各种子程序。例如,如果观察到一个特定MPR视图中的一个异常物,它可如在逻辑框470中那样被标记。另外,随着通过结肠的飞行的行进,该异常物可被跟踪,以确定其范围和总的形状,如在逻辑框480中指出的那样。提供给用户的图像基本上包括一个内腔的影片,这是沿线飞行的路径创建的,从结肠的一端,例如直肠,到结肠的另一端,盲肠。影片也可以反方向移动,以允许从盲肠到直肠的飞行。在本发明产生的内腔视图中,飞行包括可以由用户锁定异常位置的一个指示器,并允许为了显示异常物的各个方面而播放影片,帮助定位、识别、观察和诊断异常物。
各种MPR视图还给用户提供改变视图窗口的能力,即调节窗口的大小,以使各种大小的异常物或感兴趣的特征可以包括在一个窗口中,使用某种缩小和放大的功能,如在逻辑框490中那样。而且,在有必要时,可以调节多平面视图的位置,确保视图尽可能延伸,将可以看到可能被诸如结肠袋脊背这样的结构隐藏的异常物,如逻辑框500所指出的。MPR视图还可以包括显示结肠的3-D视图的能力,如逻辑框510所指出的,可以为对比度调节而建立窗口,及可以用于启动局部影片上的飞行,如上所述,以定位选择的异常物的视图。
展平模块本发明包括“展平”代表管状结构的绘制体积的方法。提供展平视图的先前尝试已经利用各种方法来显示结肠的纵向截面,如通过切割管索(chord of the tube)得到图像。这些方法的不足之处是,结肠的整个视图保持弯曲,除非使用截面的小索直径,以至提供无用的数据。相反,本发明人已研发出真正展平结肠图像的一种方法,其方式可能类似于,通过结肠壁做出单个切片,打开结肠的管状结构直到结肠展平。以这种方式展平结肠,表面的异常物凸显出来,可以被看到,即使异常物原先被结肠的结构隐藏,如被结肠袋脊背隐藏。
图6描述结肠600的视图,表示通过结肠605的内腔中心的线飞行路径。结肠区段610和620也显示在图6中,分别代表结肠的薄切片,它们根据本发明的原理从三维管状结构转换成展平的视图。
图7~9表示展平过程的一般原理。如图7中所示,结肠650是具有由壁限定的内部和外部的管状结构。为方便解释,结肠的管状结构可以被认为是这样的一个壁,它从正零度(未标出)开始按顺时针方向在图7中旋转360度。
图8描述在所希望的位置得到的结肠壁655的一个切片。如图8所示,展平的结肠壁从0度到360度;通过打开结肠壁(图7)形成展平的图像。切片655的宽度可以是用户所希望的任意宽度,但典型地是代表1毫米宽的结肠截面。
图9更详尽地表示这种关系。结肠的切片680被转换成展平的图像685。息肉“P”的边缘侵入切片685,可从视图上看到这一点,观察者的视点直接设定为俯视。这允许观察到更小的结构,如息肉或其它异常物,它们原来隐藏在诸如结肠袋脊背的突起结构中。
现在参考图7~10描述用来绘制展平的结肠切片的过程。如前所述,整个显示过程的第一步是加载一个三维体积或用于产生三维体积的一系列二维图像到计算机的存储器或根据体现本发明原理的软件程序运行的处理器中。如以上图3所描述的,使用所述程序显示的数据组的多平面视图,程序的用户确定沿结肠伸长的路径的一个起点,典型的是靠近肛门或直肠区域,该起点确定通过结肠内腔中心的线飞行路径。被标识的点也可用于识别关键帧,关键帧可以被堆叠形成三维体积。在一些实施例中,所述程序包括一个子程序或多个子程序,它们自动定义方向矢量和点之间的弯曲路径。在另外一些实施例中,所述程序提供给用户自动确定通过线点飞行的中心和自动沿线飞行路径推进位置的能力。一旦沿线路径的飞行已经完成和保存,可进一步处理同样的数据,创建一个展平的体积。可替代地,可以进行数据的额外处理以微调、优化和/或平滑线飞行路径。
展平程序典型地开始于数据的预取样分析,以确定线飞行路径的长度,由此,展平图像的高度也可被确定。这个预取样过程不是绝对必须的,在不背离本发明原理的情况下可以省略。预取样过程沿线飞行路径移动相机/用户视点。在沿该路径的每一点或步上,相机绕Y轴旋转90度以面向结肠壁。下面,样本绕Z轴旋转360度,典型地在旋转预取样的过程中每次增加5度,以减少分析时间。在旋转的每一步,投射射线穿过结肠壁,并测量到壁的距离。测得的平均距离用于确定在线飞行路径中的一个特定点的结肠半径。然后增加沿线飞行路径的距离,并重复这一过程。
在预取样分析之后,可以创建图像缓冲器。图像缓冲器的高度由通过结肠的沿线飞行路径的长度决定。图像缓冲器的宽度典型的是360,以解决用于回描结肠壁的全部360度的旋转。
在创建图像缓冲器之后,继续这个过程以产生最后的展平图像。通过再次步进线飞行路径创建展平的最后图像。在沿线飞行路径的每一步,相机绕Y轴旋转90度以面向结肠壁。然后,相机(或虚拟的观察者的视点)绕原始的Z轴旋转180度,在产生最后的展平图像的过程中每次增加1度。在每次旋转,一条射线被投射到结肠壁。射线追踪或投射过程是通过沿着朝向内腔壁的Z矢量,逐步改变相机的位置约1个三维像素。尽管这里描述的是1个三维像素步长,但也可以使用其它长度,或多个三维像素的步长。在每一步,给定三维像素的暗度是通过比较在该步位置发现的三维像素值与用户定义的暗度表确定的。空气在暗度表中典型地定义为0,如果步进通过的三维像素不是空气,,那么基于其暗度权重,其值被加到的一个三维像素值计数器,相对于一个预定的容限。可以理解的是,尽管一些三维像素是透明的,这影响图像,但它们只有非常小的相对权重。预定的容限是由用户依靠分辨率和对比度,或为优化图像而选择的其它窗口参数确定的,一旦超出了预定的容限,累积的三维像素值被写入展平图像的缓冲器。
典型地,绘制的第一个三维像素利用在展平图像缓冲器中最后的垂直线。在这种情况下,图像缓冲器的y偏移量是展平图像缓冲器的高度减去1。图像缓冲器的x偏移量将是180。如图9所示,展平的图像被绘进图像缓冲器中实际是开始于0度,并旋转到180度。当已经完成180度的旋转时,相机被重新设定为其最初的面向结肠壁的视点,通过向相反的方向旋转相机180度来重复这一过程。图像缓冲器的偏移量重新设定为180,每次旋转时递增,这是因为图像的水平线的右侧是首先绘制的。当展平图像缓冲器中的第一条水平线绘制完成,展平的图像缓冲器的y偏移量递减,以向下绘制下一行。继续这一过程,逐步沿线飞行路径推进,在沿着线飞行路径的每个递增步重复这一展平过程,直到绘制完一个合成的展平视图。一旦该展平图像完成,它就被存储到磁盘,然后可以在单独的窗口中显示,如图4所示。
图10提供了一个通用的流程图,说明上文描述的展平过程。如上所述,展平过程的第一步是初始化变量和建立适当的缓冲器和该过程所用的查找表,如逻辑框710中所指出的。在逻辑框710初始化变量的过程也包括沿线飞行路径选择一个起点。
一旦变量已经初始化和线飞行路径的起点被选择,该过程就沿线飞行路径向前推进一步。递增步的长度由用户来确定,通常的范围是1.0~2.0毫米。一旦在逻辑框720完成沿线飞行路径前进的第一步,展平的帧子过程730被执行。
如上所述,在逻辑框740中代表用户视点的相机旋转1度。在逻辑框750中,一条射线被投射到内腔壁,如图7中射线652所示的一样(尽管射线652在图7中显示指向360度,但指向1度,即第一次递增的位置的射线为使表示清楚而省略了,但技术人员会容易地理解其位置)。一旦射线被投射到内腔壁,三维像素值就被添加到一个展平的图像缓冲器,如在逻辑框760中那样。如上所述,处理器测试沿射线长度的三维像素的暗度值,直到它确定一个大于0的暗度值,表明射线已经遇到结肠壁的内表面。
如在逻辑框760中那样,一旦三维像素值被添加到一个展平的图像,处理器就确定相机是否已旋转360度。如果相机没有旋转360度,程序回到逻辑框740,在这里相机旋转1度,并重复逻辑框750和760的过程。如果相机已旋转360度,展平的帧过程就已在线飞行路径上的那个点完成,程序回到逻辑框780。在逻辑框780,程序确定是否已经到达线飞行路径的终点。如果没有到达线飞行路径的终点,程序就回到720,其中沿着线飞行路径的位置递增一个单位(例如这可能是1.0毫米)。在每个递增步重复这一过程,直到已经处理了整个长度,或选择的部分,或线飞行的路径。一旦在逻辑框720执行了向前步进的步骤,然后程序再次遇到展平的帧子程序730,如有必要重复这一过程。如果在逻辑框780中,程序确定已经到达线飞行路径的终点,则在逻辑框790存储展平的图像到磁盘或其它适当的存储介质,然后在逻辑框800显示该展平的图像。显示与结肠的其它视图同步的展平图像的示例表示在图4中,名称为“可变宽度的展平视图”。可以理解的是,包含展平视图数据的文件可以象电影一样播放,即它可以显示通过虚拟结肠的向前或向后飞行,提供给用户飞过结肠表面的感觉,很象是飞机飞行模拟程序提供的飞过模拟地形的感觉。在本发明的情况下,地形是结肠的表面。
在展平图像中的每条水平线被连接到所获得的结肠体积数据组中的一个三维位置。由于该展平图像的创建是通过沿穿过体积的线飞行路径步进,用户可以从展平图像中的给定位置跳回到体积的准确位置。展平图像中的垂直位置(从直肠到盲肠)沿线飞行路径提供结肠内腔中心的三维位置。
利用来自展平图像的一个水平位置,可以获得内腔壁上的一个三维位置。这个值可以用于旋转相机到一个角度,利用这一角度投射一条射线以在展平图像中创建该像素。从这一位置,射线的投射正如同在展平过程中移动相机到三维体积中的实际位置。以这一方式投射射线,通过允许射线继续穿过固态组织进入到结肠壁而可以产生结肠壁的表面下视图。
以这一方式产生结肠壁的表面下视图,能够对异常区域的黏膜和黏膜下的厚度进行评价。例如,这样一个局部异常物可以是约7%的结肠直肠癌之一,它不是产生自缓慢生长的可见息肉,而是来自任何检查程序难以检测到的快速增长的进攻性扁平肿瘤。此外,以独立于原先窗口宽度和窗口水平设置的方式评价壁厚,最小化了遗漏收缩的肿瘤的可能性,只使用三维内腔视图或二维多平面视图可能忽略这些瘤,这些视图依靠狭窄的高对比度窗口设置以观察和分析CT图像数据。
当观察到变窄的结肠段时,原因可能是不充足的空气充入、痉挛、或组成内腔的某些结构,要么在结肠壁内,如发炎的肠病或瘤,要么在结肠外,如一个临近的器官或紧靠结肠周围附近的物质。使用典型的“肺状”窗口设定,要确定变窄是否是由于常见的人为因素,如空气充入不足,还是由于一些潜在的疾病或结构异常,对于观察者来说不是没有可能,但是非常困难。
参考图4中描述的可变宽度的展平视图,可容易地看出本方法的优点。这里,基准线210设定在被圆形瘤限定的一部分结肠截面上。读取图4中所描述的图像种类对本领域技术人员来说是明显的,而从图4中显示的三维内腔视图不容易看出该圆形瘤。如果图4中也显示的磁轴向、磁矢状、磁冠状图像使用传统的“肺状”窗口(在图4中这些图像被正确地开窗口)来呈现,这些收缩的瘤也将被忽略。但是,表面下视图显示,增厚的结肠壁外皮指示出存在一个晚期的恶性结肠瘤。
现在参考图11和12,描述体积数据组的表面下视图的绘制过程。图11包括一个例证,即表面下结构是如何通过逐步推进射线穿过结肠壁并进入到结肠周围的结构来确定的。图11中还包括一个可变宽度的展平视图,及可变宽度展平视图的特定段的表面下视图。该表面下视图对于显示说明回描过程的图是关键性的。
图12是一个通用的流程图,表示为展平视图的选择的扫描线绘制的体积组的表面下视图所包括的各种步骤。
如在图11中的箭头900所指出的,一旦用户已经选择可变宽度展平视图内的一个位置,则用来产生表面下视图的程序开始。如在逻辑框950中,一条射线被投射到内腔壁。在投射射线到内腔壁时,如在逻辑框970,射线是沿着矢量推进x个三维像素进入壁的。然后在逻辑框980中,程序确定投射是否已经穿过x个像素,x的值是由用户选择的。如果投射没有穿过x个像素,则程序回到逻辑框960,并重复这个过程。如果确定投射已穿过x个像素,例如90个像素,程序则转向逻辑框990,这时,相机(或视点)旋转或变化1度。
这一过程的图示示例在图11中显示得更好。这里,射线的起点表示为点A,此处沿Y轴的距离y被任意设定等于0。典型地选择这个点为充气结肠内腔的中心。然后处理器向外朝向结肠壁投射射线。一般地,射线的投射从中心点经过典型的是90个像素的距离,尽管其它距离也可以由用户根据要进行的分析来选择。投射射线90个像素,或其它所希望的更长的距离,结果射线投射进入结肠壁内,允许成像结肠壁的内部结构,以及结肠壁两个侧面上的结构。随着射线投射,在逻辑框990中对于射线遇到的任何结构,基于暗度表计算三维像素值,并在步骤1000,添加三维像素值到表面下图像缓冲器。
如图11中的图所示,射线继续前进投射到点B,此处y等于35,然后再到y等于65的点C。应该理解的是,y的单位可能不是距离的实际测量值,尽管这是可能的。可替代地,y的单位可以表示一个成比例的步长,这由所希望分析的距离来确定,它始于中心点并延伸进入结肠壁内一段需要的距离。
在y等于65的点C,射线遇到结肠壁。然后射线被允许进一步投射一段距离到点D,此处y等于100,这样,绘制的图像不仅包括结肠壁的厚度,而且包括结肠周围邻近处的一定距离。
这一逐步的过程在图11描述的表面下视图中也是看得见的。在该表面下视图中,点A代表充气的结肠内腔中心的起点。点C代表结肠壁的内表面。随着射线被投射到表面下视图中的点D,结肠壁的结构连同一些结肠周围的结构是可见的。以这一方式,位于结肠壁表面的一处异常,如箭头900所指出的,从展平结肠的背景中区分是极其困难的,而在表面下视图中却可以容易地看见,如箭头905所指出的。
表面下视图结合展平视图,给用户提供观察结肠的两种不同方式。展平视图类似于结肠的伸展的飞行表面局部解剖图,包含从结肠壁延伸的结构,如息肉的表面评估数据。相反,表面下视图提供结肠壁表面上部和下部结构的视图。这样,根据本发明的原理的表面下视图提供给用户很大的优势,使之观察到异常物或与人造物有关的疾病,而它们在当前可用于分析CT扫描数据的任何其它视图中都是不能看到的。
再次回到图12,在投射穿过x个像素之后,程序回到逻辑框990,此时,相机或用户的视点旋转1度。然后在逻辑框1000程序确定相机是否已经旋转360次,这样,旋转结肠壁的整个内表面。如果相机已经旋转360次,则程序到逻辑框1010,显示表面下体积。如果相机没有旋转360次,程序自动回到逻辑框950,重复进入内腔壁的投射,直到绘制整个图像。
利用本发明方法产生的各向同性数据组也可以用作计算机辅助诊断系统的输入。在这样的系统中,利用模式识别软件可进一步处理数据组。在这一方式中,通过计算识别息肉或其它异常结构的三维特征可以识别异常物。各种技术,诸如二次判别分析、滞后阈值处理(hysteresis thresholding)和模糊群集可以用来减少发生异常结构的假阳性(false positive)识别。
图13是一个流程图,描述用于绘制诊断的一般步骤,诊断使用模式识别来辨别结肠中的结构异常。利用上文所述方法,在逻辑框1110处理CT扫描数据和产生三维体积数据组。表示整个结肠或结肠的一个选择部分的数据可以从三维体积数据组中提取,如在逻辑框1120所指出的。
然后在逻辑框1130处理提取的数据组,这利用了所设计的模式识别程序,该模式识别程序把体积数据组的三维特点与一组预定的几何形状相比较,这些预定的几何形状已经被确定为代表在结肠中发现的异常物如息肉的几何形状。该程序产生异常物的列表,包括三维数据库内的异常物所处位置的坐标,这可用于视觉上判断异常物,以确定异常物是否已经被正确地识别出来,或这只是一个貌似异常物的结构特征,但是是良性的。代表异常物的数据也可以从数据组提取,并为进一步的分析而单独保存。
尽管没有必要,但如逻辑框1140所指出的,可能仍然希望进一步处理三维数据组,进一步详细说明异常结构的身份,以减少假阳性的发生,就是说,结构被标为异常的,而实际上是良性的。进一步的处理可以在整个数据组上进行,或在提取的包含体积数据的数据组上进行,体积数据代表包围已识别的异常物的位置的结肠区域。这样的进一步处理包括对数据应用本领域公知的各种技术,如二次判别分析、滞后阈值处理和模糊群集,以增强异常物的识别和减少假阳性的发生。
一旦完成所有的处理,在逻辑框1150产生一份报告,它被传递给外科医生和/或病人的医生。该报告可包含有关扫描和扫描过程中识别出的异常物的各种信息,目的是帮助医师对病人进行诊断和治疗。
图14和15表示这样一份报告的示例。图14描述病人的整个结肠的视图,视图上具有标识出的特定的区段。图15表示与图14中标识的区段相连的计算机产生的报告。这些报告适合医师使用,也可以由医师直接交给病人,帮助病人理解自己的情况,理解医师可能提出的任何治疗。
本发明的各种实施例的系统和方法的应用的一个特别优势是能够自动或半自动地绘制体积数据组,利用相对便宜的计算机和显示器诊断异常物和产生报告,也有能力利用从一个或多个扫描中心传到远程分析站点的数据来做这些工作。例如,本发明的一个实施例设计一个中央系统或分析传给一个中心分析地点的大量CT扫描数据。这样一个系统将允许扫描中心扫描病人,而不用负担必须也分析数据和产生报告的费用。例如,利用本发明的系统和方法的一个单个分析中心将从100个或更多的扫描中心接收和分析CT扫描数据。
一旦数据由分析中心接收,数据可以由中心处理,或可替代地被传输到进行处理的第二个中心。如果数据被发送到第二个中心,第二个中心产生的报告和/或处理的体积数据组被回送给分析中心,以与原来的扫描中心通信或与扫描中心识别的外科医生和/或内科医生通信。这样的系统还提供数据的分析,这是通过熟练的技师向放射线学者报告他们的发现,放射线学者阅读扫描数据后则可以提交包含他们意见的报告和他们的治疗建议,报告和建议然后被传送给适当的外科医生或内科医生。
本领域技术人员可以理解的是,尽管是参照成像病人的结肠来描述本发明的系统和方法,但本发明的各种实施例同样可以适用于身体其它结构的扫描和分析。例如,所描述的展平和表面下方法同样有助于对身体的管状结构成像和分析,这些管状结构如气管、食道等等。
尽管说明和描述了本发明的特定实施例,明显的是,不偏离本发明的精神和范围的前提下可以做出各种改变。因此,所要明确的是,本发明只由所附的权利要求来限定。
<pre listing-type="program-listing"><![CDATA[  /*-------------------------*/  1)Rotate to Coronal Anterior View for start   gCameraViewAngle.x=90;   gCameraViewAngle.y=0;   gCameraViewAngle.z=0;  2)Then rotate 360 degrees about z-axis sampling voxels as we go  3)Next step forward l voxel and repeat step 2  */  char FlattenFrameNEW()  {long maxDegrees,z,i;  long voxelValue;  Point3dDouble tempPosition,startPosition;  Uint32 *zOffsetTable;  Uint32 *yOffsetTable;  Uint8*volBuffer;  Uint8*sliceBuffer;  C3dVolume*volume;  Point3dDoubletempRotAngle,theRotAngle;   if(gUseVariableWidthFlattening)  return FlattenFrameVW();  //Get some globals from the flattened volume   volume=gFlattenedView->f3dVolume;   if(volume!=NULL)  {   volBuffer=volume->f3dVolumeBuffer;zOffsetTable=(Uint32*)volume->fZoffsetTable;   yOffsetTable=(Uint32*)volume->fYoffsetTable;   gDestVolIndex.x=359;   //Reset the Vectors;   Point3dLongToDouble(&amp;gxVectorDouble,gxVectorLong);   Point3dLongToDouble(&amp;gyVectorDouble,gyVectorLong);   Point3dLongToDouble(&amp;gzVectorDouble,gzVectorLong);  ///////////   theRotAngle=gzVectorDouble;   gzVectorDouble=gxVectorDouble;   gxVectorDouble=theRotAngle;   theRotAngle.x=-gxVectorDouble.x;   theRotAngle.y=gxVectorDouble.y;   theRotAngle.z=-gxVectorDouble.z;   tempRotAngle=theRotAngle;   maxDegrees=180;   SaveViewVectorsDouble();   gDestVolIndex.x=180;//Start at center for variable width flattening   for(i=0;i<maxDegrees;i+=1)   {Point3dLongToDouble(&amp;startPosition,gCameraPosition);  tempPosition=startPosition;  voxelValue=  SamplePixelFastDouble2(tempPosition,&amp;gzVeetorDouble,gSlopFactor,0);  Update3dVectorsDoubleNEW(theRotAngle);//rotate 360 degrees  about z-axis l degree at a time  gDestVolIndex.x--;}  //**********  RestoreViewVectorsDouble();  theRotAngle.x=-theRotAngle.x;  theRotAngle.y=-theRotAngle.y;  theRotAngle.z=-theRotAngle.z;  gDestVolIndex.x=180;//Start at center for variable width flattening  for(i=0;i<maxDegrees;i+=1)  {   Point3dLongToDouble(&amp;startPosition,gCameraPosition);   tempPosition=startPosition;   voxelValue=  SamplePixelFastDouble2(tempPosition,&amp;gzVectorDouble,gSlopFactor,0);Update3dVectorsDoubleNEW(theRotAngle);//rotate 360 degrees  about z-axis l degree at a time  gDestVolIndex.x++;   }   if(gDestVolIndex.z>=0)   {  *(gFlattenRefLineBuffer+gDestVolIndex.z)=  gCameraPositionDouble;   }   gColonFrameIndex++;   gDestVolIndex.z--;   return TRUE;  }  /*-----------------------*/  long SampleXRayFastDouble2(Point3dDouble tempVectorIndex,Point3dDouble  *vectorStep,short slopFactor,long cpuIndex)  {  Uint8*theBuffer;  long *transparencyValue;  long *opacityValue;  Uint32 *zOffsetTable;  Uint32 *yOffsetTable;  shorttheCount;  shortvoxValue;  Uint32 volOffset;  Uint8theValue;  long transpFactor;  long grossTranspFactor;  Uint32 finalIndexValue;  Uint32 volumeBufferMax;  long volumeOffsetMax;  long xCount,yCount,zCount;  long tempIndex;  Point3dDoubletempVolumeSizeMin,tempVolumeSizeMax;  register double tempVectorStepx,tempVectorStepy,tempVectorStepz;  Uint8*overViewImage;  Point3dDouble tempPosition,startPosition;char firstVoxel=TRUE;  doublevertOverSampling;   finalIndexValue=0;   grossTranspFactor=0;   theBuffer=g3dVolumeBufferPtr;  //////////   zOffsetTable=(Uint32*)gZoffsetTablePtr;   yOffsetTable=(Uint32*)gYoffsetTablePtr;   transparencyValue=(long*)&amp;gTransparencyValue
;   opacityValue=(long*)&amp;gOpacityValue
;  #define VERT_OVERSAMPLE  #ifdef VERT_OVERSAMPLE  ///////////////  //Vertical oversampling   vertOverSampling=(double)gSubSurfaceDepth/128.0;   tempVectorStepx=vectorStep->x*vertOverSampling;   tempVectorStepy=vectorStep->y*vertOverSampling;   tempVectorStepz=vectorStep->z*vertOverSampling;  #else   tempVectorStepx=vectorStep->x;   tempVectorStepy=vectorStep->y;   tempVectorStepz=vectorStep->z;  #endif   volumeBufferMax=gVolumeBufferMax;   volumeOffsetMax=g3dVolumeBufferSize;   tempVolumeSizeMax=gTempVolumeSizeMax;  //////////////////////  //The loop   theCount=min(gViewDepth,200);   startPosition=tempVectorIndex;   do   { tempIndex=tempVectorIndex.z;  volOffset=*(zOffsetTable+(tempIndex));  tempIndex=tempVectorIndex.y;  volOffset+=*(yOffsetTable+(tempIndex));  volOffset+=tempVectorIndex.x;  if(volOffset>=0&amp;&amp;volOffset<volumeOffsetMax)  {   theValue=*(theBuffer+volOffset);   transpFactor=transparencyValue[theValue];   if(transpFactor!=0)   {  {  grossTranspFactor+=transpFactor;  if(grossTranspFactor>=0x1000)  {   if(firstVoxel)   {   tempPosition=tempVectorIndex;   tempPosition.x-=startPosition.x;   tempPosition.y-=startPosition.y;   tempPosition.z-=startPosition.z;   yCount=  quickSquareRoot((tempPosition.x*tempPosition.x)+(tempPosition.y*tempPosition.  y)+(tempPosition.z*tempPosition.z));   firstVoxel=FALSE;   }   else   yCount++;   if(yCount<0||yCount>=128)//  VERT_OVERSAMPLE   {   //DebugThis(4812);  theCount=0;  break;   }   overViewImage=gXRayImage;   overViewImage+=yCount*gXRayRowBytes;   overViewImage+=gDestVolIndex.x;   *overViewImage = theValue;   finalIndexValue=0;grossTranspFactor=0x10000; //just in case  of overflow  }  finalIndexValue+=opacityValue[theValue];  }  }   }   {   tempVectorIndex.x+=tempVectorStepx;   tempVectorIndex.y+=tempVectorStepy;   tempVectorIndex.z+=tempVectorStepz;   }   }while(theCount-->0);   return((long)theValue);  }  /*------------------------*/  /*   Take an″xray″view of a slice from the flattened image  Same code as one flatten sliver(from one FBW center point)  Instead of stopping at surface walls dig below to a certain depth  */  char XRayFrame()  {  long maxDegrees,z,i;  CMainView *oldMainView;  long voxelValue;  Point3dDouble tempPosition,startPosition;  Uint32 *zOffsetTable;  Uint32 *yOffsetTable;  Uint8 *volBuffer;  Uint8 *sliceBuffer;  Uint32 volOffset;  long rayDistance,tempIndex;C3dVolume *volume;  Point3dDouble tempRotAngle,theRotAngle;  SaveViewVectors();  if(!gVirtualColonView->fVCMovie->fPlayMovie)  {  gOverrideAnimUpdate=TRUE;  gMakeFlattenedMovie=10;  gVirtualColonView->fVCMovie-  >FindFrame(*(gFlattenRefLineBuffer+gRefLineNumber));  gMakeFlattenedMovie=FALSE;  gOverrideAnimUpdate=FALSE;   }  //To set view vectors correctly  //////////////  //Get some globals from the flattened volume   volume=gFlattenedView->f3dVolume;   if(volume!=NULL)   {  volBuffer=volume->f3dVolumeBuffer;  zOffsetTable=(Uint32*)volume->fZoffsetTable;  yOffsetTable=(Uint32*)volume->fYoffsetTable;   }   gDestVolIndex.x=359;  //////////  //Reset the vectors   Point3dLongToDouble(&amp;gxVectorDouble,gxVectorLong);   Point3dLongToDouble(&amp;gyVectorDouble,gyVectorLong);   Point3dLongToDouble(&amp;gzVectorDouble,gzVectorLong);  ///////////   theRotAngle=gzVectorDouble;   gzVectorDouble=gxVectorDouble;   gxVectorDouble=theRotAngle;   theRotAngle.x=-gxVectorDouble.x;   theRotAngle.y=gxVectorDouble.y;   theRotAngle.z=-gxVectorDouble.z;   tempRotAngle=theRotAngle;Normalize3d(&amp;theRotAngle);  maxDegrees=180;  SaveViewVectorsDouble();  gDestVolIndex.x=180;//Start at center for variable width flattening  for(i=0;i<maxDegrees;i+=1)  {  Point3dLongToDouble(&amp;startPosition,gCameraPosition);  tempPosition=startPosition;  voxelValue=  SampleXRayFastDouble2(tempPosition,&amp;gzVectorDouble,gSlopFactor,0);   Update3dVectorsDoubleNEW(theRotAngle);//rotate 360 degrees  about z-axis l degree at a time   gDestVolIndex.x--;   }  //**********   RestotrViewVectorsDouble();   theRotAngle.x=-theRotAngle.x;   theRotAngle.y=-theRotAngle.y;   theRotAngle.z=-theRotAngle.z;   gDestVolIndex.x=180; //Start at center for variable width flattening   for(i=0;i<maxDegrees;i+=1)   {   Point3dLongToDouble(&amp;startPosition,gCameraPosition);   tempPosition=startPosition;   voxelValue=  SampleXRayFastDouble2(tempPosition,&amp;gzVectorDouble,gSlopFactor,0);   Update3dVectorsDoubleNEW(theRotAngle);//rotate 360 degrees  about z-axis 1 degree at a time   gDestVolIndex.x++;   }   RestoreViewVectors();   return TRUE;  }]]></pre>
权利要求
1.具有由壁界定的内腔的管状身体结构成像的一种方法,包括提供包含数据的一个数据组,所述数据表示身体的一个管状结构的多个横截面图像,所述图像是沿所述管状体的纵向轴拍摄的;处理所述数据组,以重构所述管状体的一个三维图像;标识通过所述三维图像的内腔的一条中心路径;沿所述中心路径选择一个起点;处理始于所述起点和继续沿结肠的所述三维图像的所述纵向轴的数据,并绘制所述三维图像的一个展平视图;存储代表所述展平视图的数据到一个图像缓冲器中;显示所述图像的所述展平视图。
2.如权利要求1所述的方法,进一步包括沿所述中心路径选择一点;处理在所述选择点的数据,并在所述选择点绘制所述管状结构壁的一个横截面图像;和显示所述管状结构壁的所述横截面图像。
3.如权利要求1所述的方法,其中所述的处理数据和绘制展平的图像包括从所述起点向所述壁投射一条射线,所述射线的方向对应于视图的角度;和添加一个三维像素值到图像缓冲器中。
4.如权利要求3所述的方法,进一步包括把所述视图角度偏移1度;从所述起点向所述壁投射另一条射线,如果所述的视图角度从所述最初的起点还没有偏移总共360度,那么这条射线的方向对应于所述视图偏移的角度。
5.如权利要求4所述的方法,进一步包括如果所述的视图角度从所述最初的起点已偏移总共360度,则沿所述内腔的纵向轴推进所述起点一个选择的值;重复投射所述射线的步骤,并在一个图像缓冲器中存储三维像素值,直到所述内腔的整个长度已经被处理。
6.如权利要求4所述的方法,其中所述管状结构是结肠。
7.一种生成身体的管状结构壁的内部视图的方法,所述视图包括邻近所述壁外部的组织,所述方法包括多个步骤(a)提供一个包含数据的数据组,所述数据表示一个三维体积,该三维体积表示沿所述管状体的纵向轴的身体管状结构,所述管状体具有由壁界定的一个内腔;(b)沿中心路径选择一个起点,所述中心路径沿着所述管状体的纵向轴布置;(c)向所述壁以选定的距离投射一条射线,通过从所述起点沿该射线移向所述壁;(d)在所述射线每步的位置处计算三维像素值;(e)将所述三维像素值添加到一个图像缓冲器中;(f)把所述射线的角投射增加一度;(g)确定自选择所述起点之后,所述射线的角投射是否已经增加了360度;(h)向所述壁投射一条具有增加的角度的射线;(i)重复步骤(d)到(h),直到所述射线的角投射已经增加了360度为止;和(j)显示表面下体积图像。
8.如权利要求7所述的方法,其中所述管状结构是结肠。
9.如权利要求1所述的方法,进一步包括把所述三维体积数据组与代表预定异常物的几何模式库相比较;把包含在所述三维体积数据组内的结构识别为异常的,如果确定所述结构在预定的容差内匹配至少一个几何模式库。
10.如权利要求7所述的方法,进一步包括把所述三维体积数据组与代表预定异常物的几何模式库相比较;把包含在所述三维体积数据组内的结构识别为异常的,如果确定所述结构在预定的容差内匹配至少一个的几何模式库。
11.如权利要求9所述的方法,进一步包括进一步处理所识别的异常结构,以确定该识别的结构是否不是异常的。
12.如权利要求10所述的方法,进一步包括进一步处理所识别的异常结构,以确定该识别的结构是否不是异常的。
13.一种显示在扫描病人身体的一部分的过程中产生的数据的视图的系统,包括存储扫描数据的一个存储器;能够进行编程以分析扫描数据的一个处理器,所述处理器可连接到所述存储器,并被配置以处理所述存储器中的数据,以绘制三维体积的一个展平视图;和用于显示所述展平视图的一台显示器。
全文摘要
提供一个系统(10)和方法,用于分析和显示从数据组绘制的多个图像,所述数据组来自于病人的扫描数据。显示的图像包括病人的解剖组织的选择部分,例如诸如结肠这样的管状结构的二维和三维视图。
文档编号G06F19/00GK1646059SQ03808795
公开日2005年7月27日 申请日期2003年3月14日 优先权日2002年3月14日
发明者W·V·小格伦, R·肯珀 申请人:Netkisr有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1