[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