VRML提供了强大的交互功能,它允许用户以不同的方式和场景进行交互,提供交互的这类节点称为传感器节点。它们是专门用来处理交互工作的,比如,接触传感器(Touch-Sensor)可用来响应用户的碰触动作(鼠标单击),接近传感器(ProximitySensor)可用来检测用户在规定区域内的运动,碰撞检测节点(Collision Node)可用来检测物体间的碰撞冲突等。本章使用VRML中的传感器节点通过用户图形接口实现了用户和虚拟内窥镜场景的交互式可视化。
在生成三维数据并实现了基于VRML的血管腔的表面拟合和显示之后,需要生成漫游路径,实现血管腔内内镜漫游式的观察,以及VRML场景中IVUS/IV-OCT像素数据的显示和血管形态参数及血流动力学参数的可视化显示。
(1)获取漫游路径
漫游是虚拟内窥镜系统中一切功能和交互实现的前提。虚拟内窥镜漫游就像一个虚拟相机,沿着一定的路径行进,将漫游过程中经过的管腔内部结构图像拍摄并记录下来。因此,在虚拟内窥镜系统中漫游的关键就是找到一条合适的漫游路径。漫游路径是在虚拟内窥镜模式下,观察者的替身在重建好的三维血管腔内移动观察时走过的轨迹,漫游路径的正确获取是全视角、无抖动漫游的保证。
可采用第2.5.5节中重建出的血管腔轴线作为漫游路径,即采用血管腔中轴心线上的点构成视点序列。设想漫游中观察者处于一段较为弯曲的血管段处,观察者从当前视点位置向下一个视点处移动,如果采用直线位移且不发生视角的旋转,观察者就会发现不再有全视角的观察,产生了视野的遮挡,这时就需要在此视点处发生一个转动。所以为了在漫游过程中不发生视角的遮挡,对于每个视点,都需要确定其方向,计算其旋转轴和旋转角。
VRML中,视点(Viewpoint)节点由位置域position和方向域orientation确定,如图5-15所示。方向域可用一个遵循右手定则的三维矢量数组( ,φ)表示,其中 为位置矢量, 为旋转轴,φ为旋转角。初始视点方向为z轴负方向。
图5-15 视点方向示意图[32]
设漫游路径由n个视点组成{P0,P1,...Pn-1}, 是漫游路径上的视点Pi到Pi+1(i=0,1,…,n-2)的方向矢量,则有如下公式:
-zi是第i个视点Pi处的方向,公式如下:
ri→是Pi处的旋转轴,公式如下:
其中-ze→=[0,0,-1]代表初始方向,即z轴负方向。φi是Pi处的旋转角,则有如下公式:
对于具有n个点的视点序列{P0,P1,...Pn-1},漫游路径端点处的旋转轴和旋转角的确定方法如下:[32]
对应视点节点定义可知,Pi的坐标(x,y,z)即为位置域的域值,由式(5-1)~(5-4)计算所得旋转轴 的三维坐标值和旋转角φ的值构成方向域的域值,控制视点在漫游过程中的旋转方向和角度。
(2)实现漫游
根据漫游方式的不同,分为自动漫游和手动漫游两种方式。(www.xing528.com)
自动漫游的实现思想是场景不变,移动视点的位置来改变所见的场景内容。原理是将替身和视点绑定,当场景视点改变时,替身的位置和方向一并改变。漫游路径由一系列的视点构成,但是从一个视点直接跳至下一个视点会导致动画的不连续,因而需要进行插值,产生顺畅的动画。自动漫游的实现就是对视点进行线性插值的过程。VRML提供了一系列的线性插值器,包括PositionInterpolator(位置插值器)、CoordinateInterpolator(坐标插值器)和ColorInterpolator(颜色插值器)等。这些插值器在对应的域中设置一系列的关键帧时刻和对应这些关键帧的值,通过时间感知器的控制就可以进行线性插值,从而实现各种动画效果。
视点动画主要依靠接触感知器(TouchSensor)、时间感知器(TimeSensor)、位置插值器(PositionInterpolator)共同完成。在一定的时间段内,利用位置插值器设定多个关键帧,控制改变的输出值,最后再用ROUTE语句将感知器、插值器和要控制的视点连成一条通路即可,流程如图5-16所示。TouchSensor监测指点设备(鼠标和键盘等)的输入,当用户单击鼠标,触发接触感知器开始工作,它的出事件touchTime为鼠标按下的时间,它控制TimeS-ensor开始工作。时间感知器工作过程中,fraction changed的值从0~1一直在发生改变,表示完成当前周期的时间比率,这个比率值控制选择PositionInterpolator的关键帧,使其进行插值运算,完成位置值的不断改变,而它的位置值value changed控制Viewpoint。
图5-16 自动漫游视点的动画流程
自动漫游是在已经设置好的漫游路径上进行自动观察,为了方便操作者自主观察的需要,还可设计手动漫游方式。手动漫游的实现要比自动漫游简单,不需要时间感知器的控制,而是由操作者对视点直接进行控制。操作者每操作浏览器界面上向右箭头一次,观察视野就移动到漫游路径上的下一个视点处。如此操作者就可以自由地控制观察速度,还可以依次返回到已观察过的上一个视点处。
(3)在VRML场景中显示IVUS/IV-OCT像素数据
操作者在进入虚拟内窥镜漫游模式后,可以采用手动或者自动漫游模式观察血管腔(包括可能存在的斑块)的内部结构。为了方便用户在指定观察点处可随时打开或关闭在该点处采集的IVUS/IV-OCT图像,可对VRML场景中插入的IVUS/IV-OCT像素数据采用半透明的显示方式,即一帧IVUS/IV-OCT图像中各像素的透明度值不是同一个常数,而是取决于像素在图像中的位置和它的灰度值。
IVUS/IV-OCT图像中除了血管壁和斑块以外,其他结构在虚拟内镜场景中都应该是不可见的。可利用对IVUS/IV-OCT图像的二维分割结果,将表示管腔内和血管壁外膜以外回声信号的像素设置为全透明,允许漫游路径无阻挡地穿越这些区域。而对于诸如管壁和斑块这些感兴趣区域,其透明度值取决于像素的灰度值,例如,亮回声信号表示可能存在的斑块,因此其不透明度值设置为较高的数值;图像中的暗区表示其他血管的管腔或者没有产生回声的其他结构,其不透明度值设为较低的数值。
确定各帧IVUS/IV-OCT图像中的血管壁外膜轮廓的空间方位之后,获取外膜轮廓点的三维坐标,利用PointSet节点对外膜管腔进行显示,point域值设为外膜轮廓的三维坐标,然后使用PixelTexture节点对外膜轮廓点设置灰度值和透明度值。透明度和灰度值的设置使用SFImage类型的域。在VRML中,SFImage类型的域包含一个未经压缩的二维灰度图像。一个SFImage值包含三类数值,首先是两个整数,分别表示图像的宽度和高度;然后是一个表示图像分量的数值(范围是1~4),它表示图像是灰度还是彩色,以及是否包含透明或半透明的像素;最后是一组由空格分隔开的十六进制数,每个数代表图像的一个像素值。
单分量图像表示对每一个像素点用一个字节的十六进制数表示像素点的亮度;双分量图像使用两个字节,分别表示亮度和透明度;三分量图像的每一个像素由三个字节组成,分别表示R、G、B三分量值;四分量图像在三分量的基础上又增加了一个透明度值。可使用二分量图像,即使用SFImage域类型的PixelTexture节点中的二维颜色值来表示,对于每个像素使用两个字节来表示,第一个字节表示像素的亮度,第二个字节给出其透明度。例如,亮度字节的值为0xFF表示最亮(白色),0x00是最暗(黑色),透明度字节的值为0xFF表示全透明,而0x00是完全不透明。
(4)VRML场景中血管量化参数的可视化表达
具有临床参考价值的血管形态参数包括血管段长度、管腔容积、横截面积、曲率和挠率、斑块体积等;血流动力学参数主要是指血管壁受到的、由于血流引入的剪应力分布。为了方便使用者直观清晰地了解血管形态参数,可在VRML中通过建立静态曲线图和颜色查找表等方法实现这些参数的可视化。
此外,对于三维血管模型上的每个体元,可将血管壁剪应力数据作为该体元的注释值。在可视化系统中,采用伪彩色编码的方法,建立颜色查找表,通过对三维血管壁的节点进行顶点着色,直观表示每个体元受到的剪应力大小。
(5)用户图形接口
简明清晰、方便灵活并且操控性强的操作界面是虚拟内窥镜系统的重要组成部分。可在VRML环境中设计开发一个用户控制面板,使其完成以下功能:可随时开启和关闭控制面板,并且开启时以尽量不遮挡目标场景为原则;虚拟观察者沿漫游路径前进时,用户可在某个视点处在不同的显示模式之间进行切换,例如按照正确的方向和位置显示在该点获取的IVUS/IV-OCT图像,或者仅显示该点处的管腔表面(可同时开启或关闭半透明的IVUS/IV-OCT图像),或者显示完成了彩色编码(表示量化测量结果)的管腔表面等;用户可以随时进入或退出虚拟内镜的观察模式,显示重建后血管段的整体外观,或者切换为长轴纵切视图;可调整漫游的速度和方向,虚拟观察者可在管腔内的任意位置停留。
用户控制面板分为两种模式:内窥镜观察模式和虚拟漫游模式。在内窥镜观察模式下,用户可以选择观察血管三维模型、血管形态参数和血流动力学参数,还可以进入自动漫游和手动漫游状态。在虚拟漫游模式下,观察者可以随时开启和关闭控制面板、调取所在位置处的IVUS/IV-OCT图像、调整漫游速度以及退出观察血管模型外观等。控制面板层次示意图如图5-17所示,将VRML场景分为三层:可见组件(如血管模型)、代理模型1(鼠标单击激活控制面板)、代理模型2(鼠标移出关闭控制面板),每层实现不同的功能。可见组件是VRML场景显示的三维血管模型,代理模型1实现控制面板的激活,代理模型2实现控制面板的关闭。将控制面板代理器的中心定位在漫游轨迹上,并使其位于视点前景方向的前方固定距离,使得代理模型在漫游过程中随着用户视点的移动而向前推移。代理模型一直处于观察者的正前方,用户单击图像中心操作代理模型,激活或者关闭控制面板。控制面板的默认值是关闭的,只有当在漫游中需要退出漫游模式并调出所在位置处采集的IVUS/IV-OCT图像或者调整漫游速度时,操作鼠标单击为控制面板设置的专用代理模型1,才激活控制面板。
图5-17 控制面板层次示意图
每个场景之间是通过Anchor节点将两个VRML文件连接起来的,实现相互之间的跳转。例如,由主控制面板进入自动漫游模式下,在主控制面板场景中建立进入自动漫游场景的Anchor节点,将定义AUTOFLY的VRML程序作为定义为AUTO的Anchor节点的子节点即可。Anchor节点包含了该节点指向的URL,即说明要装入文件的路径。在主控制面板场景中,利用同样的方法可以定义MANUAL(手动漫游)等Anchor节点模块。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。