C# 用VTK实现DICOM图像的三维点云可视化#
我的任务是可视化一个可以在DICOM系列中找到的灰度点云。 我找到了这个教程,它展示了如何通过机械化骨骼在3D中可视化骨骼。我可以把它转移到c#上,它就可以工作了,但我只需要一个3D点云,在那里我可以通过设置灰度阈值来定义对象。希望你明白我的意思。 所以我试了一下:C# 用VTK实现DICOM图像的三维点云可视化#,c#,image-processing,3d,vtk,medical-imaging,C#,Image Processing,3d,Vtk,Medical Imaging,我的任务是可视化一个可以在DICOM系列中找到的灰度点云。 我找到了这个教程,它展示了如何通过机械化骨骼在3D中可视化骨骼。我可以把它转移到c#上,它就可以工作了,但我只需要一个3D点云,在那里我可以通过设置灰度阈值来定义对象。希望你明白我的意思。 所以我试了一下: // read file string pathDicom = @"...\dicomDirectory"; vtkDICOMImageReader reader = new Kitware.VTK.vtkDICOMImageRea
// 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)
VisualStudio告诉我
System.AccessViolationException
这是一种记忆错误
所以我的问题是我的错误在哪里?在调试过程中,我发现错误是从我为参与者设置映射器时开始的。但我现在知道,这段代码是用vtk显示所有内容的正常方式。我认为问题在于我没有真正从数组中获取点,但是imageData应该包含序列中的所有像素
希望你能帮助我