<html>
  <head>
    <meta content="text/html; charset=ISO-8859-1"
      http-equiv="Content-Type">
  </head>
  <body text="#000000" bgcolor="#FFFFFF">
    <div class="moz-cite-prefix">Hi Brad, hi Matt,<br>
      <br>
      thanks! That is a very good solution. I did not realize that an
      operator= does the job and I assumed
      it=ImageRegionIterator(myfeatureImage2, region) will not work.
      Sorry.<br>
      <br>
      So, this is the solution for my problem. Thanks to all for your
      help.<br>
      <br>
      To come back to my initial post about the
      DefaultVectorPixelAccessor. I think, the documentation of this
      class should be improved to avoid confusion about the parameters
      of the Get() and Set() method. As far as I see, the correct way to
      access an vector at a pixel offset is <span class="ltSentence"
        id="_ltid_0_0">not intuitive</span>:<br>
      accessor.Get(*(pBuffer+offset), offset);<br>
      <br>
      Best regards,<br>
      Jan<br>
      <br>
      <br>
      <br>
      On 03/11/2014 02:18 PM, Bradley Lowekamp wrote:<br>
    </div>
    <blockquote
      cite="mid:1CE7E1CD-55FD-4BDD-B405-78500B71F7BF@mail.nih.gov"
      type="cite">
      <meta http-equiv="Content-Type" content="text/html;
        charset=ISO-8859-1">
      OK,
      <div><br>
      </div>
      <div>Then another approach is to take advantage that the iterators
        are default constructible. Something like this:</div>
      <div><br>
      </div>
      <div>ImageRegionIterator it2;</div>
      <div>if (myfeatureImage2)</div>
      <div>{</div>
      <div><span class="Apple-tab-span" style="white-space:pre"> </span>it
        = ImageRegionIterator(myfeatureImage2, region);</div>
      <div>}</div>
      <div><br>
      </div>
      <div>There are a lot of options.</div>
      <div><br>
      </div>
      <div>Hope one works for you,</div>
      <div>Brad</div>
      <div><br>
        <div>
          <div>On Mar 11, 2014, at 9:04 AM, Jan Ehrhardt <<a
              moz-do-not-send="true"
              href="mailto:ehrhardt@imi.uni-luebeck.de">ehrhardt@imi.uni-luebeck.de</a>>
            wrote:</div>
          <br class="Apple-interchange-newline">
          <blockquote type="cite">
            <meta http-equiv="Content-Type" content="text/html;
              charset=ISO-8859-1">
            <div text="#000000" bgcolor="#FFFFFF">
              <div class="moz-cite-prefix">Hi Brad,<br>
                <br>
                yes this is an alternative way, but the code inside the
                loop has approx. 200 lines (is quite complicated stuff)
                and I'm still testing and in your solution, I have to
                maintain the code four times...<br>
                <br>
                Best regards,<br>
                Jan<br>
                <br>
                On 03/11/2014 01:55 PM, Bradley Lowekamp wrote:<br>
              </div>
              <blockquote
                cite="mid:09A25EB0-AD0D-4A5A-98D6-A8797109D4F3@mail.nih.gov"
                type="cite"> Hello,
                <div><br>
                </div>
                <div>You are right that the GetPixel methods are slow,
                  but that's why iterators are recommended.</div>
                <div><br>
                </div>
                <div>Currently you are trying to have you "if(
                  featureImage2 )" in side the per-pixel loop. Not only
                  does this cause you iterator initialization issue it
                  also is slower of have this if statement inside the
                  loop.</div>
                <div><br>
                </div>
                <div>Here is an alternative way to construct your logic:</div>
                <div><br>
                </div>
                <div><a moz-do-not-send="true"
href="https://github.com/InsightSoftwareConsortium/ITK/blob/master/Modules/Filtering/ImageFilterBase/include/itkBinaryFunctorImageFilter.hxx#L224-L297">https://github.com/InsightSoftwareConsortium/ITK/blob/master/Modules/Filtering/ImageFilterBase/include/itkBinaryFunctorImageFilter.hxx#L224-L297</a></div>
                <div><br>
                </div>
                <div>Hope this help,</div>
                <div>Brad</div>
                <div><br>
                  <div>
                    <div>On Mar 11, 2014, at 8:34 AM, Jan Ehrhardt <<a
                        moz-do-not-send="true"
                        href="mailto:ehrhardt@imi.uni-luebeck.de">ehrhardt@imi.uni-luebeck.de</a>>

                      wrote:</div>
                    <br class="Apple-interchange-newline">
                    <blockquote type="cite">
                      <div text="#000000" bgcolor="#FFFFFF">
                        <div class="moz-cite-prefix">Hi Matt,<br>
                          <br>
                          yes, I currently use the ITK iterators, but I
                          have the following problem. <br>
                          <br>
                          Standard code looks like:<br>
                          <br>
                          itk::ImageRegionIterator<ImageType1> it(
                          radius, myImage, region );<br>
                          itk::ImageRegionIterator<ImageType2>
                          featureIt1( radius, featureImage1, region );<br>
                          itk::ImageRegionIterator<ImageType3>
                          featureIt2( radius, featureImage2, region );<br>
                          <br>
                          it.GotoBegin();<br>
                          featureIt1.GotoBegin();<br>
                          featureIt2.GotoBegin();<br>
                          <br>
                          while(!it.IsAtEnd())<br>
                          {<br>
                             // do some complicated processing stuff
                          with or without feature1 and/or feature2<br>
                          <br>
                            ++it;<br>
                            ++featureIt1;<br>
                            ++featureIt2;<br>
                          }<br>
                          <br>
                          I only know at runtime, whether featureImage1
                          and/or featureImage2 are available. If<br>
                          featureImage1 or featureImage2 is NULL, a
                          segmentation fault occurs.<br>
                          <br>
                          Therefore, I have currently implemented:<br>
                          <br>
                          itk::ConstNeighborhoodIterator<ImageType1>
                          it( radius, myImage, region );<br>
                          <br>
                          it.GotoBegin();<br>
                          <br>
                          while(!it.IsAtEnd())<br>
                          {<br>
                             currentIndex=it.GetIndex();<br>
                             if( featureImage1.IsNotNull())<br>
                             {<br>
                                  // use
                          featureImage1->GetPixel(currentIndex) to
                          process feature 1<br>
                              }<br>
                              if( featureImage2.IsNotNull())<br>
                             {<br>
                                  // use
                          featureImage2->GetPixel(currentIndex) to
                          process feature 2<br>
                             }<br>
                             <br>
                             // do some other stuff<br>
                          <br>
                            ++it;<br>
                          }<br>
                          <br>
                          The Image::GetPixel() method is quite
                          time-consuming and therefore I look for a more
                          efficient method<br>
                          to implement this code (without writing four
                          different versions).<br>
                          <br>
                          Any suggestions?<br>
                          <br>
                          Best regards,<br>
                          Jan<br>
                          <br>
                          On 03/11/2014 06:12 AM, Matt McCormick wrote:<br>
                        </div>
                        <blockquote
cite="mid:CALzTN-RujRXRUR6UQh=3QT-bcqD8YAi8eir4bn23LBzqYLyoQA@mail.gmail.com"
                          type="cite">
                          <div dir="ltr">Hi Jan,
                            <div><br>
                            </div>
                            <div>To iterator through an Image or
                              VectorImage, use the Iterators as
                              described in the Software Guide [1]</div>
                            <div><br>
                            </div>
                            <div>HTH,</div>
                            <div>Matt</div>
                            <div><br>
                            </div>
                            <div>[1] <a moz-do-not-send="true"
                                href="http://itk.org/ItkSoftwareGuide.pdf">http://itk.org/ItkSoftwareGuide.pdf</a></div>
                          </div>
                          <div class="gmail_extra"><br>
                            <br>
                            <div class="gmail_quote">On Thu, Mar 6, 2014
                              at 8:23 AM, Jan Ehrhardt <span dir="ltr"><<a
                                  moz-do-not-send="true"
                                  href="mailto:ehrhardt@imi.uni-luebeck.de"
                                  target="_blank">ehrhardt@imi.uni-luebeck.de</a>></span>
                              wrote:<br>
                              <blockquote class="gmail_quote"
                                style="margin:0 0 0 .8ex;border-left:1px
                                #ccc solid;padding-left:1ex">Hi folks,<br>
                                <br>
                                I want to iterate through a vector image
                                without an iterator. My approach was:<br>
                                <br>
                                    MultiChannelImageType::AccessorType
                                accessor =
                                pImage->GetPixelAccessor();<br>
                                   
                                MultiChannelImageType::InternalPixelType*
                                pBuffer = pImage->GetBufferPointer();<br>
                                <br>
                                    for( OffsetValueType i = from; i
                                < to; ++i )<br>
                                    {<br>
                                        vecPixel =
                                accessor.Get(*pBuffer, i);<br>
                                    }<br>
                                <br>
                                but the results are not correct (see
                                bug(?) below). If the bug(?) in
                                DefaultVectorPixelAccessor is corrected
                                ( m_OffsetMultiplier = l ) the behaviour
                                of standard itk iterators change. I
                                assume, I don't understand the
                                parameters of
                                DefaultVectorPixelAccessor::Get()
                                correctly.<br>
                                How can I use the
                                DefaultVectorPixelAccessor correctly?<br>
                                <br>
                                best,<br>
                                jan
                                <div class="HOEnZb">
                                  <div class="h5"><br>
                                    <br>
                                    On 03/06/2014 12:25 PM, Jan Ehrhardt
                                    wrote:<br>
                                    <blockquote class="gmail_quote"
                                      style="margin:0 0 0
                                      .8ex;border-left:1px #ccc
                                      solid;padding-left:1ex"> Hi folks,<br>
                                      <br>
                                      there is a bug in
                                      DefaultVectorPixelAccessor (ITK
                                      4.4.0):<br>
                                      <br>
                                        void
                                      SetVectorLength(VectorLengthType
                                      l)<br>
                                        {<br>
                                          m_VectorLength = l;<br>
                                          m_OffsetMultiplier = ( l - 1
                                      );<br>
                                        }<br>
                                      <br>
                                       
                                      DefaultVectorPixelAccessor(VectorLengthType
                                      l)<br>
                                        {<br>
                                          m_VectorLength = l;<br>
                                          m_OffsetMultiplier = l - 1;<br>
                                        }<br>
                                      <br>
                                      OffsetMultiplier should be
                                      m_OffsetMultiplier = l;<br>
                                      <br>
                                      Best regards,<br>
                                      Jan<br>
                                      <br>
                                    </blockquote>
                                    <br>
_______________________________________________<br>
                                    Community mailing list<br>
                                    <a moz-do-not-send="true"
                                      href="mailto:Community@itk.org"
                                      target="_blank">Community@itk.org</a><br>
                                    <a moz-do-not-send="true"
                                      href="http://public.kitware.com/cgi-bin/mailman/listinfo/community"
                                      target="_blank">http://public.kitware.com/cgi-bin/mailman/listinfo/community</a><br>
                                  </div>
                                </div>
                              </blockquote>
                            </div>
                            <br>
                          </div>
                        </blockquote>
                        <br>
                      </div>
                      _______________________________________________<br>
                      Community mailing list<br>
                      <a moz-do-not-send="true"
                        href="mailto:Community@itk.org">Community@itk.org</a><br>
                      <a moz-do-not-send="true"
                        class="moz-txt-link-freetext"
                        href="http://public.kitware.com/cgi-bin/mailman/listinfo/community">http://public.kitware.com/cgi-bin/mailman/listinfo/community</a><br>
                    </blockquote>
                  </div>
                  <br>
                </div>
              </blockquote>
              <br>
            </div>
          </blockquote>
        </div>
        <br>
      </div>
    </blockquote>
    <br>
  </body>
</html>