C#开发PACS医学影像三维重建(一):使用VTK重建3D影像

在Form1的Load事件中:

复制代码
private void Form1_Load(object sender, EventArgs e)
{
       //创建数据读取对象
vtkDICOMImageReader reader = new vtkDICOMImageReader();

        //小端字节
        reader.SetDataByteOrderToLittleEndian();

        //设置切片数据路径
        reader.SetDirectoryName(@"C:\Users\Administrator\Desktop\vtk\801");

        vtkImageShrink3D shrink = new vtkImageShrink3D();

        shrink.SetShrinkFactors(4, 4, 1);

        shrink.AveragingOn();

        shrink.SetInput((vtkDataObject)(reader.GetOutput()));


        //提取等值面
        vtkMarchingCubes skinExtractor = new vtkMarchingCubes();

        //建立算法对象,从CT切片数据中提取出皮肤
        skinExtractor.SetValue(0, 50); //提取出CT值为50的组织

        skinExtractor.SetInputConnection(shrink.GetOutputPort());

        vtkDecimatePro deci = new vtkDecimatePro(); 
        deci.SetTargetReduction(0.3);

        deci.SetInputConnection(skinExtractor.GetOutputPort());

        vtkSmoothPolyDataFilter smooth = new vtkSmoothPolyDataFilter();  //光滑图像

        smooth.SetInputConnection(deci.GetOutputPort());

        smooth.SetNumberOfIterations(200);

        vtkPolyDataNormals skinNormals = new vtkPolyDataNormals();  //法线

        skinNormals.SetInputConnection(smooth.GetOutputPort());

        skinNormals.SetFeatureAngle(60.0);

        vtkStripper stripper = new vtkStripper();  

        stripper.SetInputConnection(skinNormals.GetOutputPort());

        vtkDataSetMapper skinMapper = new vtkDataSetMapper(); 
        skinMapper.SetInput(stripper.GetOutput());

        skinMapper.ScalarVisibilityOff();


        //设置相机
        vtkCamera aCamera = new vtkCamera();

        aCamera.SetViewUp(0, 0, -1);

        aCamera.SetPosition(0, 1, 0);

        aCamera.SetFocalPoint(0, 0, 0);

        aCamera.ComputeViewPlaneNormal();


        //设置Actor
        vtkActor coneActor = new vtkActor();

        coneActor.SetMapper(skinMapper);

        coneActor.GetProperty().SetAmbient(0.5);

        coneActor.GetProperty().SetDiffuse(1);

        coneActor.GetProperty().SetSpecular(0.6);

        //显示类
        vtkRenderer renderer = renderWindowControl1.RenderWindow.GetRenderers().GetFirstRenderer();

        renderer.AddActor(coneActor);//添加coneActor对象

        //renderer.AddActor2D(new vtkProp());//添加textActor对象

        renderer.SetBackground(0, 0, 0);

        renderer.SetActiveCamera(aCamera);//添加相机

        renderer.ResetCamera();

        vtkRenderWindow renWin = renderWindowControl1.RenderWindow;//设置绘图窗口renWin->AddRenderer(renderer);//装载绘图类

        vtkWin32RenderWindowInteractor iren = new vtkWin32RenderWindowInteractor();

        iren.SetRenderWindow(renWin);//装载绘图窗口

    }

复制代码
龙华大道1号http://www.kinghill.cn/LongHuaDaDao1Hao/index.html

你可能感兴趣的:(C#开发PACS医学影像三维重建(一):使用VTK重建3D影像)