求教,怎么显示vtkvtkimageactorr的边框

& 相关文章 &
VTK中通过vtkCommand定义用户方法在其他vtkRenderWindow显示
如需转载请标明出处:链接地址 在qt中定义了两个qvtkwidget窗口,命名为qvtkWidget和qvtkWidget_2
但是要一个qvtkWidget调用了vtkCommand的用户方法后,显示在qvtkWidget_2上面。 class vtkWidgetCall : public vtkCommand
static vtkWidgetCall *New()
return new vtkWidgetC
QVTKWidget控件显示三维图片
QVTKWidget控件一般显示二维图片,如果要显示三维图片,并通过鼠标滚轮切换单张图片,则需要加入监听机制,可以自定义一个类来实现所需要的交互方式,该类可以继承于vtkCommand类。 (1)定义鼠标滚轮交互方式,用于显示下一张切片 class vtkNextSliceCallbk : public vtkCommand
vtkRenderWindowInteractor *I
vtkImageViewer2* viewer
的CMakeLists.txt放在同一级目录里。即类似下图的目录结构:
用链接地址QVTKWidget整合Qt&VTK Qt与VTK的整合可以使用VTK提供的类QVTKWidget,看这个类名就知道这个类其实就是一个Qt里的Widget (QVTKWidget派生自QWidget),所以可以把它当作普通的Qt里的Widget来使用,甚至可以在Qt Designer里像Qt的其他标准控件一样拖来拖去。 2.1 在Qt Designer里集成 要实现QVTKWidget在Qt Designer里像
QVTKWidget控件显示二维图片
&ResetCamera();
m_pRenderder-&DrawOn();
ui-&m_QVTKWidget-&GetRenderWindow()-&Render();//自动绘制出图像 QVTKWidget显示二维图片效果如下图,在基于QT开发的数字图像处理软件中显示,并同时读取图片的尺寸,图像深度和通道数等基本属性。
VTK中的vtkPlaneWidget显示在QT的qvtkwidget中
如需转载请标明出处:链接地址 正常情况下,vtkPlaneWidget要显示在vtkRenderWindowInteractor这个渲染窗口交互器中(下图的样子,是一种弹框的方式),但是现在有个任务是要显示在qvtkwidget中。 于是,我就到处搜资料发现主要是vtkPlaneWidget设置的交互器在哪里显示就在哪里显示 上面显示那样就是调用了 vtkRenderWindowInteractor *pInt = vtkRenderWindowInteractor::New
QVTKWidget关于加Q_OBJECT出错误
今天想在基于QVTKWidget的一个子类QVTKParaCord
中加个右键菜单,当使用contextMenuEvent(QContextMenuEvent *event)完成菜单事项后出了错误:
error LNK2001: 无法解析的外部符号 "public: static struct QMetaObject const QVTKWidget::staticMetaObject" (?staticMetaObject@QVTKWidget@@2UQMetaObject@@B
Using QVTKwidget
Assuming that you have built a shared build of VTK and you may or may
not have a set it up such that there is a path to the release version
of VTK in your PATH statement.
Then if you debug a project that is using QVTKWidget, you
PCL嵌入VTK/QT显示
installed QVTKWidget on Ubuntu with the package libvtk5-qt4-dev. I added this to PCLVisualizer: vtkSmartPointer&vtkRenderWindow& getRenderWindow() {
return win_; } and my code looks like this (it's based off
launch QtCreator and create the simple application. 10. In the mainwindow.h I add these headers: Source code 1
#include &QVTKWidget.h&
#include &vtkRenderer.h&
#include &vtkRenderWindow.h& And these members: Source code 1
QVTKWidget
QvtkWidget 和 vtkImageViewer2 改变default mouse interactorStyle
connection-&Connect(this-&ui-&qvtkWidget_1-&GetInteractor(),
vtkCommand::MouseWheelForwardEvent,
SLOT(mouseWheelForwardCallback(vtkObject*,ulong,void*,void*,vtkCommand
Install,build ONLY Install。 (五)QVTKWidget插件 VTK.sln在release下编译可在D:\Program files\VTK\vtk-dst\bin\Release生成QVTK.lib
QVTKWidgetPlugin等系列文件,将其拷贝到D:\Qt\4.8.4\plugins\designer,重新打开Qt designer,可以看到QVTKWidget插件了。 到此,ITK、VTK、Qt安装完成,添加好ITK、VTK的环境变量就OK了,只剩下测试是否能用。大家可以使用东灵实验室给的VTK&Qt测试例子做验证。
,qmake,nmake,好家伙,一大堆error,全是error link 2001类型的错误,查了下Qt库文件,发现好好的,怎么能存在2001错误呢?进Qwt的Qwtconfig文件里看了下,发现他把QT库的位置设置成了系统环境变量里的那个动态QT库的位置了,为了避免将来还有类似错误,赶紧把环境变量改了,qmake,nmake,一切正常。但是发现Qwt控件用不了了,为什么?因为qdesigner只能加载动态DLL,于是用动态版本的QT再次生成一遍,这次把生成的DLL拷贝到Qdesigner
选项 勾选VTK_USE_GUISUPPORT为ON, BUILD_EXAMPLES 编译EXAMPLE,最好不选,比较耗时 BUILD_TESTING,最好也不选,比较耗时 修改CMAKE_INSTALL_PREFIX为D:/ProgrammFIle/VTK2010/VTK 5.8.0 多次点击Configure,直到没有错误出现,即编译参数面板全部变为白色。 然后点击Generate,显示Generatingdone后完成,产生相应的VTK.sln 解决方案,退出Cmake即可。 5. 使用
,删除其中的工程文件,完成CMakeLists.txt文件,并添加相应的代码文件和链接VTK动态库,利用CMake配置完毕后,打开生成的工程文件vtkDialog.sln,编译执行,即可得到一个空的对话框程序。其中CvtkDialogDlg为该程序的主对话框类。 链接地址2.
设计用户界面,添加相应的控件 本程序需要实现的功能有(1)图像读取和管理;(2)图像切分和浏览。一个常见的医学图像可视化程序,包括四个视图,横断面视图,矢状面视图,冠状面视图和三维视图。因此,基于以上设计,我们添加一个树
的代码文件和链接VTK动态库,利用CMake配置完毕后,打开生成的工程文件vtkDialog.sln,编译执行,即可得到一个空的对话框程序。其中CvtkDialogDlg为该程序的主对话框类。 2.
设计用户界面,添加相应的控件 本程序需要实现的功能有(1)图像读取和管理;(2)图像切分和浏览。一个常见的医学图像可视化程序,包括四个视图,横断面视图,矢状面视图,冠状面视图和三维视图。因此,基于以上设计,我们添加一个树控件,MFC中对应的控件类为CTreeCtrl。树控件是最常用的文件管理控件
&vtkRenderWindowInteractor.h&
#include&vtkInteractorStyleImage.h&
#include&vtkJPEGReader.h&
#include&vtkRenderer.h&
#include&QVTKWidget.h&
int main(int argc,char **argv)
QApplication app(argc,argv);
QVTKWidget
widget.resize(256,256
:picker拾取并高亮通知 步骤一:先随便插入几个actor,用Source做为数据源~给上不同的Position和color~
步骤二:给propPicker添加observer,先查看propPicker和事件,感觉应该使用vtkCommand::EndPickEvent
写回调函数,这个简单直接调用GetActor()方法,然后通过vtkActor::GetProperty()-&SetColor()变色 //回调 class
#include &OpenCV243.h&
#include "vtkPolyDataWriter.h"
#include "vtkPolyDataReader.h"
class BuildVTKWidgetCall : public vtkCommand
static BuildVTKWidgetCall *New()
return new
" #include "vtkCamera.h" #include "vtkActor.h" #include "vtkRenderer.h" #include "vtkCommand.h" #include "vtkBoxWidget.h" #include "vtkTransform.h" #include "vtkInteractorStyleTrackballCamera.h" class vtkWidgetsCallback : public vtkCommand { public
ArcScene三维漫游
程序功能: 将dwg的region实体转化为ArcGis的MultiPatch三维实体入ArcSde库,在客户端的ArcScene控件里加载图层,进行三维漫游 三维飞行效果图:鼠标左键单击可加快飞行速度,鼠标移动可控制飞行方向 三维漫游效果图:平移、旋转、鼠标滚轮缩放、全图显示
& 2012 - 2016 & aiuxian.com &All Rights Reserved. &
/*爱悠闲图+*/
var cpro_id = "u1888441";502 Bad Gateway
502 Bad Gateway
openresty/1.11.2.2基于VTK和MFC的医学图像三维重建研究与实现_罗火灵-工作总结范文网
全站搜索:
您现在的位置:&>&&>&计算机软件及应用
基于VTK和MFC的医学图像三维重建研究与实现_罗火灵
5生物医学工程学进展62010年第31卷第1期 研究论著#23#基于VTK和MFC的医学图像三维重建研究与实现罗火灵,许永忠,陈世仲中国矿业大学生物医学信息研究所(徐州,221116)
=摘要& VTK是医学可视化领域的主流工具,MFC是Windows平台下的应用程序框架。尝试将两者进行结合编程,以实现二维医学图像的三维重建。实现医学图像三维重建的主要方法是面绘制和体绘制。将利用多组医学图像数据进行三维重建研究,其中面绘制用移动立方体法,体绘制用光线投射法、最大密度投影法和合成体绘制法实现。最后比较两种绘制技术的结果并讨论了它们的特点。结果表明,VTK作为一种图像处理和三维可视化工具其功能是十分强大的。=关键字& VTK;三维重建;MFC;体绘制;面绘制;医学图像;光线投射法=中图分类号&R319
=文献标识码&A
文章编号:10)01-0023-07TheStudyandRealizationfor3DReconstructionofMedicalImageBasedonVTKandMFCLuoHuoling,XuYongzhong,ChenShizhongTheResearchLaboratoryofBiomedicalInformation,CUMT(Xuzhou,221116)=Abstract& VisualizationToolKit(VTK)isthemaintoolinthefieldofmedicalvisualization,MFC(M-icrosoftFoundationClass)istheapplicationframeworkinWindows.Thispaperwilldiscusshowtoprogramwiththewoofthem,andrealizethe3Dreconstructionfrom2Dmedicalitmages.SurfaceRenderingandVolumeRenderingarethemainmethodstorealize3Dreconstruction.manymedicalimagedatasetswillbeusedtoresearchthe3Dre-constraction,theMarchingCubesalgorithmwasusedforSurfaceRendering,RayCasting,MaximumIntensityPro-jectionandCompositedVolumeRenderingmethodswereusedforVolumeRendering.Theresultandfeaturesofthetotypesofrenderingtechnologywillbecomparedintheendw.Theresultsshowedthatasa3Dvisualizationtoolkitaswellasimageprocessing,VTKhasapowerfulfunction.=Keywords& VTK,3Dreconstruction,MFC,volumerendering,surfacerendering,medicalimage,raycasting0 引言科学可视化(VisualizationinScientificCompu-ting,ViSC)是计算机图形学和图像处理技术的一个重要研究方向。事实上,将任何抽象的事物、过程用图形图像表示出来都可以称为可视化。作为科学术语,/可视化0一词正式出现于1987年2月美国国家基金会(NationalScienceFoundation,NSF)召开的一个专题研讨会上。:E-mbmelh@lt..cn[1]医学图像可视化是科学计算可视化中的一个重要领域。在医学领域中,CT和MRI产生出大量的二维图像数据。所谓医学图像可视化,就是把由CT、MRI等数字图像成像技术所获得的人体信息在计算机上直观地表现为三维效果,从而提供传统手段无法获得的结构信息,有很高的临床价值。因此,由二维断层图像重建三维医学图像,构建医学可视化系统在医学可视化领域中具有重大的意义及应用价值。(VlKi,tVTK是#24#5生物医学工程学进展62010年第31卷第1期 研究论著数据执行相应数据的处理以及响应用户输入[10]目前医学可视化领域中使用最广泛的可视化开发工具。VTK是在三维函数库OpenGL的基础上利用面向对象技术,设计和实现的可视化开发库。它把可视化开发过程中经常遇到的细节屏蔽起来,并将一些常用的算法封装成类的形式供开发者使用(如[2-5]。可视化网络的最高层是输入模块,用于读取数据或生成数据;接下来就是一系列的处理模块用于处理数据(如提取等值面,计算表面法线等);最后以一个或多个映射器(Mapper)结束管道,映射器的作用是把数据转化成图形或写入文件或流(Stream)中。可视化模型由两类对象组成(如图1所示),分别是处理对象(ProcessObject)和数据对象(DataObject)。处理对象又包括源(Source),过滤器(Fi-lter)和映射器(Mapper)。源位于管道的开始,用于读入或生成数据;源的输出连接过滤器,在VC里可用语句:myFilter-&SetInput(mySource-&GetOu-tput())实现两者的相连;过滤器的输出通过类似的语句与映射器相连,从而终止管道。每个处理对象可以有零个,一个或多个输出,并且输出的数据类型是固定的,可通过有关的类进行变换,在实现处理对象之间的相连时要注意数据类型的匹配,这也是VTK选用C++语言书写的其中一个原因,因为C++是一种强类型语言。。目前最新的版本是VTK5.4.2。由于[6]VTK是开放式的免费软件,而且具有强大的三维图形图像处理功能,良好的体系结构和高度的灵活性、可移植性,目前在美国、西欧等各个高校、研究所已经得到广泛的应用。在美国的某些大学里就有[8]专门的教材用于高校教学。虽然VTK在欧美已经十分流行,但其在国内的发展却不容乐观,这些都应该引起有关部门和高校的重视。国内的浙江大学、清华大学、东南大学、中科院自动化所等在医学图像三维重建及可视化研究方面均做出了大量研究,开发了一些实验系统。但目前国内尚无成熟的商用系统。因此,开展这方面的研究,具有重要理论意义和广阔的应用前景。MFC是Windows下一套完整的C++Applica-tionFrameworks[9,P246][7],与Windows系统的结合最为紧密且使用广泛,另外它更有强大的UI开发能力,可利用它开发出专业级的软件。VTK和MFC结合编程实现医学图像的可视化,能发挥各自的优势与性能,容易开发出功能完善、性能极佳的医学可视化软件。构成VTK的两个对象模型分别是图形模型[3][3]图1 可视化流水线管道示意图Fig.1 VisualizationpipelineVTK管道的执行采用了一种基于每个对象内部修改时间的惰性赋值(Lazyevaluation)机制[2][11],亦即只有数据要求更新时才被执行,这涉及两个重要的方法:Update()和Execute()方法。每个处理对象都会跟踪它的最新修改时间(Lastmod-ificationtime),如果来自某个对象的输出请求更新,或者该对象(或其输入)被修改过,那么这个处理对象才会重新执行。管道的执行通过调用Update()方法,但通常我们都不用手动去调用这个方法,当Actor接收到渲染(Render)的命令时,Update()方法会送到它的映射器,然后自动地送往管道。Update()方法执行的方向与图1所示箭头方向相反。Up-date()会一直被送到源对象(SourceObject),源对和可视化模型。其中图形模型主要的类有以下7个:vtkRenderWindow渲染窗口、vtkRenderer渲染器、vtkLight灯光、vtkCamera照相机、vtkActor演员、vtk-Property属性和vtkMapper映射器。可视化模型利用了数据流(Data-flow)方法,将各个模块连接成一个流动的可视化网络(Visua-lizationnetwork),形成流水线管道(Pipeline),管道是贯穿VTK的一个核心内容,任何一个VTK程序都
[3]5生物医学工程学进展62010年第31卷第1期 研究论著果被修改过,那么它就会调用方法Execute()重新执行,Execute()方法的执行过程与图1箭头方向一致。2 VTK与MFC的集成建立新的VTK项目时,必须配置一些相关参数及环境变量,而且每建一个VTK的项目都必须进行这些设置。因为这些设置都是=Project/setting&里的,新项目没有默认这些设置。具体需要设置的参数如下:(1)修改=Project/setting&-&C/C++-&Category-&Preprocessor-&Additionalincluded-irectories为:,\GUISupport\MFC,,\bin\GUISup-port\MFC等。这些设置是告诉编译器在项目编译链接时要去哪些地方找相关的头文件。(2)修改=Project/setting&-&Link-&Input-&Object/librarymodules值为:vtkMFC.libvtkDI-COMParser.lib等。这些设置是告诉编译器新建项目要用到VTK里的哪些函数库,在项目链接时可能会用到这其中的某些库文件,如果在编程过程中提示还缺什么库文件的话再临时加进去。有一点需要特别指出的是vtkMFC.lib这个库文件,它是实现VTK和MFC混合编程的关键函数库。(3)设置=Project/setting&-&Link-&Input-&Additionallibrarypath值为:,\bin\bin\Debug通过以上三个步骤的设置,就可以实现VTK和集成开发环境的集成。2.2 实现VTK与MFC的混合编程文献里提出了实现VTK与MFC集成两种方法,其中第一种方法是通过设置vtkRenderWindow类中的SetParentId函数为当前视图或对话框句柄,通过如下语句实现:vtkRenderWindow*renWin=vtkRenderWin-dow::New();renWin-&SetParentId(this-&m_hWnd);这种方法只是简单地把VTK自带的渲染窗口覆盖在对话框或视图当中,屏蔽了MFC的鼠标响应和消息传递,不便于后续编程实现更复杂的功能。文献提到的第二种方法是VTK和MFC的深层集成,即通过改写视图类的相关函数从而达到集成的[5][5]#25#笔者在这里尝试实现VTK与MFC集成的另一种方法,沿用MFC的设计机制,把数据处理(由文档类负责)和数据显示(由视图类负责)分开,使用VTK自带的类;vtkMFCWindow。具体步骤如下:(1)在视图类里加入两个私有成员变量,v-tkRenderer*m_pvtkRenderer和vtkMFCWindow*m_pvtkMFCWindow,分别表示渲染器与渲染窗口,并定义函数用于获取这两个指针,因为在文档类里要用到这两个指针,而私有成员在类外禁止访问。(2)改写视图类的虚函数OnInitialUpdate(),在该函数里用New()方法实例化vtkMFCWindow对象,并关联绘制器,此为关键代码。即:this-&m_pvtkMFCWindow=newvtkMFCWin-dow(this);this-&m_pvtkMFCWindow-&GetRenderWin-dow()-&AddRenderer(this-&m_pvtkRenderer);(3)在视图类的OnDraw()函数里调用vtkMF-CWindow里的成员函数:DrawDC()。即:this-&m_pvtkMFCWindow-&DrawDC(pDC)。当然还要做一些有关m_pvtkRenderer和m_pv-tkMFCWindow的初始化及/善后0工作。这里就不一一讲述。(4)在文档类里增加可视化管道中会用到的类,用这些类实例化对象,让这些对象作为文档类的数据成员,管道的执行过程可用成员函数的形式来实现。用VTK里的类vtkMFCWindow与MFC集成,可以很方便地利用VTK里设置的一些默认交互方法,如按下按键/P0用于拾取,按键/T0和按键/J0用于改变交互方式等。类vtkMFCWindow派生自MFC的类CWnd,vtkMFCWindow里定义了公共成员函数:GetRenderWindow()和GetInteractor(),分别返回指向vtkWin32OpenGLRenderWindow和vtkRende-WindowInteractor对象的指针,利用这两个方法就可r以改变绘制窗口和交互方法的一些属性,而且还可以重写这个类的很多用于交互的虚函数,如OnL-ButtonDblClk,OnLButtonDown,OnKeyUp等。3 医学图像三维重建方法及VTK+MFC实现医学图像三维重建目前用到的方法主要是面绘制和体绘制,其中面绘制主要的算法有:Cuberille算[15]法、MarchingCubes算法和DividingCubes算法,移[9]#26#5生物医学工程学进展62010年第31卷第1期 研究论著出该条射线上所有采样点的颜色值和不透明度值后,可以采用由前到后或由后到前的两种不同的方法将每一采样点的颜色及不透明度值进行合成,从而计算出屏幕上该像素点处的颜色值,生成最终图像。VTK里把这个方法封装成类vtkMarchingCubes的形式供用户使用。体绘制用到的算法主要有:光线投[3]射法(RayCasting),抛雪球法(Splatting,orFoo-tPrint)[13],错切-变形法(Shear-Warp)[14],最大强[3,P210]度投影法(MaximumIntensityProjection,MIP)以及三维纹理映射(3DTextureMapping)(基于硬件),另外还有基于硬件的VolumePro绘制[2,P157][3,P218]。VTK目前支持三种体绘制技术:光线投[2,P137]射法、纹理映射和基于硬件的VolumePro。本文将编程实现面绘制中的MC算法,以及体绘制中的光线投射法,其中光线投射法又涉及到几个复合函数,都将一一进行比较。3.1 MC算法和光线投射法基本原理MC算法是三维规则数据场等值面生成的经典算法[16],为了在这一数据场中构造等值面,应先给出所求等值面的值,即所谓的/阈值0,MC算法首先找出该等值面经过的体元位置,每个体元有八个数据点(如图(2)所示),分别位于该体元的八个角点上。如果某体元一个角点的值大于(或等于)阈值,则该角点位于等值面之内(或之上)。如果该角点的值小于阈值,则该角点位于等值面之外。由于这一方法是逐个体元依次处理的,因此被称为移动立方体法(MarchingCubes)。利用该算法可以快速显示人体组织和器官的轮廓,占用计算机系统资源相对较少,交互速度也相对较快。但它不能保留体数据的完整性,只是显示体数据的一个面或只是一个空壳,如图(6)-(c)
所示。图3 光线投射算法模型Fig.3 ThemodelofRayCastingalgorithm由后向前的图像合成方法:设第i个体素的颜色值为Cnow,不透明度值为Anow,进入第1个体素的颜色值为Cin,不透明度值为Ain,经过第1个体素后的颜色值为Cout,不透明度值为Aout,对于由后向前的图像合成方法有:Cout=Cin(1-Anow)+CnowAnow由前向后的图像合成方法,有:CoutAout=CinAin+CnowAnow(1-Ain);Aout=Ain+Anow(1-Ain)在由前向后进行图像合成的过程中,不透明度值A必然逐步增大。当A值趋近于1时,说明该像素点的图像已接近于完全不透明,后面的体元不会再对该像素点的图像有所贡献,因而可以不再计算了。由于由前向后的图像合成方法可以省去无效的图2 移动立方体法中的体元Fig.2 ThevoxelofMarchingCubesalgorithm计算,速度较快,因而得到更为广泛的应用。在将采样点进行合成时,VTK提供了三种方[2][3]法,如图所示(8)-(a)(b)(c)所示,光线投射法可以完整地保留体数据,包括数据体的表面和内部,这对于医学临床应用具有重要的价值。但这种算法需要遍历每个体素,而且当观察方向发生变化时,数据场中的采样点之前的前后关系也必然发生变化,这就需要进行重新采样,所以计算量极为庞,,
光线投射法(RayCasting)是以图像空间为序的[3]直接体绘制算法,它的基本原理(如图3所[17][5][15]示)。从屏幕上的每个像素点出发,沿设定的视点方向,发出一条射线,这条射线穿过三维数据场,沿这条射线选择若干个等距的采样点,由距离某一采样点最近的八个体素的颜色值及不透明度值做
,5生物医学工程学进展62010年第31卷第1期 研究论著方法[18]#27#。6所示。3.2 MC算法和光线投射法VTK实现的基本流程管道是VTK程序里的核心,每一个VTK程序都至少有一条管道。所以在实现MC算法和光线投射法时,首先必须/搭建0管道,如图4所示,是每个VTK程序都应该有的一条管道的基本形式。
图4 VTK里Pipeline的基本流程Fig.4 ThebasicflowofpipelineinVTK注:(a)MC算法重采样间隔为(1,1,1);(b)MC算法重采样间隔为(4,4,4);(c)MC算法效果(只显示一个/空壳0,这三个图的阈值均为200)。其中图(a)(b)为头颅重建效果,大小为512@512@234,总数据量是117M;图(c)为踝部重建效果,大小为512@512@150,总数据量为75.5M。数据来源:https://mr.iradiology.uiowa.edu//VHDicom/图6 VTKMarchingCubes类实现三维医学图像重建Fig.6 UsevtkMarchingCubestorealize3Dreconstruction利用MC算法实现医学图像三维重建的基本流程如图5所示,与图4的流程基本上一样。但如果按该流程编程的话,提取等值面所用的时间将会相当长,在LenovoY430,CPU-T4200,RAM-1,集显上测试,最长的时间能达五六分钟才能显示一幅图像,显然这样的处理速度是不利于交互的。所以应该对读入的数据进行处理,然后再进行等值面提取操作。文献[7]用VTK进行体绘制的基本流程如图7所示。要注意对读入的数据一定要对它的数据类型进行转换(图(7)/10处所示),因为有些VolumeMapper只接受unsignedchar和unsignedshort等类型的数据,连接流水线管道时一定要注意数据类型的匹配。[2]中提到了一种减少数据量的方法:对读入的原始DICOM格式的数据转换为BMP格式的,再将所有的数据写到一个扩展名为/raw0的文件中,从而达到减少数据量的目的。这样确实能够达到减少数据量的目的,但同时也会造成原始数据的破坏,因为DI-COM格式的图像,存储的灰度级能达4096级之多,而BMP存储的图像,其灰度级远远达不到4096,这样会造成图像的
很多细节的丢失。图7 用VTK进行体绘制的基本流程Fig.7 ThebasicflowofVolumeRenderingwithVTK图5 用VTK进行体绘制的基本流程Fig.5 ThebasicflowofVolumeRenderingwithVTK图7/20处,可以设置不同的采样点合成函数,它的作用是对光线投射法中的每一条射线上等距采样点的合成,以生成该射线位置上的像素值,VTK提供三种合成函数,分别是:vtkVolumeRayCastCom-positeFunction,vtkVolumeRayCasMtIPFunction和v-tkVolumeRayCastIsosurfaceFunction,如图8(a)、(b)、(c)所示。其中图8(b)是取阈值为1150进行绘制的,比较这三个图像可知,用vtkVolumeRayCastCom-positeFunction合成函数的效果是最好的,其参数设置也较易,所以该函数也是最常用的。7/30,
笔者的方法是:用vtkDICOMImageReader批量读入DICOM格式的图像后,对其进行重采样(类v-tkImageShrink3D),即图5/10处(如图6(a)、(b))。然后再进行等值面的提取(类vtkMarchingCubes或类vtkContourFilter),设置阈值提取等值面。然后再对提取后的数据进行削减、平滑等操作,即图5/20处,最后再通过Mapper传送到图形硬件,从而实现
对二维医学图像等值面提取生成三维的图像,如图#28#5生物医学工程学进展62010年第31卷第1期 研究论著vtkMarchingCubes,有利于二次开发,大大缩短了软件开发周期。MFC是Window下的应用程序框架,利用它可以构建专业级的UI界面,用VTK和MFC相结合,较易开发出功能强大,性能优越的医学可视化软件。另外,当然,值,用于观察不同的人体组织,通常这也是体数据可视化中最难的一部分,因为你必须了解底层数据的具体意义,以CT图像为例,空气与皮肤的分界值大概为500,而软组织与骨骼的分界值大概为1150。图8(d)是将皮肤设为半透明的效果。图7/40处,可以加入功能强大的Widget组件,用于对任意平面的切割,以观察人体内部的信息,这一点对于医学临床应用具有相当重要的意义,其效果如图8(d)、(e)所示。图7/50处,不能用类vtkVolumeMapper直接实例化对象,因为该类是一个抽象类,根据采用的体绘制方法而选用如下的Mapper:vtkVolumeRayCas-tMapper(光线投射法),vtkVolumeTextureMapper(纹理映射法),vtkVolumeProMapper(基于硬件的Vo-lumePro法)。[3]注:(a)用类vtkVolumeRayCasMtIPFunction绘制的效果;(b)用类vtkVolumeRayCastIsosurfaceFunction绘制的效果;(c)用类vtkVo-lumeRayCastCompositeFunction绘制的效果。图(a)(b)(c)数据大小同图(6)-(c),图(d)(e)数据大小同图(6)-(a)和(b)
。参考文献[1]石教英,蔡文立.科学计算可视化算法与系统[M].北京:科学出版社,153-154,1996[2]WilliamSchroeder,KennethMartin,LisaAvila,etc.TheVTKUsers'Guide,KitwareInc,1998[3]WilliamSchroeder,KennethMartin,BillLorensen.TheVisualizationToolkit-AnObject-orientedTo3DGraph-ics(ThirdEdition),KitwareInc,2002[4]周振环等.基于VTK三维可视化编程[J].深圳职业技术学院学报,):10-14.[5]余伟巍,席平,何飞.利用VTK和MFC的医学模型重建方法研究与实现[J].工程图学学报,-130.图8 用VTK体绘制方法实现医学图像三维重建Fig.8 Realizethe3DreconstructionusethevolumerenderingmethodsinVTK[6]VTKWebsite:http://www.vtk.org[7]祁俐娜,罗述谦.基于VTK的医学图像三维重建[J].):1-5.[8]XenophonPapademetris.AnIntroductiontoProgrammingforMedicalImageAnalysiswithTheVisualizationToolkit,2006,12,YaleUniversity[9]侯俊杰.深入浅出MFC[M].武汉.华中科技大学出版,(第2)(下转第页)5 结论综上所述,可以看出用VTK编程只要遵循VTK里流水线管道的构建规则(如图4、5、7,其基本流程都很类似),较易实现所要实现的功能,而且VTK提#46#5生物医学工程学进展62010年第31卷第1期 临床医学工程3.3 康复锻炼康复锻炼在复杂胫骨平台骨折治疗中亦是一个重要的环节。由于其骨折、软组织损伤均较严重,术后常规用长腿石膏托固定保护。在此期间,宜先行股四头肌等长收缩锻炼,当软组织修复基本完成后(约3~4期),再行膝关节CPM锻炼较为妥当。2~3个月后根据X线判断骨折愈合程度逐步进行负重锻炼。锻炼是否适当将直接影响膝关节功能的恢复情况。总之,强调良好复位、有效稳妥的支撑固定、允许早期功能锻炼,这样才利于关节功能的恢复。参考文献[1]MerchantTC,DietzFR.Longtermfollowupafterfracturesofthetibialandfibularshaft[J].JBoneJointSurg,.[2]刘一、徐莘香、张新等.胫骨平台骨折远期疗效[J].中华骨科杂志,):364.[3]王亦璁.膝关节外科的基础和临床[J].北京:人民卫生出版社,.[4]张贵林,荣国威,吴新宝等.胫骨平台骨折手术复位效果不佳的原因分板[J].中化骨科杂志,):219~221.[5]候筱魁,孙骏.胫骨平台骨折的现代治疗[J].中华创伤骨折杂志,);244~245.[6]罗从风,陈云丰,高洪,等.改良双钢板法治疗复杂胫骨平台骨折[J].中华骨科杂志.):326~329.(收稿日期:)不可取。复杂胫骨平台骨折单用几枚松质骨螺钉固定,不利于早期功能锻炼,而过于复杂的内固定如内外侧同时使用支撑钢板,同时又另加许多钢丝、螺钉固定,需广泛剥离软组织及骨膜,术后常导致软组织坏死、骨钢板外露、感染。用T型或L型支撑钢板或结合松质骨螺钉固定,只要螺钉的方向位置恰恰相反当,一般均可获较为满意的支撑。此类钢板,可随意塑形,与普通钢板相比能横向折弯及绕纵轴扭曲,适合骨面弧度,更加贴附固定于骨折处骨面上,固定可靠,占据软组织空间少,其良好的可塑性不会影响其本身的强度,不影响术后早期功能锻炼。高尔夫钢板的材质虽比T、L型钢板厚实,但在平台的胶后水平上稳定性较T、L型差,塑形亦较差。有限切开、直接或间接复位、生物学固定是目前对胫骨平台骨折的治疗方向[5]。其代表-LISS系统经皮微创固定,由于价格较大,目前国内尚未广泛应用,它的缺点是对后内侧移位骨块的复位和支持不够。传统的双钢板固定须较大范围的软组织剥离,有增加皮肤坏死、感染的风险。本组1例SchatzkerVI型骨折骨双钢板固定,出现胫前内侧皮肤坏死。罗从风[6]等在胫骨上端内后侧加用3.5系统有限接触加压钢板或1/2管型钢板固定,通过对21例SchatzkerIV\V\VI型骨折的临床随访分板,认为能提供持续稳固的固定,能防止骨折再移位及力线防备变,软组织损伤小,关节功能恢复满意。双钢板固定对严重粉碎且难以用单侧钢板或加用螺钉获得坚强固定的胫骨平台骨折亦是较好的选择。(上接第28页)[10]许庆功,李昌华.VTK框架结构与运行机制的探讨[J],洛阳理工学院学报,):67-70.[11]StefanBruckner.Datastructuresinthevisualizationtoo-lkit,theinstituteofcomputergraphicsandalgorithmsvien-nauniversityoftechnology,Austria,SeminarPaper[12]http://www.CadCaeCam.com[13]Westover.Footprintevaluationforvolumerendering[C].In:ProceedingsofSIGGRAPH9'0,[14]P.LacrouteandM.Levoy.Fastvolumerenderingusingashear-warpfactorizationoftheviewingtransformation.InProceedingsofSIGGRAPH9'4.pp.451-458[15]宋卫卫,李冠华,欧宗瑛.医学体数据三维可视化技术,计算机工程与应用,-26[16]唐泽圣.三维数据场可视化,北京.清华大学出版社:89-90,1999[17]石玉.直接体绘制技术研究,多媒体技术及其应用,(10):[18]尹学松等.四种体绘制算法的分析与评价,计算机工程与应用,-100(收稿日期:)
上一篇: 下一篇:
All rights reserved Powered by
copyright &copyright 。文档资料库内容来自网络,如有侵犯请联系客服。

我要回帖

更多关于 vtk actor 的文章

 

随机推荐