[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