实例介绍
基于ITK,VTK以及MFC读取DICOM图像的文献
@ ErtoRwww.crter.org 吕哧琪,等于1K、K和MC的DCOM图像读写及显示 文章是在视类的构造函数及其析构函数中实现它们的 初始化及善后工作的。其次,改写视图类的虚函数 Ocrea(),以下为关键代码 ren Win->AddRenderer(ren); renWin->Setwindowld(m hWnd) iren->SetRenderWindow(ren Win) 最后,在视图类的 OnDraw函数中添加绘制代码 Render() 当然窗口的尺寸也可以在这里进行调整。 Figure 5 Unintegrated display effect 此,可以在MFc应用稈序视图区域中实现与VTK 图5未集成显示效果 渲染对象的父互和鼠标响应操作,并可以利用MFC界面 控件来进行参数控制,本文程序中鼠标按下会弹出一个 对于VTK与MFC的集成已有相关文献介绍,分为快显示图像上象素坐标及象素值的消息框(见图7,8)借以 速集成和深度集成两种集成方式。图6是作者将图5对应说明鼠标响应交互操作的实现,至此完成了TK与MFC 序做了怏速集成后 DICOMA像的显示。集成过程只需的深度集成。读者也可以参考ⅤTK工具包 Examples 设置 vtk RenderWindow类中的 SetParent函数为当前 GUlIn32MFC下的例程,实现更丰富的集成。该 视图或对话框句柄即可,关键代码如下所示 和集环覓下的面显示将结合后续DCOM文件显示 tkRenderwindow 部分给出。 FrenWin=vtkRenderWindow: Newo vtkRenderWindowlnteractor iren=vtkRenderWindowInteractor Newo this->renWin->SetParentld(this->m hWnd); this->iren->SetRenderWindow(this->renIn); Figure 7 Display effect of vik depth integration 图7深度集成环境下VTK显示效果 Figure 6 Display effect of fast integration 图6快速集成显示效果 快速集成屏蔽」MFC的鼠标响应和消息传递,不 便于后续编程实现更复杂的功能。VTK与MFC集成的 请为:0007000 根本目的是实现更实用、更灵活的交互界面,以弥补 VTK自身在该方面的缺憾,那么就要求不仅要将TK 的渲染窗口嵌入于MFC应用程序视图区域,而且还要 Figure 8 Display effect after flipping 图8翻转后VTK显小效果 使其融为一体,即拥有一个统一的具有友好交互能力 的界面。 在此,重点介绍下作者尝试实现VTK与MFC深度 集成的另一种方法,具体步骤如下:首先,在视类中增2D|cOM图像的读写与显示 加可视化管道中会用到的类,用这些类实例化对象,文 章用到的对象有:渲染对象ren)、渲梨窗口( renin)、2.1DCOM图像的读写文章中的数据对象是一维 交互对象(ren)、演员( BrainActor)、映射( Brain Map)等, DICOM图像。读与DCOM文件的功能使用∏TK提供的范 o1994-2011ChinaAcadcmicJournalElcctronicPublishingHousc.Allrightsroscrved.http://www.cnki.nctcn.zglckf.com 2418 P.O. Box 1200, Shenyang 110004 吕烧琪,等干K、VTK和MFC的DCOM图像读写及显示 CRTOR Ww. cRTER org 函功能来实现,在∏K中,DCOM的范函性由GDCM厍写DcOM文件是一件非常精密的操作,因为所要处理的 提供。这个开放的源码厍由INSA_Lyon的 creats团队发是大量重要的有关患者详细而精确的数据,并且涉及到 展的。实验使用: GDCMImagelO类来建立与GDCM库患者的隐私问题。所以在写的过程中,一定要核实出你 的连接,实现读取 DICOM图像的功能。|TK数据处理管的代码所生成的头文件信息不会给患者的治疗和诊断 道中的三种处理对象具休为:Sσurce采用带来风险,要确休沿着数据处珄管道正桷地传递DC○M ik: itklmage SeriesReader类; Filter来用了ik∷文件的细节信息,从而才能保证正确地将原D|COM文件 Curvature FlowImage Filter; Mapper采用了itk:的这些信息写入新的DcOM序列图像文件。以下便是实 itkImageFileWriter类。 现该部分内容的主要代码: 单张二维DCOM图像的读写:本部分实现单张二维 首先定义图像类型,并明确所选象素类型和维度, p|c○M图象以 DICOM格式读入与以DCOM格式写入从而定义序列图像读取类型。 的工作。首先声明象素类型和图像的维数,以它们作为 typedef signed short PixelType 模板参数来实例化读入图像的类型,用该图像类型作为 const unsigned int Dimension=3; 模板参数再实例化读取器 Reader的类型并创建一个 typedef itk: Image< PixelType, Dimension Reader,将读入图像的文件路径和文件名作为参数传给 mage Type; Reader,并为 Reader关联 GDCMImagelO对象,调用 typedef itk: Image SeriesReader< Image Type Update(函数更新读取过程,DcOM图像就已读入内存 ReaderType 中。用 Reader的 Getoutput()方法可以获得图像数据的 接下来声明并实例化实际读写DCOM图像的 指针。月前的焦点是如何再一次将图像在新文件中保存k: GD CMImagelC对象和为所有切片生成文件名并排 成DCOM格式。具体的,先实例化一个 Image File Writer序的tk: GDCMSeries fileNames对象,并创建相应智能 类型,并创建指针 Writer,将写入的图像的文件路径和指针 gdcmIO和 names Generator。 文件名作为参数传给 Writer,并为其关联 ImageloType: Pointer GDCM| magelo对象,这个对象是知道DCOM格式的内 gdcmIo= magelOType:New() 部结构的,最后用 Update()来触发写入程序。文章在读 Names Generator Type: Pointer 写过稈中对图像进行了保留边缘的平滑去噪处珥,以下 names Generator= Names GeneratorType:|New() 为主要代码 names Generator->SetInputDirectory(argv ImageloType: Pointer 生成读入文件的文件名 gdcmImagelo=ImageloType: NeW( const ReaderType: FileNames Container reader->Setlmagelo(gdcmImagelO) filenames=namesGenerator->GetInput FileNames(): reader> SetFileName(argv):∥参数为文件路径 实例化 Reader Type对象并创建智能指针 reader,读 及文件名 取DcOM格式序列图像。 writer->Setlmagelo(gdcmImagelO) reader->Setlmagelo(gdcmlO) rwriter->SetFileName(argv2);∥将平滑后图像以 reader->SetFileNames(filenames ) D|COM格式写入到参数所指定的文件中。 最后用 reader的 Update()触发读取程序,最好放在 try/catch问询块中,在此不再赘述。 CurvatureFlowImageFilterType: Pointer 至此,可以开始写数据了。首先把确定存在的输出 smoother= rvatureFlowlmageFilterType:|New();∥目录传给 outputDirectory指针。 实例化一个平滑滤波器的对象 const char outputDirectory=argv; smoother-> SetNumberoflterations(5):W平滑滤波 然后,实例化 SeriesWritertype对象并创建智能指 器的迭代次数设为5 针 series writer,将 reader的输出写为D|COM格式序列 smoother-> SetTime Step(0.125);∥平滑滤波器的像 时间步长设为0125 series Writer->SetInput(reader->Getoutput() smoother->SetInput(reader->Getoutputo) series Writer->Setlmagelo(gdcmIO) writer->Setlnput(smoother->GetOutputO) 现在可以设置 G DCMSeriesFileNames在 至此完成DCOM单张图像的读写。 outputDirectory下产生新的文件名,然后将最新生成的 序列二维DCOM图像的读写:这部分}要实现以文件文件传递给 seriesWriter 集的方式读取一个DCOM序列图像,并在保持头文件信 namesGenerator->SetoutputDirectoryoutputDire 息不变的情况下保存为另一个DCOM序列图像的工作。 ctory); /S SN 1673-8225 CN 21-1539/R CODEN: ZLKHAH 2419 C1994-2011ChinaAcadcmicJOurnalElcctronicPublishingHousc.Allrightsrcscrved.http://www.cnki.nct @ RterwWw.crtEr. org 吕晓琪,等基于1K、VK和MFC的DCOM图像读写及显示 seriesWriter->SetFileNames(names Generator-> GetOutputFileNames(); 3结论 最后一步也是最关键的一步,用 reader读取 MetaDataDictionary并传递给 seriesWriter。之所以关键 TK是算法设计者的一个有力助手,是医学图像处 是因为 Meta Data Dictionary包含」所有输入的DcoM理工作者的案例研究算法仓厍,遺憾的是不提供Ul 文件的头文件。 VTK软件开发包强大的图形处理和可视化功能,却缺乏 seriesWriter> SetMetaData Dictionary Array( reade实用、灵活的交互界面,而MFC具有强大的U开发能力。 r->GetMetaData DictionaryArray () 结合三者的特点,作者通过对DCOM医学图像的读取与 末了调用 seriesWriter的 Update)触发写程序,放在显小,将TK、VTK和MFC有机的结合起来,扬长避短, try/catch问洵块中,在此不再赘述。 为三者集成环境下的软件开发做了一个初步的尝试,而 22DCOM图像的显示本部分主要介绍在前述方法对于在此基础之上一者更强大功能的实现(诸如医学图 实现的∨TK、ITK和MFC集成环境卜DCoM图像的显示像的分割与准、三维可视化、虚拟手术导航等)有待 方法。在此,将利用丨TK读取的DC○M文件用VTK显示深入探讨与研究。 在MFC单文档视图区,因为旨在说明方法所以未给出复 杂的交互界面。 4参考文献 VTK薮据处理管道中采用了vkD|cOM|mage Reader:类、 teNderer类、 vtkRenderwindow类、 [1 Kitware Inc. NLM Insight Segmentation and registration Toolkit EB/OL」2005.http:/www.itκOrg tkRenderwindowInteractor类、 traCtor2D类、 [21 Ackerman MJ. the visible human project. Proceedings of the lEEE,1998;863):501-504. v+ < Mapper类,并实例化各个类的对象并创建相21/mD(Q小用m时 应智能指针。图7为显示效果,相应关键代码如下 计算机技术发,200816(4=51 5 NEMA. The DICOM standard. Technical report, NEMA, Brain Map->SetInput(vtkreader->Getoutput() http://medial.nemaorg,2004 [61http:/www.itk.org/courseWare/training/gettIngstartedl-webpage BrainActor->SetMapper (BrainMap); ren->AddActor(BrainActor) http:ww.kitwvare.comiproducts/books/vtkquide.html Benoit Regrain EricBoix, Mathieu and Jean Pierre roux. the 「TK所读取的图像一经VTK显示后图像发牛了翻 GDCM Library. CNRS, INSERM, INSALyon, UCBLyon http://www-creatis.insa-lyon.fr/publIc/gdcm 转,并且是上下翻转而左右并不发生翻转,原因是ITK 的坐标系统和VTK的坐标系统Y轴是相反的,所以为了 来自本文课题的更多信息 能正确显示图像还需要将Y轴进行翻转,可见这种翻转 墓金资助:国家自然科学基金资助项目(60761002) 可以发生在两种情形,一种是在K读入图像的时候翻 作耆贡:笫一作者进行实验设计及评估,实验实施 转即改变文件的读取方式,该种方式可参考∏TK的 为笫二作者,资料收集为笫三作者,第二作者成文,第 FliplmageFilter类,该类可以实现翻转任何坐标轴中的 作者审校并对文章负责 图像,对于本文屮情形可以使用一个[0,们翻转排列, 列益冲突:课题未涉及任何厂家及相关雇主或其灺经 表示X轴保持不变时对Y轴进行翻转;另一种是在K图 济组织直接或间接的经济或利益的赞助 像薮据凵经转换为ⅥTK图像数据后将新的TK图像数 本文创新性:于201101以文章关键词为检索关键词 据Y轴鄱转,这也正是本文实现的图像翻转方法。相应 在CNK丨欻捃库、维普中文科技期刊数据库、万方学位论 关键代码: 文全文数据库, ELSEVIER数据库等多个数据库中检索未 flipY->SetFilteredAxis(1) 见具有相同创新点文章 flipY->SetInputConnection(vtkreader->Getoutput 方法创新:为医学图像读写及显示后一系列的玉学E ort() 像处理工作搭建了灵活实用的实验平台,进而得到相关基 BrainMap->SetInput(flipY->GetOutput(): 金资助。 以上便是集成环境下的D|COM图像显小。 o1994-2011ChinaAcadcmicJournalElcctronicPublishingHousc.Allrightsroscrved.http://www.cnki.nctCn.zg/ckf.com 2420 P.O. Box 1200, Shenyang 110004 【实例截图】
【核心代码】
标签:
小贴士
感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。
- 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
- 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
- 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
- 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。
关于好例子网
本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明
网友评论
我要评论