[Insight-users] VTK - ITK - VTK Pipeline problems

Karthik Krishnan Karthik.Krishnan at kitware.com
Mon Oct 31 16:20:00 EST 2005


Jesse C Cronce wrote:

>Sorry, what I mean is ImageType::Pointer x[20];
>On Mon, 2005-10-31 at 14:31 -0500, Jesse C Cronce wrote:
>  
>
>>Is it possible to have ImageType *x[20];
>>
>>So that you can disconnect a particular image, make a few parameter
>>changes to the filter, call it's upadate method again, and disconnect
>>the next image w/out overwriting the memory of the initial image ?
>>    
>>
ImageType::Pointer p = filter->GetOutput();
p->DisconnectPipeline();

// filter modified somehow

filter->Update();
ImageType::Pointer p2 = filter->GetOutput();
p2->DisconnectPipeline();

should be possible.

>>Thanks,
>>JCC
>>
>>On Mon, 2005-10-31 at 13:53 -0500, Karthik Krishnan wrote:
>>    
>>
>>>Jesse C Cronce wrote:
>>>
>>>      
>>>
>>>>If you do a DisconnectPipeline, that will also disconnect memory
>>>>management of the image from the ITK libraries as well, right ? 
>>>>
>>>>        
>>>>
>>>Not if you use smart pointers. (Memory management should be taken care 
>>>of) For instance, this is ok if you had
>>>
>>>filter->Update();
>>>ImageType::Pointer x = filter->GetOutput();
>>>x->DisconnectPipeline();
>>>
>>>this is not ok.
>>>
>>>filter->Update();
>>>ImageType* x = filter->GetOutput();
>>>x->DisconnectPipeline();
>>>
>>>The reference count is needed to prevent x from getting destroyed.
>>>
>>>      
>>>
>>>>(meaning
>>>>that the memory will have to be deleted/freed when no longer in use)
>>>>Also, if you call a GetOutput() on the filter that has been disconnected
>>>>        
>>>>
>>>>from the pipeline, it looks like the result should be a NULL pointer
>>>      
>>>
>>>>(from the code itkDataObject.cxx - 
>>>>
>>>>   m_Source->SetNthOutput(m_SourceOutputIndex, 0);
>>>>
>>>>) is this also correct ?
>>>>
>>>> 
>>>>
>>>>        
>>>>
>>>yes
>>>
>>>      
>>>
>>>>Thanks!
>>>>JCC
>>>>
>>>>On Mon, 2005-10-31 at 10:53 -0500, Karthik Krishnan wrote:
>>>> 
>>>>
>>>>        
>>>>
>>>>>Did you try to disconnect the objects from teh pipeline ?
>>>>>
>>>>>In ITK:
>>>>>
>>>>>filter->Update();
>>>>>itkImage = filter->GetOutput();
>>>>>itkImage->DisconnectPipeline();
>>>>>
>>>>>In VTK:
>>>>>
>>>>>use UnRegisterAllOutputs() to disconnect the pipeline
>>>>>or use ShallowCopy
>>>>>
>>>>>
>>>>>
>>>>>Istvan Matis wrote:
>>>>>
>>>>>   
>>>>>
>>>>>          
>>>>>
>>>>>>Hello ITK users,
>>>>>>
>>>>>>I am using a complex pipeline to convert vtkImageData to itk Image, 
>>>>>>apply some filters on it (each time a different filter) like 
>>>>>>smoohting, segmentation, then convert back to VTK in order to 
>>>>>>visualize it.
>>>>>>My problem is that I receive various errors, "unhandled exceptions" 
>>>>>>sometimes in the itk sources sometimes in system dlls, usually when I 
>>>>>>want to apply the itk filters for the 2nd time.
>>>>>>
>>>>>>I am using the same pipeline several times on several (different) 
>>>>>>images read into VTK.
>>>>>>As I understood, if one element (object) in the VTK->ITK->VTK pipeline 
>>>>>>is destroyed the whole pipeline will crash. In order to prevent this I 
>>>>>>use vtkImageCast to "Clone" the final vtk output in order to separate 
>>>>>>the output vtkImageData from the whole pipeline.
>>>>>>
>>>>>>Here is the sketch of the pipeline:
>>>>>>
>>>>>>vtkImageData Input ->
>>>>>>-> vtkImageCast ->
>>>>>>-> vtkImageData Input 2 ->
>>>>>>-> itk::VTKImageToImageFilter ->
>>>>>>-> itk::Image ->
>>>>>>-> " different itk filter each time: ex: 
>>>>>>itk::ConnectedThresholdImageFilter or itk::CurvatureFlowImageFilter " ->
>>>>>>-> itk::Image Output ->
>>>>>>-> itk::ImageToVTKImageFilter ->
>>>>>>-> vtkImageData Output ->
>>>>>>-> vtkImageCast ->
>>>>>>-> vtkImageData Output 2
>>>>>>
>>>>>>I use ->Update() at every step!
>>>>>>
>>>>>>By the way I am using itk 2-0-0, vtk 4-4, VC++6 with SP6, WinXP Pro.
>>>>>>
>>>>>>Is a solution to recreate (Delete() and New()) all the itk and vtk 
>>>>>>filters in the pipeline each time they need to be used? I observed 
>>>>>>that if I destroy even one of these filters the whole thing crashes, 
>>>>>>and not immediately, but sooner or later, somewhere when vtk needs the 
>>>>>>data.
>>>>>>
>>>>>>My question is:
>>>>>>How can I separate the resulting vtkImage from the whole vtk-itk-vtk 
>>>>>>pipeline once it was processed?
>>>>>>Or more generally:
>>>>>>How can I reuse the whole pipeline on different images with different 
>>>>>>sizes and attributes?
>>>>>>
>>>>>>Any hints will be gratefully apreciated.
>>>>>>
>>>>>>Sincerelly,
>>>>>>Istvan
>>>>>>
>>>>>>
>>>>>>
>>>>>>------------------------------------------------------------------------
>>>>>>
>>>>>>_______________________________________________
>>>>>>Insight-users mailing list
>>>>>>Insight-users at itk.org
>>>>>>http://www.itk.org/mailman/listinfo/insight-users
>>>>>>
>>>>>>
>>>>>>     
>>>>>>
>>>>>>            
>>>>>>
>>>>>_______________________________________________
>>>>>Insight-users mailing list
>>>>>Insight-users at itk.org
>>>>>http://www.itk.org/mailman/listinfo/insight-users
>>>>>   
>>>>>
>>>>>          
>>>>>
>>>> 
>>>>
>>>>        
>>>>
>>_______________________________________________
>>Insight-users mailing list
>>Insight-users at itk.org
>>http://www.itk.org/mailman/listinfo/insight-users
>>    
>>
>
>
>  
>


More information about the Insight-users mailing list