[Insight-users] WG: Pipeline problems: How to delete input data after calculation

Lodron, Gerald Gerald.Lodron at joanneum.at
Thu Apr 8 06:12:59 EDT 2010


Hi

Since i have a lot of memory problems i try to release my data of the front pipline elements and do not exactly know how to do that, my example (pseudo code, may not work):

//Typedefs
Typedef Itk::ImageReader<Type> Treader;
Typedef itk::ImageFilter1<Type, Type> TFilter1;
Typedef itk::ImageFilter2<Type, Type> TFilter2;
Typedef itk::ImageWriter<Type> Twriter;

//Create Instances
Treader::Pointer oReader = Treader::New();
TFilter1::Pointer oFilter1 = TFilter1::New();
TFilter2::Pointer oFilter2 = TFilter2::New();
Treader::Pointer oWriter = Treader::New();

//Settings
oReader->SetFileName("InImage.mha");
oWriter->SetFileName("OutImage.mha");

//Pipeline
oFilter1->SetInput(oReader->GetOutput());
oFilter2->SetInput(oFilter1->GetOutput());
oWriter->SetInput(oFilter2->GetOutput());

The programm works but i think here I need the memory of InImage.mha three times:
- First after reader
- Second after Filter1
- Third after Filter2

I want to do the following:
- First load Image on memory
- Calculate result of Filter1, release memory of reader
- Calculate result of Filter2, release memory of filter1

Now i need the memory only one time. It is not allowed to call the delete function of the process objects so how can i tell the smart pointers to relese that stuff, currently i make the following strange thing:

//Typedefs
Typedef Itk::ImageReader<Type> Treader;
Typedef itk::ImageFilter1<Type, Type> TFilter1;
Typedef itk::ImageFilter2<Type, Type> TFilter2;
Typedef itk::ImageWriter<Type> Twriter;

Itk::Image<Type>::Pointer oPointer;

{
        Treader::Pointer oReader = Treader::New();
        oReader->SetFileName("InImage.mha");
        oReader->Update();
        oPointer = oReader->GetOutput();
        oPointer->DisconnectPipeline();
}
{
        TFilter1::Pointer oFilter1 = TFilter1::New();
        oFilter1->SetInput(oPointer);
        oFilter1->Update();
        oPointer = oFilter1->GetOutput();
        oPointer->DisconnectPipeline();
}
{
        TFilter2::Pointer oFilter2 = TFilter2::New();
        oFilter2->SetInput(oPointer);
        oFilter2->Update();
        oPointer = oFilter2->GetOutput();
        oPointer->DisconnectPipeline();
}

{
        Treader::Pointer oWriter = Treader::New();
        oWriter ->SetInput(oPointer);
        oWriter->SetFileName("OutImage.mha");
        oWriter->Update();
}

Better suggestions?



More information about the Insight-users mailing list