[Insight-developers] (no subject)

kent williams norman-k-williams at uiowa.edu
Fri Oct 29 10:54:16 EDT 2010


I should have pointed out, none of the allocating of the image & allocating
its buffers is of any use in this code:

>>   OutputImageType::Pointer tmp_pic = OutputImageType::New();
>>   mask_f->SetVariance(sigmas[i]);
>>   tmp_pic->SetRegions(input->GetLargestPossibleRegion());
>>   tmp_pic->Allocate();
>>   tmp_pic= mask_f->GetOutput();

All that is needed is

OutputImageType::Pointer tmp_pic = mask_f->GetOutput();

Otherwise you're instantiating an image, and allocating its buffer just to
throw it awy.

On 10/29/10 9:13 AM, "kent williams" <norman-k-williams at uiowa.edu> wrote:

> First of all:
> 
> OutputImageType::Pointer tmp_pic = OutputimageType::New();
> 
> All you need is 
> 
> OutputImageType::Pointer tmp_pic;
> 
> The image you allocated with OutputImageType::New() is destroyed without
> being used for anything when you do this:
> tmp_pic->SetRegions(input->GetLargestPossibleRegion());
> tmp_pic->Allocate();
> tmp_pic->GetOutput();
> 
> Second: 
>> vec contains 2 times the same pics, which seems logical since a ImagetoImage
>> Filter has only one pic as output, so the same memory is also used when i ==
>> 1;
> I don't think this is the case; each time through the loop you're allocating
> a new instance of the MaskFilter, so the 2 elements in the vector are the
> output images allocated in different instances of the filter.
> 
> I think you need to read up on SmartPointers; there is a fundamental
> difference between:
> 
> X *x = new X;
> and
> X::Pointer x = X::New();
> 
> In the first case x is a C++ pointer to memory allocated by new; if x goes
> out of scope without a call to
> 
> delete x;
> 
> then the allocated memory is leaked.
> 
> SmartPointers are a C++ template class; when you construct a smartPointer,
> it initially points to no object and x.IsNull() is true.  When you assign a
> pointer to X to the SmartPointer, it increments a reference count in the
> instance.  When a SmartPointer goes out of scope, it's destructor is called;
> this decrements the object's reference count, and if the reference count
> goes to zero, the memory is freed.
> 
> Every time through your loop, you allocate a new filter. When the new filter
> object is assigned to mask_f, the SmartPointer will delete the filter
> instance to which it previously pointed.
> 
> 
> On 10/29/10 4:44 AM, "Martin Waitzbauer" <mazzok at gmx.at> wrote:
> 
>> Hello,
>> 
>> Im looking for a way to save images in a std::vector for later use
>> 
>> so what i did was this
>> 
>> double sigmas[] = {64,128};
>> 
>>   for(int i =0; i <2;i++){
>> 
>>   MaskFilterType::Pointer mask_f = MaskFilterType::New();
>>   mask_f->SetInput(input);
>>  mask_f->setHeight(input->GetLargestPossibleRegion().GetSize()[1]);
>> mask_f->setWidth(input->GetLargestPossibleRegion().GetSize()[0]);
>>   OutputImageType::Pointer tmp_pic = OutputImageType::New();
>>   mask_f->SetVariance(sigmas[i]);
>>   tmp_pic->SetRegions(input->GetLargestPossibleRegion());
>>   tmp_pic->Allocate();
>>   tmp_pic= mask_f->GetOutput();
>>   vec.push_back(tmp_pic);
>>   
>>   }
>> 
>> vec contains 2 times the same pics, which seems logical since a ImagetoImage
>> Filter has only one pic as output, so the same memory is also used when i ==
>> 1;
>> 
>> I tried to set the tmp_pic.Delete(), but this one will give me an error
>> How could i create a structure like the above, a filter that creates a new
>> Picture(in the sense of new memory allocation), so that vec will contain 2
>> different images, depedning on the Filter option
>> mask_f->SetVariance(sigmas[i]);
>> 
>> Thanks
>> 
>> M
> 
> _______________________________________________
> Powered by www.kitware.com
> 
> Visit other Kitware open-source projects at
> http://www.kitware.com/opensource/opensource.html
> 
> Kitware offers ITK Training Courses, for more information visit:
> http://kitware.com/products/protraining.html
> 
> Please keep messages on-topic and check the ITK FAQ at:
> http://www.itk.org/Wiki/ITK_FAQ
> 
> Follow this link to subscribe/unsubscribe:
> http://www.itk.org/mailman/listinfo/insight-developers



More information about the Insight-developers mailing list