[Insight-users] watershed with MRI
Joshua Cates
cates@sci.utah.edu
Wed, 8 Jan 2003 11:54:35 -0700 (MST)
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<float, 2> 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<ImageType2D>
> 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<ImageType2D>::Pointer watershed
> = itk::WatershedImageFilter<ImageType2D>::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::ImageRegionIterator<TestInputImage>ImageIterator1;
> 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