[vtk-developers] Multiple vtkImageData to vtkDiscreteMarchingCubes
Marek Pecha
marek.pecha at vsb.cz
Fri Nov 6 07:39:42 EST 2015
Hello VTK team,
I try to solve a next problem. I try to visualize a medical mesh by vtkDiscreteMarchingCubes from DICOM files but I combine your the best of best visualization toolkit and OpenCV for preprocessing. Here is my approach:
1. I read medical DICOM files by VTK
2. I convert vtkImageData to cv::Mat
3. .... doing something interest ...
4. I convert cv::Mat to vtkImageData (source code is below)
bool PnLabImportOpenCVMat2VtkImageData(cv::Mat &src, vtkSmartPointer<vtkImageData> dest) {
assert(src.data != NULL);
vtkSmartPointer<vtkImageImport> importer;
importer = vtkSmartPointer<vtkImageImport>::New();
if (dest) {
importer->SetOutput(dest);
}
importer->SetDataSpacing(1, 1, 1);
importer->SetDataOrigin(0, 0, 0);
importer->SetWholeExtent(0, src.cols - 1, 0, src.rows - 1, 0, 0);
importer->SetDataScalarTypeToDouble();
importer->SetNumberOfScalarComponents(1);
importer->SetImportVoidPointer(src.data);
importer->Update();
return (true);
} //[end-function] ImportOpenCVMat2VtkImageData
5. I add vtkImageData to vtkImageCacheFilter
vtkSmartPointer<vtkDiscreteMarchingCubes> discrete_cubes;
vtkSmartPointer<vtkImageData> vtk_img_data;
vtkSmartPointer<vtkImageCacheFilter> vtk_multiple_data;
vtk_multiple_data = vtkSmartPointer<vtkImageCacheFilter>::New();
discrete_cubes = vtkSmartPointer<vtkDiscreteMarchingCubes>::New();
for(int i=0; i < slices.size(); i++) {
vtk_img_data = vtkSmartPointer<vtkImageData>::New();
PnLabImportOpenCVMat2VtkImageData(*slices[i], vtk_img_data);
vtk_multiple_data->AddInputData(vtk_img_data);
}
vtk_multiple_data->Update();
discrete_cubes->SetInputData(vtk_multiple_data->GetOutput());
discrete_cubes->GenerateValues(1, 1, 1);
discrete_cubes->Update();
But after vtk_multiple_data->Update(); I got error message
ERROR: In /Users/mari/ProgramsToBuild/VTK-6.3.0/Common/ExecutionModel/vtkDemandDrivenPipeline.cxx, line 720
vtkCachedStreamingDemandDrivenPipeline (0x7f89d8c02b60): Input port 0 of algorithm vtkImageCacheFilter(0x7f89d8c02400) has 20 connections but is not repeatable.
I don't know what I'm doing wrong. Please can you help me?
Thank you
Mari
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://public.kitware.com/pipermail/vtk-developers/attachments/20151106/f75477c6/attachment.html>
More information about the vtk-developers
mailing list