从3月20号开始就开始呆在深圳“被实习”了,还好做的东西和我研究的方向没多大冲突,主要是做医学图像处理这块的软件。这一个月做的还是体绘制增强方面的东西,看了N多的体绘制的软件,想了挺多体绘制增强的方法,一些比较重要的体绘制交互方法终于被我攻克了。

做的主要是下面这些东西:

1.体绘制传递函数交互的改进

2.体绘制下的pick操作

3.体绘制下手动划选区域的操作

 

第一个传递函数的交互其实没什么好说的了,我在网上翻了遍,除了巴可这个牛X一般的软件之外,其它都是使用在界面上设置一些控制点,然后手动调曲线来控制传递函数。如下图德国软件MITK 3M3所示

 

这种方法看起来好像很专业,但是给用户调实在是太难调了,连专业人士经常操作都会失误,所以,这种方法挺不友好的。

在目前看来,巴可的软件做这方面是做得最好的了,我们可以看看它的传递函数界面:

其实很简单,就是双重的窗宽窗位,这和很多二维的dicom阅片软件带的功能一样简单,好用,用户也不用太关心传递函数究竟要怎么调才好,只要我调到看得见就行。

 

第二个就是pick操作了。pick操作我先前已经找了很多资料,也在vtk的论坛搜了很多,但是却没有发现解决方法,自己就开始琢磨究竟要怎么实现这个pick操作,因为体绘制和面绘制不太一样,它是通过对一条光线上点的积分最终获得屏幕上一点的像素值的,所以我就想,pick的操作直接就针对这个屏幕的像素点来一个体绘制就行了。想好了这个基本想法之后,我偶然发现vtk5.6之后竟然有一个叫vtkVolumePicker的东西,仔细看了一下它的源码,发现它是基于不透明度等值面的这种方法来实现pick的,也就是说它也是针对这个屏幕像素点做体绘制,不透明度一直累加,一直加到某个不透明度之后就停止,在这时得到的点就是要pick的点了。其实这种方法并不完美,例如pick一些类似雾状的东西的时候会pick不到正确的点,但是对于骨头、血管之类的东西,用vtk自带的这个picker也差不多够了。这种pick方式是有改进的空间的,我查到国外的文献有利用沿这条光线采样得到的数据的梯度和二次导什么的来判断是否是pick的点,具体可以看Perception-Oriented Picking of Structures in Direct Volumetric Renderings    Alexander Wiebel, Frans M. Vosand Hans-Christian Hege  这篇文章,效果貌似很好。

第三个就是区域手工圈选了。其实想法很简单,就是在屏幕上画完曲线之后,extrude出一个柱状的东西,然后拿这个柱状的东西和volume进行运算,看volume的哪些在柱状物体中。这个问题花了我很长时间才解决,主要不是实现的问题,而是效率的问题。我在vtk论坛上问,连vtk的原始作者bill lorenson都回答了问题,但是给的方向都不太正确。使用它的方法,一样很慢,甚至比我自己想的方法,把volume的每个点转换为世界坐标然后判断是否在这个多边形的体内,这个转换的速度还是很慢,判断每个点是否在多边形内时间更久,对于512*512*365这种数量的点,要差不多5分钟,还是很久。后面论坛又有人给了建议,就是把这个柱状多边形体素化然后和volume进行处理,使用了这种方法之后,速度可以用飞快来形容。看来我之前都想错方向了,一个问题真的可以有很多不同的解决方式,这个问题可以这样解决,真的挺神奇的。

 

接下来的工作就是做骨头自动提取了。上周去深圳会展中心看了中国医疗器械博览会,看到了西门子的软件,做得挺好的,算是会场中做这方面做得最好的了,几乎都是在体绘制下操作,看来这个是大趋势。它有个骨骼自动提取的功能,而且还有针对不同部位的骨骼,骨骼去掉后效果也很好。巴可的软件也有这个功能,看来这也是大趋势。但是骨骼提取究竟要怎么实现,这还是个难题。

posted on 2012-04-24 17:55  30斤大番薯  阅读(1245)  评论(3编辑  收藏  举报