VTK移动立方体法处理CT图像建立三维模型

tech2025-11-09  7

//移动立方体 #include "vtkDICOMImageReader.h" #include "vtkRenderWindowInteractor.h" #include "vtkRenderer.h" #include "vtkRenderWindow.h" #include "vtkMarchingCubes.h" #include "vtkStripper.h" #include "vtkActor.h" #include "vtkPolyDataMapper.h" #include "vtkProperty.h" #include "vtkCamera.h" #include "vtkBoxWidget.h" #include <iostream> int main() { vtkDICOMImageReader *reader = vtkDICOMImageReader::New(); reader->SetDataByteOrderToLittleEndian();//设置图像数据的字端序转换成小字端序 reader->SetDirectoryName("D://DicomImages/SE0/"); reader->SetDataSpacing(1.0,1.0,0.48);//设置图像像素间距和序列间距 //抽取等值面为骨头的信息 vtkMarchingCubes *boneExtractor = vtkMarchingCubes::New(); boneExtractor->SetInputConnection(reader->GetOutputPort()); boneExtractor->SetValue(0,-400); //设置提取的等值信息 //剔除旧的或废除的数据单元,提高绘制速度 vtkStripper *boneStripper = vtkStripper::New(); //三角带连接 boneStripper->SetInputConnection(boneExtractor->GetOutputPort()); //建立映射 vtkPolyDataMapper *boneMapper = vtkPolyDataMapper::New(); boneMapper->SetInput(boneStripper->GetOutput()); boneMapper->ScalarVisibilityOff(); //建立角色 vtkActor *bone = vtkActor::New(); bone->SetMapper(boneMapper); bone->GetProperty()->SetDiffuseColor(1,1,1);//(.1,.94,.52); bone->GetProperty()->SetSpecular(.3); bone->GetProperty()->SetSpecularPower(40); bone->GetProperty()->SetOpacity(0.2) ; //标准句子 //定义绘制器 vtkRenderer *aRenderer = vtkRenderer::New(); //定义绘制窗口 vtkRenderWindow *renWin = vtkRenderWindow::New(); renWin->AddRenderer(aRenderer); renWin->SetSize(600,600) ; //定义窗口交互器 vtkRenderWindowInteractor *iren = vtkRenderWindowInteractor::New(); iren->SetRenderWindow(renWin); //创建一个camera vtkCamera *aCamera = vtkCamera::New(); aCamera->SetViewUp(0,0,-1); aCamera->SetPosition(0,1,0); aCamera->SetFocalPoint(0,0,0); aRenderer->AddActor(bone); aRenderer->SetActiveCamera(aCamera); aRenderer->ResetCamera(); aCamera->Dolly(1.5); aRenderer->SetBackground(0,0,0); aRenderer->ResetCameraClippingRange(); vtkBoxWidget *boxWidget = vtkBoxWidget::New(); //boxWidget->SetInteractor(iren); //boxWidget->SetPlaceFactor(1.25); // // boxWidget->SetProp3D(bone); // boxWidget->PlaceWidget(); iren->Initialize(); iren->Start(); reader->Delete(); iren->Delete(); return 0; }

效果:

最新回复(0)