<html><head><meta http-equiv="Content-Type" content="text/html charset=iso-8859-1"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; ">Hello Joel,<div><br></div><div>It looks like I only updated the documentation in the constant scanline iterator [1]. There is a sample usage there:</div><div><br></div><div><div><br></div><div>it = ImageScanlineConstIterator()</div><div>while ( !it.IsAtEnd() )</div><div>&nbsp; {</div><div>&nbsp; while ( !it.IsAtEndOfLine() )</div><div>&nbsp; &nbsp; {</div><div>&nbsp; &nbsp; *it += 100.0;</div><div>&nbsp; &nbsp; ++it;</div><div>&nbsp; &nbsp; }</div><div>&nbsp; it.NextLine();</div><div>&nbsp; }</div></div><div><br></div><div>As you can see from the same usage above, it uses two loops, unlike the ImageRegionIterator.</div><div><br></div><div>By using these two loops, all branching in side the iterator operations has been removed, this can result it better run-time execution, and enable advanced compiler optimizations such as auto-vectorization in some cases. When combine with only updating the progress on a per-scanline basis, it has been demonstrated a ~2X-3X performance in basic functor based filters.</div><div><br></div><div>If this iterator has the functionality you need I would use it.</div><div><br></div><div>You can see it's usage in the UnaryFunctorImageFilter [2].</div><div><br></div><div>It would be outstanding if you could update the documentation, with the information you expected to see there.</div><div><br></div><div>[1] <a href="http://www.itk.org/Doxygen/html/classitk_1_1ImageScanlineConstIterator.html">http://www.itk.org/Doxygen/html/classitk_1_1ImageScanlineConstIterator.html</a></div><div>[2] <a href="https://github.com/Kitware/ITK/blob/master/Modules/Core/Common/include/itkUnaryFunctorImageFilter.hxx#L174">https://github.com/Kitware/ITK/blob/master/Modules/Core/Common/include/itkUnaryFunctorImageFilter.hxx#L174</a></div><div><br><div><div>On Aug 1, 2013, at 4:59 AM, Joël Schaerer &lt;<a href="mailto:joel.schaerer@gmail.com">joel.schaerer@gmail.com</a>&gt; 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">
    Hi all,<br>
    <br>
    I've just read in the Kitware source about the new
    ImageScanlineIterator which supposedly has better performance than
    the usual region iterators. Excited, I rush to the documentation to
    understand what this is about ... Unfortunately, this is all I get:<br>
    <br>
    """<br><p>A multi-dimensional iterator templated over image type that walks
      a region of pixels, scanline by scanline or in the direction of
      the fastest axis. </p>
    The <a class="el" href="http://www.itk.org/Doxygen/html/classitk_1_1ImageScanlineConstIterator.html" title="A multi-dimensional iterator templated over image type that
      walks a region of pixels, scanline by scanline or in the direction
      of the fastest axis. ">itk::ImageScanlineConstIterator</a> is
    optimized for iteration speed and is the first choice for pixel-wise
    operations on an image<br>
    """<br>
    <br>
    And this is what the documentation of the ImageRegionIterator
    claims:<br>
    <br>
    """<br>
    The <a class="el" href="http://www.itk.org/Doxygen/html/classitk_1_1ImageRegionIterator.html" title="A multi-dimensional iterator templated over image type that
      walks a region of pixels. ">itk::ImageRegionIterator</a> is
    optimized for iteration speed and is the first choice for iterative,
    pixel-wise operations on an image<br>
    """<br>
    <br>
    So which is it? What are the limitations of the new iterator? When
    should you use one or the other? Why is it faster than the normal
    iterators, and why wasn't this change not applicable directly to the
    normal iterators?<br>
    <br>
    After googling for a while, I found a little additional info in the
    commit: <a class="moz-txt-link-freetext" href="https://github.com/Kitware/ITK/commit/ab29cc59095d7448a1dbf1e09f96947036d2b118">https://github.com/Kitware/ITK/commit/ab29cc59095d7448a1dbf1e09f96947036d2b118</a>
    , but it's still too sparse to understand without hunting in the
    source of the library.<br>
    <br>
    If I get good answers, I'm willing to add them to the documentation,
    which should at the very least answer the following questions:<br>
    <br>
    * Why is the new class needed?<br>
    * How does it work, how does it differ from the existing iterators?<br>
    * When should you use it and when should you not use it?<br>
    <br>
    Thanks,<br>
    <br>
    joel<br>
    <br>
  </div>

_____________________________________<br>Powered by <a href="http://www.kitware.com">www.kitware.com</a><br><br>Visit other Kitware open-source projects at<br><a href="http://www.kitware.com/opensource/opensource.html">http://www.kitware.com/opensource/opensource.html</a><br><br>Kitware offers ITK Training Courses, for more information visit:<br>http://www.kitware.com/products/protraining.php<br><br>Please keep messages on-topic and check the ITK FAQ at:<br>http://www.itk.org/Wiki/ITK_FAQ<br><br>Follow this link to subscribe/unsubscribe:<br>http://www.itk.org/mailman/listinfo/insight-users<br></blockquote></div><br></div></body></html>