在C#中使用VTK对DICOM图像进行3D点对点可视化

时间:2017-09-14 13:43:45

标签: c# 3d vtk dicom

我的任务是可视化我可以在DICOM系列中找到的灰度点云。 我找到了这个教程https://pyscience.wordpress.com/2014/09/11/surface-extraction-creating-a-mesh-from-pixel-data-using-python-and-vtk/,它展示了如何通过对它们进行3D可视化来实现骨骼中的骨骼。我可以将它转移到c#并且它可以工作,但我只需要一个3D点云,我可以通过阈值灰度来定义对象。希望你明白我的意思。 所以我尝试了这个:

// read file
string pathDicom = @"...\dicomDirectory";
vtkDICOMImageReader reader = new Kitware.VTK.vtkDICOMImageReader();
reader.SetDirectoryName(pathDicom);
reader.Update();

// convert HU value
vtkImageShiftScale shiftScale = vtkImageShiftScale.New();
shiftScale.SetScale(reader.GetRescaleSlope());
shiftScale.SetShift(reader.GetRescaleOffset());
shiftScale.SetInputConnection(reader.GetOutputPort());
shiftScale.Update();

// Visualize
vtkPolyDataMapper mapper = vtkPolyDataMapper.New();
mapper.SetInputConnection(shiftScale.GetOutputPort());

vtkActor actor = vtkActor.New();
actor.SetMapper(mapper);
actor.GetProperty().SetPointSize(4);

vtkRenderWindow renderWindow = renderWindowControl1.RenderWindow;
vtkRenderer renderer = renderWindow.GetRenderers().GetFirstRenderer();
renderer.SetBackground(0.2, 0.3, 0.4);
renderer.AddActor(actor);

当我开始这个时,我得到同样的错误

vtkStreamingDemandDrivenPipline (09366B85)

和Visual Studio告诉我

System.AccessViolationException

这是一种内存错误。

所以我的问题是我的错误在哪里?在调试过程中,我发现当我为actor设置映射器时错误就开始了。但我现在认为这段代码是在vtk中显示所有内容的常规方式。我认为问题在于我并没有真正从数组中获取点数,但imageData应该包含该系列的所有像素。

希望你能帮助我。

0 个答案:

没有答案