[Insight-users] watershed with MRI

lydia coin lydia_coin3d@yahoo.fr
Wed, 8 Jan 2003 20:16:46 +0100 (CET)


--0-1234381676-1042053406=:76028
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit


Hi Josh,
I changed the value of the level paramter from 1 to 0.1 and to 0.01, but still the same intensity value of 3452816845 for the whole image. it's really strange, I wonder if this example in the testing folder gives the same result for you
 Joshua Cates <cates@sci.utah.edu> wrote:Hi Lydia,

For your MRI image, make sure that you cast to float (or double) before 
passing to the GradientMagnitudeImageFilter. You might also want to do 
some smoothing on the image first (i.e. 
Gradient/CurvatureAnisotropicDiffusionImageFilter or 
BilateralImageFilter). 

In your example code below, you set the Level parameter to 1.0. This 
should result in an output of exactly one region because it is telling the 
filter to merge all of the potential watershed basins up to 100% of the 
possible image height. Try a Level parameter much lower than this, say 
0.10 (i.e. 10% of the height).

Josh.

______________________________
Josh Cates 
School of Computer Science 
University of Utah
Email: cates@sci.utah.edu
Phone: (801) 587-7697
URL: http://www.sci.utah.edu/~cates


On Wed, 8 Jan 2003, lydia coin wrote:

> 
> thank you for your hints.
> 
> That what I did, I used an MRI image, with the GradientMagnitudeImageFilter and pass it to the watershed filter. the result is an image with the same intensity value.
> 
> In addition to using MRI image, I took the image of the testing example as follows (source code below). The result is an image with the same intensity value everywhere in the image ( like for the MRI). In this case the pixel type is float but still doesn't work. I'll cast the MR image to float but in the meanwhile, could you have a look to my code, maybe something is wrong. 
> 
> 
> 
> typedef itk::Image ImageType2D;
> itk::ImageRegion<2> Region2D;
> itk::Size<2> size2D;
> size2D[0] = 256;
> size2D[1] = 256;
> itk::Index<2> orig2D;
> orig2D[0] = 0;
> orig2D[1] = 0;
> 
> Region2D.SetSize(size2D);
> Region2D.SetIndex(orig2D);
> 
> ImageType2D::Pointer image2D = ImageType2D::New();
> image2D->SetLargestPossibleRegion(Region2D);
> image2D->SetBufferedRegion(Region2D);
> image2D->SetRequestedRegion(Region2D);
> image2D->Allocate();
> 
> 
> itk::ImageRegionIterator
> it2D(image2D, image2D->GetRequestedRegion()); 
> 
> float q = 0.00f;
> for (; !it2D.IsAtEnd(); ++it2D)
> {
> it2D.Value() = ::sin(q);
> q = q + 0.10f;
> }
> 
> float lower_threshold=.05f;
> itk::WatershedImageFilter::Pointer watershed
> = itk::WatershedImageFilter::New();
> watershed->SetThreshold(lower_threshold);
> watershed->SetLevel(1.0f);
> watershed->SetInput(image2D);
> typedef unsigned long PixelType1;
> PixelType1 *data = new PixelType1[size[0]*size[1]];
> typedef itk::ImageRegionIteratorImageIterator1;
> ImageIterator1 it1(watershed->GetOutput(),watershed->GetOutput()->GetBufferedRegion());
> it1.GoToBegin();
> int i=0;
> while( !it1.IsAtEnd() )
> {
> data[i]=it1.Get( );
> ++it1;
> i++;
> }
> 
> 
> 
> ---------------------------------
> Do You Yahoo!? -- Une adresse @yahoo.fr gratuite et en français !
> Testez le nouveau Yahoo! Mail



---------------------------------
Do You Yahoo!? -- Une adresse @yahoo.fr gratuite et en français !
Testez le nouveau Yahoo! Mail
--0-1234381676-1042053406=:76028
Content-Type: text/html; charset=iso-8859-1
Content-Transfer-Encoding: 8bit

<P>Hi Josh,
<P>I changed the value of the level paramter from 1 to 0.1 and to 0.01, but still the same intensity value of 3452816845 for the whole image. it's really strange, I wonder if this example in the testing folder gives the same result for you
<P>&nbsp;<B><I>Joshua Cates &lt;cates@sci.utah.edu&gt;</I></B> wrote:
<BLOCKQUOTE style="PADDING-LEFT: 5px; MARGIN-LEFT: 5px; BORDER-LEFT: #1010ff 2px solid">Hi Lydia,<BR><BR>For your MRI image, make sure that you cast to float (or double) before <BR>passing to the GradientMagnitudeImageFilter. You might also want to do <BR>some smoothing on the image first (i.e. <BR>Gradient/CurvatureAnisotropicDiffusionImageFilter or <BR>BilateralImageFilter). <BR><BR>In your example code below, you set the Level parameter to 1.0. This <BR>should result in an output of exactly one region because it is telling the <BR>filter to merge all of the potential watershed basins up to 100% of the <BR>possible image height. Try a Level parameter much lower than this, say <BR>0.10 (i.e. 10% of the height).<BR><BR>Josh.<BR><BR>______________________________<BR>Josh Cates <BR>School of Computer Science <BR>University of Utah<BR>Email: cates@sci.utah.edu<BR>Phone: (801) 587-7697<BR>URL: http://www.sci.utah.edu/~cates<BR><BR><BR>On Wed, 8 Jan 2003, lydia coin wrote:<BR><BR>&gt; <BR>&gt; thank you for your hints.<BR>&gt; <BR>&gt; That what I did, I used an MRI image, with the GradientMagnitudeImageFilter and pass it to the watershed filter. the result is an image with the same intensity value.<BR>&gt; <BR>&gt; In addition to using MRI image, I took the image of the testing example as follows (source code below). The result is an image with the same intensity value everywhere in the image ( like for the MRI). In this case the pixel type is float but still doesn't work. I'll cast the MR image to float but in the meanwhile, could you have a look to my code, maybe something is wrong. <BR>&gt; <BR>&gt; <BR>&gt; <BR>&gt; typedef itk::Image<FLOAT, 2> ImageType2D;<BR>&gt; itk::ImageRegion&lt;2&gt; Region2D;<BR>&gt; itk::Size&lt;2&gt; size2D;<BR>&gt; size2D[0] = 256;<BR>&gt; size2D[1] = 256;<BR>&gt; itk::Index&lt;2&gt; orig2D;<BR>&gt; orig2D[0] = 0;<BR>&gt; orig2D[1] = 0;<BR>&gt; <BR>&gt; Region2D.SetSize(size2D);<BR>&gt; Region2D.SetIndex(orig2D);<BR>&gt; <BR>&gt; ImageType2D::Pointer image2D = ImageType2D::New();<BR>&gt; image2D-&gt;SetLargestPossibleRegion(Region2D);<BR>&gt; image2D-&gt;SetBufferedRegion(Region2D);<BR>&gt; image2D-&gt;SetRequestedRegion(Region2D);<BR>&gt; image2D-&gt;Allocate();<BR>&gt; <BR>&gt; <BR>&gt; itk::ImageRegionIterator<IMAGETYPE2D><BR>&gt; it2D(image2D, image2D-&gt;GetRequestedRegion()); <BR>&gt; <BR>&gt; float q = 0.00f;<BR>&gt; for (; !it2D.IsAtEnd(); ++it2D)<BR>&gt; {<BR>&gt; it2D.Value() = ::sin(q);<BR>&gt; q = q + 0.10f;<BR>&gt; }<BR>&gt; <BR>&gt; float lower_threshold=.05f;<BR>&gt; itk::WatershedImageFilter<IMAGETYPE2D>::Pointer watershed<BR>&gt; = itk::WatershedImageFilter<IMAGETYPE2D>::New();<BR>&gt; watershed-&gt;SetThreshold(lower_threshold);<BR>&gt; watershed-&gt;SetLevel(1.0f);<BR>&gt; watershed-&gt;SetInput(image2D);<BR>&gt; typedef unsigned long PixelType1;<BR>&gt; PixelType1 *data = new PixelType1[size[0]*size[1]];<BR>&gt; typedef itk::ImageRegionIterator<TESTINPUTIMAGE>ImageIterator1;<BR>&gt; ImageIterator1 it1(watershed-&gt;GetOutput(),watershed-&gt;GetOutput()-&gt;GetBufferedRegion());<BR>&gt; it1.GoToBegin();<BR>&gt; int i=0;<BR>&gt; while( !it1.IsAtEnd() )<BR>&gt; {<BR>&gt; data[i]=it1.Get( );<BR>&gt; ++it1;<BR>&gt; i++;<BR>&gt; }<BR>&gt; <BR>&gt; <BR>&gt; <BR>&gt; ---------------------------------<BR>&gt; Do You Yahoo!? -- Une adresse @yahoo.fr gratuite et en français !<BR>&gt; Testez le nouveau Yahoo! Mail<BR></BLOCKQUOTE><p><br><hr size=1>Do You Yahoo!? -- Une adresse @yahoo.fr gratuite et en français !<br>
<a href=http://fr.mail.yahoo.com>Testez le nouveau Yahoo! Mail</a>
--0-1234381676-1042053406=:76028--