朱东,雷金树
(西南科技大学计算机科学与技术学院,绵阳 621010)
医学可视化是利用计算机对医学二维断层图像序列进行三维重建,使其立体逼真地显示在屏幕上,且能对三维图像进行交互,是现代医学影像研究的重要领域。
虚拟现实(Virtual Reality,VR)是以计算机技术为核心,结合相关科学技术,提供视觉、听觉、触觉等方面的高度近似模拟,使人产生身临其境感,用户借助必要的设备与虚拟环境交互,虚拟现实已被广泛应用于航空、医学、教育、旅游等多个领域[1]。目前的医学可视化系统大多都是基于二维平面,如PC端、平板端、Web端等,在对三维医学图像进行可视分析时,虽然便于用户操作,但观察效果不佳。为了增强沉浸式观察,Power-Wall显示器或洞穴状自动虚拟系统(Cave Automatic Virtual Environment,CAVE)[2]等大型显示设备充分利用人类的全方位视觉,以此达到无限地接近沉浸式,但这些系统往往需要庞大的空间且价格昂贵。头戴式显示设备(HMD)则是沉浸式的理想选择,它体积小,刷新率高,低延迟头部追踪,且成本相对较低。沉浸式虚拟现实将用户的视觉感官完全与外界隔离,使用户形成持久的专注力,因此传统的鼠标键盘式的交互不再适用于VR环境。
在人机交互方面,为了与虚拟场景进行交互,用户往往需要通过手中的设备作为外在媒介,如HTC Vive、Oculus Touch、Xbox 360游戏手柄等。但上述设备不能裸手操作,手部受限明显,影响交互效果。Leap Motion由两个高清摄像头、三个红外LED灯和光学传感器组成,它利用双目红外成像原理重建出手的三维空间运动信息,能够跟踪各个骨节、手指、手掌和类似手指的工具,并实时返回它们的空间位置以及方向信息,跟踪精度达到0.01mm[3],相比于Kinect,更适合用于手势识别。
沉浸式医学可视化是一项跨学科的应用性研究,其利用计算机强大的计算功能以及三维图像绘制算法,结合现在最热门的VR技术,实现了对构建好的三维医学图像进行沉浸式的观察与交互。因此本文结合可视化工具函数库(Visualization Toolkit,VTK)、头戴式显示设备Oculus Rift、体感交互控制器Leap Motion构建沉浸式医学可视化系统,帮助用户多层次多角度立体观察与分析医学可视化绘制结果。
系统以VTK作为医学图像处理工具,实现三维等值面绘制、体绘制等主流科学可视化绘制算法,并将三维图像实时显示在头戴式虚拟现实设备Oculus Rift上,然后利用体感交互器Leap Motion进行手势识别,完成交互。系统整体框架如图1所示。
图1 沉浸式医学可视化系统框架
医学数据三维可视化绘制采用科学可视化中的面绘制和体绘制方法。面绘制是通过几何单元拼接,对物体表面进行拟合而忽略物体内部信息的重建方法。体绘制是将每个体素都参与绘制,直接将体素投影到显示平面的方法。本文同时采用这两种绘制方法,面绘制中采用经典的移动立方体算法(Marching Cubes Algorithm,MC),其原理是根据给定的阈值提取三角面片,并按照一定的空间坐标和拓扑关系组成等值面,该算法获得的图像分辨率高,易交互[4]。体绘制算法采用基于GPU加速的光线投射算法,其基本思想是屏幕上的每个像素点发出一条光线,然后通过GPU完成对体数据的遍历、采样和计算,然后对各像素点的颜色和不透明度进行合成[5]。光线投射算法在各阶段操作都具有高度的独立性和很好的算术密集度,能够很好地利用GPU进行加速,提高绘制效率,改善用户在沉浸式虚拟环境中的交互体验。
VTK采用面向对象的设计思想,基于管线流程进行设计,数据在管线流程中的过程对象间输入输出,并在可视化管线中进行相应的处理。目前,VTK已经提供了专门用于Oculus模块的类,涉及到的类有vtkOculusRenderWindow,这个类处理Oculus接口的大部分内容;vtkOculusCamera从Oculus获取矩阵用于渲染,它包含一个缩放和平移矩阵,用于将世界坐标系映射到头戴式显示器空间[6];vtkOculusRenderWindowInteractor用于捕获控制器事件并将其转换为鼠标、窗口事件,该类属于VTK系统中的交互器类,但它不具备任何交互功能,因此为了创建一个用于沉浸式环境下的手势交互,需要对其功能进行扩充。为此从原有的交互器上派生出新的类vtkMyOculusInteractor,重写循环事件响应处理函数StartEventLoop(),并为其提供Leap Motion接口和手势识别模块。
沉浸式环境下的虚拟手模型是采用计算机视觉获取人手信息并在虚拟环境下对其呈现,因此视觉手姿态估计中的信息获取显得十分重要。三维手模型分为体模型、几何模型、网络模型以及骨架模型,结合VTK的绘制特点,本文选取骨架模型作为虚拟手模型。为了简化人手姿态估计,采用关键点模型姿态估计方法[7],该方法通过选取手部信息的关键点作为参数进行姿态估计,然后驱动虚拟手完成交互。本文选取21个关键点,用线条进行连接,构成简易虚拟骨架手模型。
图2 虚拟骨架手模型
结合沉浸式环境下的交互特点,本文提供了4种基本操作(a)移动(b)旋转(c)缩放(d)修改透明度,如图3所示。前三个手势的设计是参考Piumsomboon[8]等人的工作,他们对用户在AR中的行为偏好和手势进行研究,并创建了一个用户定义的手势集。其同样也适用于VR环境,但由于部分手势过于复杂,Leap Motion也存在原始手部运动捕捉不准确等问题,因此对手势标准进行改进,增大手势之间的特征差异,使其更易被Leap Motion识别[9]。根据Leap Motion SDK提供的手部跟踪反馈数据,设置相应的阈值来识别不同的手势。表1列出了手势的功能和标准,其中GrabStrength为抓握力度,pinchStrength为捏力度。
表1 手势的功能和标准
图3 操作手势集
我们定义了如下的交互流程:各个操作之间互斥执行,每次只能执行一种操作,当某一操作被识别,手势识别将进入锁定状态,不再识别其他手势,直到当前操作完成,手势进入释放状态,才能开始识别下一个手势。释放状态的手势被定义为单手五指伸开或双手五指伸开,此状态不进行任何操作。各手势的具体操作定义如下:
(1)位移操作
位移操作的目的是改变图像的位置,便于用户调整合适的距离,其规则为右手握拳,为了保证位移操作的原子性,对于手的每一次移动,图像只会按照手的最大位移偏差的方向移动,图像的位移差量与手的实际位移差量同步。
(2)旋转操作
旋转操作的目的是改变图像的方向,便于用户多角度观察图像,其规则定义为双手握拳,以左手作为旋转中心点,右手朝某一方向移动,图像以某一轴作为旋转轴旋转。右手朝X轴移动,图像平行于Z轴旋转;右手朝Y轴方向移动,图像平行于X轴旋转;右手朝Z轴方向移动,图像平行于Y轴旋转。右手移动方向的确定与位移操作中的方法一致。旋转过程为先将旋转轴平移至坐标轴,然后旋转,最后平移至原来的位置,即
F'=F*T*R*T'
其中T为平移操作,R为旋转操作。
(3)缩放操作
缩放操作的目的是改变图像的大小,其规则定义为双手呈捏状态,当两手之间的距离增大时,图像将被放大,两手距离减小时图像将被缩小。
(4)透明度修改
由于医学可视化中的传递函数修改操作过于复杂,我们只考虑对单一的传递函数值进行修改。修改操作的手势规则为右手食指伸直,其余手指弯曲,呈数字手势“1“,当手指开始上下按压时开始修改图像的透明度值。
为验证本文提出的沉浸式环境下医学可视化系统的可行性,我们建立了相应的实验。本实验的硬件环境为操作系统为Windows 10、处理器为Intel Core i7 3.40GHz(16 GB内存)和显卡为NVIDIA GeForce GTX 750 Ti的 PC、Oculus Rift头戴式显示器(HMD)、Leap Motion体感交互控制器。软件环境包括VS2013、VTK-8.0.1、CMake 3.7.0。实验数据为一组膝盖CT扫描数据,分辨率为 379×229×305。
图4展示了实验数据进行体绘制后经过平移操作、旋转操作、缩放操作以及参数修改这四种操作的实现效果。其中(a)移动图像:右手握拳,向右水平移动,图像向右水平移动。(b)旋转图像:双手握拳,左手放于旋转中心,左手不动,右手向右移动,图像绕Z轴旋转。(c)缩放图像:双手呈捏状态,向内拉伸,图像缩小。(d)修改透明度:右手呈数字手势“1”,做从上到下点击动作,皮肤透明度被修改为0,皮肤变得不可见,呈现出骨头。
图4 实验结果
针对沉浸式下医学可视化问题,本文提出了基于VTK、Oculus、Leap Motion的沉浸式医学可视化系统框架,并定义符合人自然行为习惯的操作手势集,极大地拓宽了在沉浸式虚拟环境中的交互方式,改善用户交互体验。目前,传统的医学可视化的一些交互功能还未能实现,例如切片操作、复杂传递函数修改等,此外手势识别的精度也需要提高。下一步,我们将丰富沉浸式下医学可视化的交互方式以及优化手势的定义和识别算法。
[1]陈浩磊,邹湘军,陈燕,刘天湖.虚拟现实技术的最新发展与展望[J].中国科技论文在线,2011,6(1):1-5.
[2]A.Febretti,A.Nishimoto,T.Thigpen,J.Talandis,L.Long,J.D.Pirtle,T.Peterka,A.Verlo,M.Brown,D.Plepys,D.Sandin,L.Renambot,A.Johnson,and J.Leigh.CAVE2:A Hybrid Reality Environment for Immersive Simulation and Information Analysis.in Proc.Eng.Reality Virtual Reality,Article 864903,2013.
[3]Leap Motion,Inc.Leap Motion.https://www.leapmotion.com/
[4]石玉.基于VTK的可视化技术研究与实现[M].西安建筑科技大学,2009.5
[5]唐振禹,吕晓琪,任国印.基于GPU加速的改进的光线投射算法研究[J].现代电子技术,2016,39(21):56-60.
[6]Kitware.VTK.https://blog.kitware.com/using-virtual-reality-devices-with-vtk/.
[7]胡弘,晁建刚,杨进等.Leap Motion关键点模型手姿态估计方法[J].计算机辅助设计与图形学学报,2015,27(7):1211-1216.
[8]T.Piumsomboon,A.Clark,M.Billinghurst,and A.Cockburn.User Defined Gestures for Augmented Reality.In IFIP Conference on Human Computer Interaction.282-299.Springer,2013
[9]Y.-j.Huang,T.Fujiwara,Y.-X.Lin,W.-C.Lin,K.-L.Ma.A Gesture System for Graph Visualization in Virtual Reality Environments.In IEEE Pacific Visualization Symposium.DOI:10.1109/PACIFICVIS.2017.8031577.