摘 要 在进行三维医学可视化系统的研究中, 为了对重建物体内部的特定目标进行分析,往往需要进行剪切。讨论了在VC开发环境中,应用三维可视化类库VTK,利用平面对三维物体进行平面剪切的方法,并给出了剪切后的结果。
【关键词】VTK 三维重建 平面剪切
1 引言
可视化工具包(VTK)是一个开放源码的自由软件。它可以进行***象处理、计算机***形学和科学计算可视化,尤其在三维重建如面绘制和体绘制上有强大的功能,因此,它被广泛应用到医学***象领域。
在对医学***象的三维重建进行研究时,需要分析的内部器官往往被外部目标所遮挡,如肝脏、肺叶、肾等重要器官被皮肤遮盖。此外,医学***象中的床板也会影响对重建物体的观察,对处于身体内部的病灶或肿瘤,也需要进行观察和分析。因此,需要对医学***象的三维重建结果进行切割,来满足医学影象处理的要求。
2 VTK中医学***象的三维重建剪切
医学***象的三维重建是采用可视化软件VTK[1,2],利用获得的二维CT或MRI等断层切片,重构有关器官和组织的三维***象。而为了满足临床影象分析的要求,需要对重建物体进行相应的切割。
在VTK中,对重建物体的切割主要有两种[3,4]。一种是利用平面进行剪切,另一种是利用立方体进行切割。本文主要讨论的是第一种方法,即对医学三维重建的面绘制和体绘制进行平面剪切[5]。它的具体实现分为三步:
医学***象的三维重建;利用VTK中的面绘制和体绘制算法,对读入的CT切片进行三维重建;定义剪切平面;利用VTK中的vtkPlane类定义剪切平面,并设置该平面的初始位置和方向;三维重建的平面剪切建立切割函数,对三维重建物体进行平面剪切。
2.1 基于面绘制的平面剪切
vtkClipPolyData *clipper = vtkClipPolyData::New();
clipper->SetInputConnection(skinNormals->GetOutputPort());
clipper->SetClipFunction(plane);
clipper->GenerateClipScalarsOn();
clipper->GenerateClippedOutputOn();
clipper->SetValue(0.3);
vtkPolyDataMapper *clipMapper = vtkPolyDataMapper::New();
cutEdges->SetCutFunction(plane);//设置绝对函数来执行它
cutEdges->GenerateCutScalarsOn();//输出标量值将要被vtkImplicitFunction给修改
cutEdges->SetValue(0, 1.0); //设定特殊轮廓值
vtkStripper *cutStrips = vtkStripper::New();
cutStrips->SetInputConnection(cutEdges->GetOutputPort());
cutStrips->Update();
renWin->Render();
iren->Initialize();
iren->Start();
iren->AddObserver(vtkCommand::UserEvent,cmd);
剪切函数:
void Cut(vtkObject *caller, unsigned long eid, void *clientdata, void *calldata,double val)
{ m_viewer = reinterpret_cast(clientdata );
plane->SetNormal(0, -1, -1);
plane->SetOrigin(150.0, 120.0, 120.0);
cutEdges->SetCutFunction(plane);
clipper->SetValue( val );
cutEdges->SetValue(1, val);
cutStrips->Update();
cutPoly->SetPoints(cutStrips->GetOutput()->GetPoints());
cutPoly->SetPolys(cutStrips->GetOutput()->GetLines());
cutMapper->Update();
renWin->Render(); }
2.2 基于体绘制的平面剪切
vtkImageReader *reader = vtkImageReader::New(); //读入相关数据
reader->SetDataByteOrderToLittleEndian();
reader->SetDataExtent(0, 63, 0, 63, 1, 93);
reader->SetFilePrefix(“../headsq/quarter”); //DICOM***片存储路径
reader->SetDataMask(0x7fff);
reader->SetDataSpacing(3.2, 3.2, 1.5);
reader->SetDataScalarTypeToUnsignedShort();
reader->Update();
vtkColorTransferFunction *colorTransferFunction = vtkColorTransferFunction::New();
colorTransferFunction->ClampingOff();
colorTransferFunction->AddHSVPoint(0.0, 0.01, 1.0, 1.0); //根据透明度设置HSV颜色
colorTransferFunction->AddHSVPoint(1000.0, 0.50, 1.0, 1.0);
colorTransferFunction->AddHSVPoint(2000.0, 0.99, 1.0, 1.0);
colorTransferFunction->SetColorSpaceToHSV();
vtkVolumeProperty *volumeProperty = vtkVolumeProperty::New(); //体绘制属性表现设置
volumeProperty->SetColor(colorTransferFunction);
volumeProperty->SetScalarOpacity(opacityTransferFunction);
vtkVolumeRayCastCompositeFunction *compositeFunction=vtkVolumeRayCastCompositeFunction::New();
vtkVolumeRayCastMapper *volumeMapper=vtkVolumeRayCastMapper::New();
volumeMapper->SetVolumeRayCastFunction(compositeFunction); //采用混合体绘制方法
volumeMapper->SetInput(changeFilter->GetOutput());
vtkVolume *volume = vtkVolume::New(); //对重建物体进行显示
volume->SetMapper(volumeMapper);
volume->SetProperty(volumeProperty);
vtkPlane *plane1 = vtkPlane::New(); //定义剪切平面,并设置其位置和方向
plane1->SetOrigin(0.25, 3.5, -10);
plane1->SetNormal(-1, 0, -1);
vtkPlane *plane2 = vtkPlane::New();
plane2->SetOrigin(150.0, 25.0, 30.0);
plane2->SetNormal(0, -1, -1);
volumeMapper->AddClippingPlane(plane1); //将剪切平面加入重建物体中
volumeMapper->AddClippingPlane(plane2);
vtkRenderer *ren = vtkRenderer::New();
ren->AddViewProp(volume);
ren->SetBackground(0.0, 0.0, 0.0);
renWin->Render();
vtkCamera *aCamera = vtkCamera::New();
aCamera->SetViewUp (0, 0, -1);
aCamera->SetPosition (0, 1, 0);
aCamera->SetFocalPoint (0, 0, 0);
aCamera->ComputeViewPlaneNormal();
ren->SetActiveCamera(aCamera);
ren->ResetCamera ();
aCamera->Dolly(2.5);
iren->Initialize();
iren->Start();
3 面绘制和体绘制的平面剪切结果
***1(a)是对面绘制结果加入一个平面进行剪切,***1(b)和***1(c)分别是被剪切平面分成的两部分,***1(d)是对剪切平面的提取。
***2(a)是剪切前的体绘制效果,***2(b)和***2(c)是进行平面剪切后的两部分体重建,***2(d)是从体重建获取的剪切面。
4 结束语
本文利用VTK工具对三维面绘制和体绘制进行平面剪切,通过对剪切平面的位置和方向的调整,去掉了外部皮肤或床板的遮挡,清楚重现内部器官或病灶。实验证明,这种平面剪切的方法可以应用于虚拟手术等操作,为临床诊断提供更为精确的患者数据。
参考文献
[1]William JS,Kenneth MM, Lisa SA,et al.The VTK User’s Guide,Kitware Inc,1998.
[2]Tao Zhi-jiang,Huang Hua,Zeng Jun, Three-dimensional reconstruction of medical images based on VTK[J].Journal of Clinical Rehabilitative Tissue Engineering Research,2011,7(23):5604-5606.
[3]张娟,熊杰等,基于VTK的三维数据可视化软件开发[J].成都大学学报(自然科学版),2014,33(3):121-125.
[4]Pan Zheng,and Behari Belaton, Craniofacial Data Registration and Visualization Survey,Regional Computer Science Postgraduate Conference,2006.
[5]Marcelo G.P.Three-Dimensional Computed Tomography Landmark Measurement in Craniofacial Surgical Planning:Experimental Validation In Vitro,Oral Maxillofac Surg.2010.
作者简介
苗蕤(1983-),男,河南省许昌市人。工学双学士学位。现为甘肃广播电视大学直属学院工程师。主要研究方向为计算机软件应用技术、数字***像处理、网络安全。
作者单位
甘肃广播电视大学直属学院 甘肃省兰州市 730000
转载请注明出处学文网 » 基于VTK的三维重建实现平面剪切