Сохранить VtkVolume как файл STL (3D-данные)? - PullRequest
0 голосов
/ 06 марта 2020

Сейчас я делаю функцию, используя vtk. Процесс выглядит следующим образом:

  1. Загрузка серии dicom
  2. мы можем видеть только некоторые части, которые дают значение в функции vtk Piecewise.
  3. write stl file

Мне нужна некоторая функция о записи vtkVolume в stl данных. Как мне сохранить данные vtkvolume в файл stl?

МОЙ КОД КАК НИЖЕ: -

vtkDICOMImageReader *reader = vtkDICOMImageReader::New();
reader->SetDirectoryName("Dicom_Series");
reader->Update();

vtkPiecewiseFunction* opacitytransfer = vtkPiecewiseFunction::New();
opacitytransfer->AddPoint(-700, 0.0);
opacitytransfer->AddPoint(-101, 0.0);
opacitytransfer->ClampingOff();

vtkColorTransferFunction* colortranster = vtkColorTransferFunction::New();
colortranster->AddRGBPoint(-700, 0.0, 0.0, 0.0);
colortranster->AddRGBPoint(-101, 54.0 / 255.0, 154.0 / 255.0, 254.0 / 255.0);
colortranster->AddRGBPoint(-100, 237.0 / 255.0, 204.0 / 255.0, 159.0 / 255.0);
colortranster->ClampingOff();

vtkVolumeProperty* volumeproperty = vtkVolumeProperty::New();
volumeproperty->SetColor(colortranster);
volumeproperty->SetScalarOpacity(opacitytransfer);
volumeproperty->ShadeOn();

vtkFixedPointVolumeRayCastMapper* volumeMapper = vtkFixedPointVolumeRayCastMapper::New();
volumeMapper->SetInputConnection(reader->GetOutputPort());

vtkVolume* volume1 = vtkVolume::New();
volume1->SetMapper(volumeMapper);
volume1->SetProperty(volumeproperty);

vtkRenderer* aRenderer = vtkRenderer::New();
aRenderer->AddVolume(volume1);
aRenderer->SetBackground(0, 0, 0);

vtkRenderWindow *renWin = vtkRenderWindow::New();
renWin->AddRenderer(aRenderer);
renWin->SetSize(600, 600);
renWin->Render();

vtkRenderWindowInteractor *iren =   vtkRenderWindowInteractor::New();
iren->SetRenderWindow(renWin);

iren->Initialize();
iren->Start();

1 Ответ

0 голосов
/ 06 марта 2020

Вы не можете записать образ тома в виде файла STL. STL - это поверхностный формат sh, который отличается типом данных от изображения. Вам нужно извлечь изоповерхность из вашего объема. Для этого вы можете использовать фильтр MarchingCubes VTK.

Вот пример: https://lorensen.github.io/VTKExamples/site/Cxx/Modelling/MarchingCubes/

А вот документация для класса vtkMarchingCubes: https://vtk.org/doc/nightly/html/classvtkMarchingCubes.html

...