[Insight-users] container for iterators of images

robert tamburo robert.tamburo at gmail.com
Mon Apr 23 11:13:44 EDT 2012


Assuming the images have corresponding pixels by the same index, another
approach is to use an iterator to parse the output image, then get the
value of the pixel for each image in a list and compute the output value.
Non-compilable code:

// Iterate over the output image with ImageRegionIteratorWithIndex (e.g.,
output_it)
for(output_it.GoToBegin(); !output_it.IsAtEnd(); ++output_it)
    {
    // Get the index during image iteration
    index = it.GetIndex();
    // Iterate over a list of images
    for(unsigned int i = 0 ; i < imageList.size(); i++)
      {
      output_val += imageList[i]->GetPixel(index);
      }
    // Set pixel in output image to output_val.
   output_image->SetPixel(index);

   // Reset output_val
   output_val = 0;
    }

----> That being said, take a look at itkNaryAddImageFilter. I think that
does what you want.


On Mon, Apr 23, 2012 at 10:40 AM, Hila Hiler <hilahiler at gmail.com> wrote:

> Thank you for your interest.
>
> I'll try to explain it as clear as I can...
> The major goal is to generate an image which any of its pixel is the sum
> of other images corresponding pixels.
> For example: any pixel of the new image should be the sum of the
> corresponding pixels from the other images (im1(pix) = im2(pix)+im3(pix)).
> Note that because I don't know in advance the number of the input images,
> I created a STL container to store the iterators of the images. I chose
> this way in because later I can increment all the iterators in one loop
> (until the end of the container) ...
>
> So, back to my code:
>
> vector of iterators:
> | it_1 | it_2 | ... | it_n |
>
> // iterators for the n input images
> constIteratorType  it_1 (img_1, img_1->GetRequestedRegion());
> constIteratorType  it_2 (img_2, img_2->GetRequestedRegion());
> ...
> constIteratorType  it_n (img_n, img_n->GetRequestedRegion());
>
> //iterator of the output image
> iteratorType          output_it (output_img, output_img->
> GetRequestedRegion());
>
> //container to store the iterators
> std::list<constIteratorType> list;
> std::list<constIteratorType>::iterator it;
>
> // iterator of the list that suppose to initialize all of the iterators
> (it_1, it_2, etc)
>     for(it = list.begin(); it < list.end(); it++)
>     {
>         it->GoToBegin();
>     }
>
> //move in parallel with all of the input images and set in the output
> image the sum of the corresponding images pixel
>     for(output_it.GoToBegin(); !output_it.IsAtEnd(); ++output_it)
>     {
>             output_val = 0;
>         for (it = list.begin(); it < list.end(); it++) //move on each
> image in the list and get it's pixel value
>         {
>             output_val = it->Get() + output_val;  //get values from each
> image and insert in the output image
>             // How do I forward the image's iterator from here ?????
>         }
>         output_it.Set(output_val);
>     }
>
> Hope that now it's clearer ...
>
> Hila
>
>
>
> On Mon, Apr 23, 2012 at 4:51 PM, alex Dowson <alexdowson at hotmail.com>wrote:
>
>>   Hi
>>
>> I think I still did not understand your problem completely .  Why you
>> want to store image in container ?  Can you describe what exactly you
>> trying to do ?
>>
>>
>> Alex
>>
>>
>>  *From:* Hila Hiler <hilahiler at gmail.com>
>> *Sent:* Monday, April 23, 2012 7:15 PM
>> *To:* alex Dowson <alexdowson at hotmail.com>
>> *Cc:* insight-users at itk.org
>> *Subject:* Re: [Insight-users] container for iterators of images
>>
>>  Hi Alex,
>> first of all, many thanks for the response.
>>
>> I'm afraid that you haven't noticed that I did the same as described in
>> your link (it was the easy part) ...
>> Actually my question was about a vector of iterators to itk images.
>> Please, read my attached code. I'll be pleased to understand what have I
>> missed.
>>
>> Regards,
>> Hila
>>
>>
>> On Mon, Apr 23, 2012 at 4:08 PM, alex Dowson <alexdowson at hotmail.com>wrote:
>>
>>>   Hi
>>>
>>> Look at this examples
>>>
>>>
>>> http://www.itk.org/Wiki/ITK/Examples/Iterators/ImageRegionConstIterator
>>> http://www.itk.org/Wiki/ITK/Examples/Iterators/ImageRegionIterator
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>  *From:* Hila Hiler <hilahiler at gmail.com>
>>> *Sent:* Monday, April 23, 2012 5:57 PM
>>> *To:* insight-users at itk.org
>>> *Subject:* [Insight-users] container for iterators of images
>>>
>>>   Hi All,
>>>
>>> I'd like to generate a new image by summarizing some other images in the
>>> same dimensions.
>>> So I generated a new image and a std::list for the images iterators.
>>> (actually, I thought that this dynamic container is the best way to mange
>>> an unknown number of images)
>>>
>>> For now, it isn't working because I don't know how to forward the
>>> image's iterator from that vector. in other words, how do I do the same as:
>>> output_it++ from a vector?
>>>
>>> Here is my code:
>>>
>>>     typedef itk::ImageRegionIterator            <ImageType>
>>> iteratorType;
>>>     typedef itk::ImageRegionConstIterator    <ImageType>
>>> constIteratorType;
>>>
>>>     constIteratorType    first_it    (first_img,
>>> first_img->GetRequestedRegion());
>>>     iteratorType            output_it (output_img, output_img->
>>> GetRequestedRegion());
>>>
>>>     std::list<constIteratorType> list;
>>>     std::list<constIteratorType>::iterator it;
>>>
>>>     list.push_back(first_it);
>>>
>>>     if (second_img.IsNotNull())
>>>     {
>>>         constIteratorType second_it (second_img,
>>> second_img->GetRequestedRegion());
>>>         list.push_back (second_it);
>>>     }
>>>
>>>     //initialize all the iterators at the begin of input images
>>>     for(it = list.begin(); it < list.end(); it++)
>>>     {
>>>         it->GoToBegin();
>>>     }
>>>
>>>     for(output_it.GoToBegin(); !output_it.IsAtEnd(); ++output_it)
>>>     {
>>>         for(it = list.begin(); it < list.end(); it++)//move on the
>>> images and get at each iteration the pixel value and insert to the new image
>>>         {
>>>             output_val = it->Get() + output_val;  //get values from each
>>> image and insert in the output image
>>>             // How do I forward the image's iterator from here ?????
>>>         }
>>>
>>>         output_it.Set(output_val);
>>>
>>>     }
>>>
>>>
>>>
>>> Any thoughts would be very welcome ...
>>> Hila
>>> ------------------------------
>>> _____________________________________
>>> 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://www.kitware.com/products/protraining.php
>>>
>>> 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-users
>>>
>>
>>
>
>
> _____________________________________
> 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://www.kitware.com/products/protraining.php
>
> 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-users
>
>


-- 
robert
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.itk.org/pipermail/insight-users/attachments/20120423/faea95bf/attachment.htm>


More information about the Insight-users mailing list