[Insight-users] container for iterators of images

Hila Hiler hilahiler at gmail.com
Mon Apr 23 10:40:39 EDT 2012


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
>>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.itk.org/pipermail/insight-users/attachments/20120423/cdc43418/attachment-0001.htm>


More information about the Insight-users mailing list