Hello Marco,<br><br>As i don&#39;t know what type of output image your code is generating right now (you may want to upload an simple 2d-example on a public site so other users can see it and try to figure what&#39;s happening) I will guess that maybe the problem is that you are working with unsigned char images (0-255 possible values) but you are adding 100 to some pixels...<br>
<br>Maybe some values are causing overflow of the maximum unsigned char value (say for instance, your input image has intensity = 158 and you are adding 100 for a total of 258, a value that cannot be stored in a unsigned char... I don&#39;t know how the compiler or ITK will handle this, but I suppose it may be a source of problems.<br>
<br>You can try to use unsigned short or unsigned int as PixelType and see what happens<br><br>Regards <br><br><div class="gmail_quote">On Mon, May 17, 2010 at 4:29 PM, Marco Gheza <span dir="ltr">&lt;<a href="mailto:marcogheza4mailinglists@gmail.com">marcogheza4mailinglists@gmail.com</a>&gt;</span> wrote:<br>
<blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">Hi Sergio,<div>i tried your solution but the result is the same. it is more fast but i obtain the same result.</div>
<div><br></div><div><div>  // Verify the number of parameters on the command line.</div><div>  if ( argc &lt; 7 )</div>
<div>    {</div><div>      std::cerr &lt;&lt; &quot;Missing parameters. &quot; &lt;&lt; std::endl;</div><div>      std::cerr &lt;&lt; &quot;Usage: &quot; &lt;&lt; std::endl;</div><div>      std::cerr &lt;&lt; argv[0]</div>

<div>                &lt;&lt; &quot; inputImageFile outputImageFile startX startY startZ sizeX sizeY sizeZ&quot;</div><div>                &lt;&lt; std::endl;</div><div>      return -1;</div><div>    }</div><div><br></div>

<div>  const unsigned int Dimension = 3;</div><div>  </div><div>  typedef unsigned char                      PixelType;</div><div>  typedef itk::Image&lt; PixelType, Dimension &gt; ImageType;</div><div>  </div><div>  typedef itk::ImageRegionConstIterator&lt; ImageType &gt; ConstIteratorType;</div>

<div>  typedef itk::ImageRegionIterator&lt; ImageType&gt;       IteratorType;</div><div>  </div><div>  typedef itk::ImageFileReader&lt; ImageType &gt; ReaderType;</div><div>  typedef itk::ImageFileWriter&lt; ImageType &gt; WriterType;</div>

<div><br></div><div>  ImageType::RegionType inputRegion;</div><div><br></div><div>  ImageType::RegionType::IndexType inputStart;</div><div>  ImageType::RegionType::SizeType  size;</div><div><br></div><div>  inputStart[0] = ::atoi( argv[3] );</div>

<div>  inputStart[1] = ::atoi( argv[4] );</div><div>  inputStart[2] = ::atoi( argv[5] );</div><div><br></div><div>  size[0]  = ::atoi( argv[6] );</div><div>  size[1]  = ::atoi( argv[7] );</div><div>  size[2]  = ::atoi( argv[8] );</div>

<div><br></div><div>  inputRegion.SetSize( size );</div><div>  inputRegion.SetIndex( inputStart );</div><div> </div><div>  ImageType::RegionType outputRegion;</div><div><br></div><div>  ImageType::RegionType::IndexType outputStart;</div>

<div><br></div><div>  outputStart[0] = 0;</div><div>  outputStart[1] = 0;</div><div>  outputStart[2] = 0;</div><div><br></div><div>  outputRegion.SetSize( size );</div><div>  outputRegion.SetIndex( outputStart );</div><div>

 </div><div>  ReaderType::Pointer reader = ReaderType::New();</div><div>  reader-&gt;SetFileName( argv[1] );</div><div>  try</div><div>    {</div><div>    reader-&gt;Update();</div><div>    }</div><div>  catch ( itk::ExceptionObject &amp;err)</div>

<div>    {</div><div>    std::cerr &lt;&lt; &quot;ExceptionObject caught !&quot; &lt;&lt; std::endl; </div><div>    std::cerr &lt;&lt; err &lt;&lt; std::endl; </div><div>    return -1;</div><div>    }</div><div><br></div>

<div>    // Check that the region is contained within the input image.</div><div>  if ( ! reader-&gt;GetOutput()-&gt;GetRequestedRegion().IsInside( inputRegion ) )</div><div>    {</div><div>    std::cerr &lt;&lt; &quot;Error&quot; &lt;&lt; std::endl;</div>

<div>    std::cerr &lt;&lt; &quot;The region &quot; &lt;&lt; inputRegion &lt;&lt; &quot;is not contained within the input image region &quot;</div><div>              &lt;&lt; reader-&gt;GetOutput()-&gt;GetRequestedRegion() &lt;&lt; std::endl;</div>

<div>    return -1;</div><div>    }</div><div><br></div><div>  ImageType::Pointer outputImage = ImageType::New();</div><div>  outputImage-&gt;SetRegions( outputRegion );</div><div>  const ImageType::SpacingType&amp; spacing = reader-&gt;GetOutput()-&gt;GetSpacing();</div>

<div>  const ImageType::PointType&amp; inputOrigin = reader-&gt;GetOutput()-&gt;GetOrigin();</div><div>  double   outputOrigin[ Dimension ];</div><div><br></div><div>  for(unsigned int i=0; i&lt; Dimension; i++)</div><div>

    {</div><div>    outputOrigin[i] = inputOrigin[i] + spacing[i] * inputStart[i];</div><div>    }</div><div><br></div><div>  outputImage-&gt;SetSpacing( spacing );</div><div>  outputImage-&gt;SetOrigin(  outputOrigin );</div>

<div>  outputImage-&gt;Allocate();</div><div>  </div><div>  ConstIteratorType inputIt(   reader-&gt;GetOutput(), inputRegion  );</div><div>  IteratorType      outputIt(  outputImage,         outputRegion );</div><div><br>

</div><div>  inputIt.GoToBegin();</div><div>  outputIt.GoToBegin();</div><div><br></div><div>  while( !inputIt.IsAtEnd() )</div><div>    {</div><div><span style="white-space: pre;">        </span>if(inputIt.Get()!=0)</div>
<div><span style="white-space: pre;">        </span>{</div><div><span style="white-space: pre;">                </span>outputIt.Set(  inputIt.Get() + 100);</div><div><span style="white-space: pre;">        </span>}</div>
<div><span style="white-space: pre;">        </span>else</div><div><span style="white-space: pre;">                </span>outputIt.Set(  inputIt.Get()  );</div><div><span style="white-space: pre;">        </span>++inputIt;</div>
<div>    ++outputIt;</div><div>    }</div><div>   </div><div>  WriterType::Pointer writer = WriterType::New();</div><div>  writer-&gt;SetFileName( argv[2] );</div><div>  writer-&gt;SetInput( outputImage );</div><div><br>
</div>
<div>  try</div><div>    {</div><div>    writer-&gt;Update();</div><div>    }</div><div>  catch ( itk::ExceptionObject &amp;err)</div><div>    {</div><div>    std::cerr &lt;&lt; &quot;ExceptionObject caught !&quot; &lt;&lt; std::endl; </div>

<div>    std::cerr &lt;&lt; err &lt;&lt; std::endl; </div><div>    return -1;   </div><div>    }</div><div><br></div><div>  return 0;</div><div><br></div><div>I don&#39;t really know which is the problem.</div><div>Thanks, bye</div>

<div><br></div><div><br></div><div><br></div><br><div class="gmail_quote">2010/5/17 Sergio Vera <span dir="ltr">&lt;<a href="mailto:sergio.vera@alma3d.com" target="_blank">sergio.vera@alma3d.com</a>&gt;</span><div><div></div>
<div class="h5"><br><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">
Hi Marco,<br>The correct way of traversing elements of a image in ITK is through iterators:<br><br>typedef itk::ImageRegionIterator&lt;TITKImgType&gt; IteratorType;<br>IteratorType it(image,image-&gt;GetRequestedRegion());<br>


<br>for (it.GoToBegin(); !it.IsAtEnd(); ++it) {<br>  it.SetPixel(it.GetPixel()+100);<br>}<br><br>This is an example and I don&#39;t know if it will compile or not, but you get the idea on how to use an iterator to traverse all image pixels. Not only the code is much simpler but also faster.<br>


<br>For more info you can look at the itkSoftwareGuide, that has a part dealing with iterators<br><br>Regards<br><br><div class="gmail_quote"><div><div></div><div>On Mon, May 17, 2010 at 4:00 PM, Marco Gheza <span dir="ltr">&lt;<a href="mailto:marcogheza4mailinglists@gmail.com" target="_blank">marcogheza4mailinglists@gmail.com</a>&gt;</span> wrote:<br>


</div></div><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;"><div><div></div><div>Hi,<div>i&#39;m trying to access every single voxel of a 3d image and change some values. In particular, i want to change that values that are not black; every value has to be increased by a value of 100 for example. If a voxel has value of 10, i want to give it value of 110.</div>



<div><br></div><div>Here is my code:</div><div><br></div><div>imageCT-&gt;DisconnectPipeline();</div><div><div>for(i=0;i&lt;512;i++)</div><div>   {</div><div><span style="white-space: pre;">        </span>for(j=0;j&lt;512;j++)</div>



<div><span style="white-space: pre;">        </span>{</div><div><span style="white-space: pre;">                </span>for(k=0;k&lt;311;k++)</div><div><span style="white-space: pre;">                </span>{</div>
<div><span style="white-space: pre;">                        </span>pixelIndex[0] = i;   // x position</div><div><span style="white-space: pre;">                        </span>pixelIndex[1] = j;   // y position</div><div>
<span style="white-space: pre;">                        </span>pixelIndex[2] = k;   // z position</div><div><br></div><div><span style="white-space: pre;">                        </span>ImageType::PixelType   pixelValuePT = imagePT-&gt;GetPixel( pixelIndex );</div>


<div><br></div><div><span style="white-space: pre;">                </span>ImageType::PixelType  newValue = pixelValueCT+100;</div><div><br></div><div><span style="white-space: pre;">                        </span>if(pixelValueCT!=0)</div>
<div><span style="white-space: pre;">                        </span>{<span style="white-space: pre;">        </span></div><div><span style="white-space: pre;">                                </span>imageCT-&gt;SetPixel(   pixelIndex,   newValue  );</div>
<div><span style="white-space: pre;">                        </span>}<span style="white-space: pre;">        </span></div><div><span style="white-space: pre;">                </span>}</div><div><span style="white-space: pre;">        </span>}</div>
<div>   }</div><div><br></div><div>This code doesn&#39;t do the work well. Do you know how to change it?</div><div>Thank you,</div><div>bye,</div><div><br></div><font color="#888888"><div>Marco</div></font></div>
<br></div></div>_____________________________________<br>
Powered by <a href="http://www.kitware.com" target="_blank">www.kitware.com</a><br>
<br>
Visit other Kitware open-source projects at<br>
<a href="http://www.kitware.com/opensource/opensource.html" target="_blank">http://www.kitware.com/opensource/opensource.html</a><br>
<br>
Kitware offers ITK Training Courses, for more information visit:<br>
<a href="http://www.kitware.com/products/protraining.html" target="_blank">http://www.kitware.com/products/protraining.html</a><br>
<br>
Please keep messages on-topic and check the ITK FAQ at:<br>
<a href="http://www.itk.org/Wiki/ITK_FAQ" target="_blank">http://www.itk.org/Wiki/ITK_FAQ</a><br>
<br>
Follow this link to subscribe/unsubscribe:<br>
<a href="http://www.itk.org/mailman/listinfo/insight-users" target="_blank">http://www.itk.org/mailman/listinfo/insight-users</a><br>
<br></blockquote></div><font color="#888888"><br><br clear="all"><br>-- <br>Sergio Vera<br><br> Alma IT Systems<br> C/ Vilana, 4B, 4º 1ª<br> 08022 Barcelona<br> T. (+34) 932 380 592<br> <a href="http://www.alma3d.com" target="_blank">www.alma3d.com</a><br>


</font></blockquote></div></div></div><br></div>
</blockquote></div><br><br clear="all"><br>-- <br>Sergio Vera<br><br> Alma IT Systems<br> C/ Vilana, 4B, 4º 1ª<br> 08022 Barcelona<br> T. (+34) 932 380 592<br> <a href="http://www.alma3d.com">www.alma3d.com</a><br>