[Insight-users] 3D Segmentation Mask

Luis Ibanez luis.ibanez at kitware.com
Wed May 14 14:43:53 EDT 2008



Hi Cameron,

Thanks for the additional comments.

The flipping of the Y axis should be ok, since
it takes care of matching VTK and ITK coordinates.
(but it is good to keep it in mind, in case it
  is producing secondary effects...)


------

I'm concerned about your comment indicating that
you change the image origin both after reading it
and after converting it to VTK.

If you are doing this "manually", this may be
part of the problem.

When an image is produced as the output of a filter
you shouldn't modify its metadata, unless you first
disconnect the image from the filter.

If the image is produced by a filter, then you should
use the ChangeInformationImageFilter.

-----

Direction cosines are used in ITK (and DICOM) for
indicating the orientation of the image slices
with respect to an base coordinate system. In your
case they are set to identity, so... they are not
involved in the problem that you are observing.


-----


The print out of the image->Print() methods looks
fine. The relevant pieces are:

   BufferedRegion:
     Dimension: 3
     Index: [0, 0, 0]
     Size: [512, 512, 342]

Spacing: [0.468, 0.468, 1]
   Origin: [0, 0, 0]
   Direction:
          1 0 0
          0 1 0
          0 0 1

---

Now what we will need is a chain of print outs
of coordinates of your seed point from the moment
that you acquire it in VTK to the moment you use
it to query the PhysicalPointToIndex() method of
the image.

In one of those steps the proper coordinates
of the seed point are getting lost.

Please insert print out for those coordinates
in your code, and set to the mailing list
what you find.


    Thanks


       Luis


-------------------------
Cameron Burnett wrote:
> 
> I think there is 1 more thing I should mention. After I read in my DICOM 
> file into VTK I had to flip it like so....
> 
>   vtkImageFlip *flipX = vtkImageFlip::New();    //need this so the y 
> axis matches the widget
>   flipX->SetInputConnection( imageShiftScale->GetOutputPort());
>   flipX->SetFilteredAxis(1);    // 1 = y axis
> 
> I was told to do this when one of my previous questions was answered, 
> and it fixed the problem of the point widget picking the opposite side 
> of the Y axis. I'm not sure if this could be a problem with what I have 
> now, but it seemed to work perfectly before I tried the masking. Thats 
> the most confusing thing.... the fact that it worked without the mask 
> (or seemed to work).
> 
> 
> Anyway, here is the stuff you requested. Fixing a few of those simple 
> things didn't change the output at all.
> 
> 
>  > 1) What is the pixel spacing of your image ?
> 
>     0.468 , 0.468, 1
> 
> 
>  > 2) Why are you using "int" as the coordinate type of the points ?
>  > I would have expected you to use "double"
> 
>     That was a mistake from when I copied the code I had for the indices 
> (since the indices are integers). I've removed the casting now.
> 
> 
>  > 3) Also,
>  > What is the origin of the ITK image ?
> 
>     After Reader->Update() I create an image with its output and 
> immediately set the origin to 0,0,0.
> 
> 
>  > can you confirm that the VTK image has the same origin ?
> 
>     I just added a line to set its origin also. However when I ran the 
> program it did the same as before.
> 
>             volume->SetMapper( mapper );
>             volume->SetProperty( volumeProperty );
>             volume->SetOrigin(0.0, 0.0, 0.0);
> 
>  > For example, place your seed in the corner of the image
>  > and print out the Point coordinates. They should match
>  > the image origin.
>  > (you may have to probe the eight corners of the image,
>  > in order to find the one that matches the origin).
> 
>     Yes I found a corner that gives an index of 0,0,0.
> 
> 
>  > 4) Does your image has Direction Cosines ?
> 
>     I don't even know what that is, so I'll presume I don't have them.
>   
> 
>  > 5) Are you using the itkOrientedImage class ?
>  > VTK will not carry the image direction...
>  > That may also be a source of troubles.
> 
>     No, I'm not. Should I?
> 
> 
>  > Please read the image with ITK and call
>  >
>  > image->Print( std::cout );
>  >
>  > and post the output to the mailing list.
> 
> 
> 
> 1.2.392.200036.9116.2.2.2.1762576288.1175672259.904331
> Image (027458B0)
>   RTTI typeinfo:   class itk::Image<short,3>
>   Reference Count: 2
>   Modified Time: 8308
>   Debug: Off
>   Observers:
>     none
>   Source: (027457A8)
>   Source output index: 0
>   Release Data: On
>   Data Released: False
>   Global Release Data: Off
>   PipelineMTime: 50
>   UpdateMTime: 8307
>   LargestPossibleRegion:
>     Dimension: 3
>     Index: [0, 0, 0]
>     Size: [512, 512, 342]
>   BufferedRegion:
>     Dimension: 3
>     Index: [0, 0, 0]
>     Size: [512, 512, 342]
>   RequestedRegion:
>     Dimension: 3
>     Index: [0, 0, 0]
>     Size: [512, 512, 342]
>   Spacing: [0.468, 0.468, 1]
>   Origin: [0, 0, 0]
>   Direction:
> 1 0 0
> 0 1 0
> 0 0 1
> 
>   PixelContainer:
>     ImportImageContainer (02745A20)
>       RTTI typeinfo:   class itk::ImportImageContainer<unsigned long,short>
>       Reference Count: 1
>       Modified Time: 97
>       Debug: Off
>       Observers:
>         none
>       Pointer: 02745A50
>       Container manages memory: true
>       Size: 89653248
>       Capacity: 89653248
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
>  > -----------------------
>  > Cameron Burnett wrote:
>  > >
>  > > After going over my current problem I think I've found a bug in
>  > > TransformPhysicalPointToIndex.
>  > >
>  > > Below is a simple diagram of the Z axis, ranging from 0 to 342 pixels.
>  > > If I put my box widget around the yyy section (and put my seed 
> point in
>  > > this section also), the result will be a segmentation of the opposite
>  > > side.... the xxx section.
>  > >
>  > > 0|-------xxx----|----yyy-------|342
>  > >
>  > > It doesn't make any sense as to why this happens. I'm simply taking 
> the
>  > > bounds of the box widget, creating points with them, and then turning
>  > > them into indices.....
>  > >
>  > > startPt[0] = (int)bounds[0]; //xmin
>  > > startPt[1] = (int)bounds[2]; //ymin
>  > > startPt[2] = (int)bounds[4]; //zmin
>  > >
>  > > InternalImageType::PointType endPt;
>  > > endPt[0] = (int)bounds[1]; //xmin
>  > > endPt[1] = (int)bounds[3]; //ymin
>  > > endPt[2] = (int)bounds[5]; //zmin
>  > >
>  > > InternalImageType::IndexType start;
>  > > InternalImageType::IndexType end;
>  > >
>  > > InternalImageType::Pointer image = reader->GetOutput();
>  > >
>  > > InternalImageType::PointType origin;
>  > > origin[0] = 0.0;
>  > > origin[1] = 0.0;
>  > > origin[2] = 0.0;
>  > > image->SetOrigin(origin);
>  > >
>  > > image->TransformPhysicalPointToIndex(startPt, start);
>  > > image->TransformPhysicalPointToIndex(endPt, end);
>  > >
>  > > InternalImageType::SizeType size;
>  > > size[0] = end[0]-start[0];
>  > > size[1] = end[1]-start[1];
>  > > size[2] = end[2]-start[2];
>  > >
>  > > --------------------------------------
>  > >
>  > > Does this look like a bug?
>  > >
>  > > Thanks,
>  > > Cameron.
>  > >
>  > >
>  > >
>  > >
>  > >
>  > > 
> ------------------------------------------------------------------------
>  > > From: w_e_b_m_a_s_t_e_r_6_9 at hotmail.com
>  > > To: luis.ibanez at kitware.com
>  > > Date: Fri, 9 May 2008 21:59:33 +1000
>  > > CC: insight-users at itk.org
>  > > Subject: Re: [Insight-users] 3D Segmentation Mask
>  > >
>  > >
>  > > Thanks Luis, that almost worked. I was concentrating so much on the
>  > > box widget I didn't really think to change the seed point.
>  > >
>  > > The problem now is seen in the following 2 pictures.
>  > >
>  > > This is the dicom object I get from the box widget mask. IE: the
>  > > area that I want to segment.....
>  > > http://img169.imageshack.us/img169/1506/femurunsegmentedjx1.jpg
>  > > And this is the result....
>  > > http://img254.imageshack.us/img254/2503/femursegmenteden8.jpg
>  > >
>  > > You can see that the result is actually not quite the area that we
>  > > were after. Its moved up in the +Z direction so that most of the
>  > > femur is actually cut off. I'm almost certain that this is because
>  > > the Z axis is flipped or something similar. But why? One would
>  > > presume that the TransformPhysicalPointToIndex function would give
>  > > the correct index even if the Z axis was somehow the wrong way
>  > > around, right?
>  > >
>  > > Naturally, I just changed the Z starting point to start on the other
>  > > side.....
>  > >
>  > > start[2] = 512 - start[2]; // hardcoded 512 as a test
>  > > size[2] = start[2]-end[2]; //changed from size[2] = end[2]-start[2];
>  > >
>  > > .... however the program just crashed when I did that.
>  > >
>  > >
>  > > I'm wondering if this problem is a bug, because it seems really
>  > > strange to me that the points don't translate properly. Do you think
>  > > it might be, or is it just another simple fix that I'm overlooking??
>  > >
>  > > Thanks.
>  > >
>  > >
>  > >
>  > > 
> ------------------------------------------------------------------------
>  > > > Date: Wed, 7 May 2008 12:01:49 -0400
>  > > > From: luis.ibanez at kitware.com
>  > > > To: w_e_b_m_a_s_t_e_r_6_9 at hotmail.com
>  > > > CC: insight-users at itk.org
>  > > > Subject: Re: [Insight-users] 3D Segmentation Mask
>  > > >
>  > > >
>  > > >
>  > > > Hi Cameron,
>  > > >
>  > > >
>  > > > Your suspicion is probably right,
>  > > >
>  > > >
>  > > > If you have the following pipeline:
>  > > >
>  > > >
>  > > > reader-->ROIFilter-->RegionGrow
>  > > >
>  > > >
>  > > > and you feed the RegionGrowing filter
>  > > > with seed points whose index coordinates
>  > > > have been taken from the input image of
>  > > > the ROIFilter, then those indices can
>  > > > easily be outside of the extent of the
>  > > > image used in the RegionGrow filter.
>  > > >
>  > > >
>  > > > For example,
>  > > >
>  > > > if the input image has a region:
>  > > >
>  > > > Index Start: 0, 0, 0
>  > > > Size: 512, 512, 200
>  > > >
>  > > > and you extract the ROI;
>  > > >
>  > > > Index Start: 200, 200, 50
>  > > > Size : 100, 100, 100
>  > > >
>  > > > you will end up with an image whose
>  > > > region is given by:
>  > > >
>  > > > Index Start: 0, 0, 0
>  > > > Size: 100, 100, 100
>  > > >
>  > > > the Origin coordinates will be computed in
>  > > > order to match the physical position of the
>  > > > index (200,200,50) in the input image.
>  > > >
>  > > >
>  > > > So... if you are picking the seed points
>  > > > from the input image you have to convert
>  > > > these indices to the range of the output
>  > > > image.
>  > > >
>  > > > For example:
>  > > >
>  > > > Index picked in the input image:
>  > > >
>  > > > 257, 234, 65
>  > > >
>  > > > should be converted to the ROI extracted
>  > > > image by subtracting the origin of the
>  > > > ROI
>  > > >
>  > > > 257-200, 234-200, 65-50
>  > > >
>  > > > to produce
>  > > >
>  > > > 57, 34, 15
>  > > >
>  > > >
>  > > > You could also prevent crashes by testing
>  > > > the index before running the algorithm.
>  > > >
>  > > >
>  > > > For example:
>  > > >
>  > > > roi->Update();
>  > > > if( roi->GetOutput()->GetBufferedRegion().IsInside( seed ) )
>  > > > {
>  > > > regionGrowth->AddSeed( seed );
>  > > > regionGrowth->Update();
>  > > > }
>  > > > else
>  > > > {
>  > > > // error message
>  > > > }
>  > > >
>  > > >
>  > > > Note tha you must call Update() in the roi filter
>  > > > before you attempt to query its output image.
>  > > >
>  > > >
>  > > > Please let us know if you find any other problems,
>  > > >
>  > > >
>  > > > Thanks
>  > > >
>  > > >
>  > > > Luis
>  > > >
>  > > > -----------------------
>  > > > Cameron Burnett wrote:
>  > > > >
>  > > > > I've done a bit of testing to see where my problem is.
>  > > > >
>  > > > > 1) The region that I've set up (to define the
>  > > > > RegionOfInterestImageFilter) is definately within the input
>  > > image range.
>  > > > > 2) The Confidence Connected seed point is definately within the
>  > > defined
>  > > > > region.
>  > > > >
>  > > > > So in that regard everything seems perfect. Now I'm also
>  > > getting another
>  > > > > result where the program crashes, presumably because of a bad
>  > > pixel
>  > > > > index given to the Confidence Connected Filter....
>  > > > >
>  > > > > const InputRealType seedIntensity =
>  > > > > static_cast<InputRealType>(inputImage->GetPixel( *si ));
>  > > > > //crashes here in itkConfidenceConnectedImageFilter.txx
>  > > > >
>  > > > >
>  > > > > .... and so now I'm thinking that maybe the
>  > > RegionOfInterestImageFilter
>  > > > > has set up a whole new pixel index system, but my program is
>  > > still using
>  > > > > the old one perhaps?
>  > > > >
>  > > > > Does this filter use the same pixel indices as the original
>  > > image or
>  > > > > does it create new ones within the new region?? Thats honestly
>  > > the ONLY
>  > > > > thing I can think of.
>  > > > >
>  > > > > Thanks.
>  > > > >
>  > > > >
>  > > > >
>  > > > >
>  > > > >
>  > > > >
>  > > 
> ------------------------------------------------------------------------
>  > > > > From: w_e_b_m_a_s_t_e_r_6_9 at hotmail.com
>  > > > > To: w_e_b_m_a_s_t_e_r_6_9 at hotmail.com
>  > > > > CC: insight-users at itk.org
>  > > > > Subject: RE: [Insight-users] 3D Segmentation Mask
>  > > > > Date: Tue, 6 May 2008 22:27:42 +1000
>  > > > >
>  > > > > Hi all,
>  > > > >
>  > > > > I've been working on my problem, and I fixed a few things but it
>  > > > > still does nothing.
>  > > > >
>  > > > > The part that I changed is as follows. I had forgotten to
>  > > change the
>  > > > > physical coordinates to indices, so thats what I've done here. Its
>  > > > > output is shown below the code.
>  > > > >
>  > > > > -------
>  > > > >
>  > > > > InternalImageType::Pointer image = reader->GetOutput();
>  > > > >
>  > > > > InternalImageType::PointType origin;
>  > > > > origin[0] = 0.0;
>  > > > > origin[1] = 0.0;
>  > > > > origin[2] = 0.0;
>  > > > > image->SetOrigin(origin);
>  > > > >
>  > > > > image->TransformPhysicalPointToIndex(startPt, start);
>  > > > > image->TransformPhysicalPointToIndex(endPt, end);
>  > > > >
>  > > > > InternalImageType::SizeType size;
>  > > > > size[0] = (int)end[0]-(int)start[0];
>  > > > > size[1] = (int)end[1]-(int)start[1];
>  > > > > size[2] = (int)end[2]-(int)start[2];
>  > > > >
>  > > > > CString v;
>  > > > > v.Format("%i %i %i %i %i
>  > > > > %i",start[0],start[1],start[2],size[0],size[1],size[2]);
>  > > > > AfxMessageBox(v);
>  > > > >
>  > > > > ------
>  > > > >
>  > > > > The output of that last message box shows the start coords and the
>  > > > > size coords. That outputs "239 179 229 134 68 51". Now to me that
>  > > > > sounds fine. My image is 512 x 512 x 342 so its within that, and
>  > > > > also the size is quite small, which is exactly what I did with my
>  > > > > box widget.
>  > > > >
>  > > > > I'm not forgetting to refresh the screen or anything. All I have
>  > > > > done is add this filter into the pipeline, and the rest is the same
>  > > > > as when it worked previously with no masking.
>  > > > >
>  > > > > Anything obviously wrong with my code??
>  > > > >
>  > > > > Thanks,
>  > > > > Cameron.
>  > > > >
>  > > > >
>  > > > >
>  > > > >
>  > > 
> ------------------------------------------------------------------------
>  > > > > From: w_e_b_m_a_s_t_e_r_6_9 at hotmail.com
>  > > > > To: luis.ibanez at kitware.com
>  > > > > Date: Tue, 6 May 2008 00:24:10 +1000
>  > > > > CC: insight-users at itk.org
>  > > > > Subject: Re: [Insight-users] 3D Segmentation Mask
>  > > > >
>  > > > > Thanks for that info Luis.
>  > > > >
>  > > > >
>  > > > > I implemented the box widget approach today and it seems to mask
>  > > > > quite well, because the time it takes to run is drastically
>  > > > > reduced. However I'm not actually getting anything to display on
>  > > > > the screen.
>  > > > >
>  > > > > I'm using the ImageReadRegionOfInterestWrite example, and the
>  > > > > key section of code is as follows.
>  > > > >
>  > > > >
>  > > 
> -------------------------------------------------------------------------
>  > > > >
>  > > > > vtkPolyData *poly = vtkPolyData::New();
>  > > > >
>  > > > > double bounds[6];
>  > > > > for(int i=0; i<6; i++){bounds[i] = NULL;}
>  > > > >
>  > > > > boxWidget->GetPolyData(poly);
>  > > > > poly->GetBounds(bounds);
>  > > > >
>  > > > > //then i set up the filter
>  > > > >
>  > > > > InternalImageType::IndexType start;
>  > > > > start[0] = (int)bounds[0]; //xmin
>  > > > > start[1] = (int)bounds[2]; //ymin
>  > > > > start[2] = (int)bounds[4]; //zmin
>  > > > >
>  > > > > InternalImageType::SizeType size;
>  > > > > size[0] = (int)(bounds[1]-bounds[0]); //xmax-xmin
>  > > > > size[1] = (int)(bounds[3]-bounds[2]); //etc...
>  > > > > size[2] = (int)(bounds[5]-bounds[4]);
>  > > > >
>  > > > > //then i attach it all together, add it to the pipeline etc.
>  > > > >
>  > > > >
>  > > 
> --------------------------------------------------------------------------------
>  > > > >
>  > > > > I think my problem has something to do with the Start and Size
>  > > > > indices. I'm not sure what i'm doing wrong though.
>  > > > >
>  > > > >
>  > > > > Thanks for any further help,
>  > > > > Cameron.
>  > > > >
>  > > > >
>  > > > >
>  > > > >
>  > > > >
>  > > 
> ------------------------------------------------------------------------
>  > > > > > Date: Wed, 30 Apr 2008 16:56:25 -0400
>  > > > > > From: luis.ibanez at kitware.com
>  > > > > > To: w_e_b_m_a_s_t_e_r_6_9 at hotmail.com
>  > > > > > CC: insight-users at itk.org
>  > > > > > Subject: Re: [Insight-users] 3D Segmentation Mask
>  > > > > >
>  > > > > > Hi Cameron,
>  > > > > >
>  > > > > > It seems that what you are looking for is a VTK interactive
>  > > > > > method for selecting a region of interest of your 3D image,
>  > > > > > that will be later passed to an ITK segmentation pipeline.
>  > > > > >
>  > > > > > Is that correct ?
>  > > > > >
>  > > > > > If so, one thing you could easily use is the
>  > > > > >
>  > > > > > vtkAffineWidget
>  > > > > > http://www.vtk.org/doc/nightly/html/classvtkAffineWidget.html
>  > > > > >
>  > > > > > or the
>  > > > > >
>  > > > > > vtkBoxWidget
>  > > > > > http://www.vtk.org/doc/nightly/html/classvtkBoxWidget.html
>  > > > > >
>  > > > > > or a combination of 3 ImagePlaneWidgets:
>  > > > > > http://www.vtk.org/doc/nightly/html/classvtkImagePlaneWidget.html
>  > > > > >
>  > > > > >
>  > > > > > That you will find the widgets under
>  > > > > >
>  > > > > >
>  > > > > > VTK/Widgets/
>  > > > > >
>  > > > > >
>  > > > > > You could interactively manipulate their handles until you have
>  > > > > > captured the region of interest and then (programatically)
>  > > > > > you could query the current state of the widget in order to
>  > > > > > deduce the coordinates of its corners.
>  > > > > >
>  > > > > > The coordinate of the region of interest could then be passed
>  > > > > > as a Region to the itkRegionOfInterestImageFilter.
>  > > > > >
>  > > > > >
>  > > > > >
>  > > > > >
>  > > > > > Regards,
>  > > > > >
>  > > > > >
>  > > > > > Luis
>  > > > > >
>  > > > > >
>  > > > > >
>  > > > > > ----------------------
>  > > > > > Cameron Burnett wrote:
>  > > > > > > Hi,
>  > > > > > >
>  > > > > > > Currently I'm trying to figure out how to create a mask for
>  > > > > > > segmentation. The way i'm thinking of doing it is using a
>  > > > > > > MaskImageFilter to mask my DICOM object with a vtkActor
>  > > > > cube object that
>  > > > > > > I generated just from points. To do that I need to figure
>  > > > > out 1 of 2
>  > > > > > > things (due to the fact that you can't plug an actor
>  > > > > straight into the
>  > > > > > > mask filter). Either I replace that vtkActor with some sort
>  > > > > of ITK box
>  > > > > > > primitive that can go straight into the filter, OR I
>  > > > > somehow convert the
>  > > > > > > object into the correct itk image form.
>  > > > > > >
>  > > > > > > Does that make sense?? Generally I just want to segment
>  > > > > only the stuff
>  > > > > > > inside a box that I can move around. That's the simple way
>  > > > > of putting it.
>  > > > > > >
>  > > > > > > I was looking at this example in the Insight Applications
>  > > > > > > "vtkPolyDataToITKMesh.cxx" , but I'm not sure thats what
>  > > > > I'm after. Also
>  > > > > > > I found a bit on the mailing list about
>  > > > > > > "TriangleMeshToBinaryImageFilter" but that has just left me
>  > > > > even more
>  > > > > > > confused.
>  > > > > > >
>  > > > > > > Is there an easier way to create an
>  > > > > interactive/movable/scaleable 3D
>  > > > > > > mask, other than a cube represented by a vtkActor? What
>  > > > > sort of stuff
>  > > > > > > should I be looking to use for this approach (or a similar
>  > > > > one) ??
>  > > > > > >
>  > > > > > > Thanks in advance,
>  > > > > > > Cameron.
>  > > > > > >
>  > > > > > >
>  > > > > > >
>  > > > > > >
>  > > > > > >
>  > > > > > >
>  > > > >
>  > > 
> ------------------------------------------------------------------------
>  > > > > > > Click here Search for local singles online @ Lavalife.
>  > > > > > >
>  > > > >
>  > > 
> <http://a.ninemsn.com.au/b.aspx?URL=http%3A%2F%2Flavalife9%2Eninemsn%2Ecom%2Eau%2Fclickthru%2Fclickthru%2Eact%3Fid%3Dninemsn%26context%3Dan99%26locale%3Den%5FAU%26a%3D30290&_t=764581033&_r=email_taglines_Search_OCT07&_m=EXT>
>  > > > > > >
>  > > > > > >
>  > > > > > >
>  > > > >
>  > > 
> ------------------------------------------------------------------------
>  > > > > > >
>  > > > > > > _______________________________________________
>  > > > > > > Insight-users mailing list
>  > > > > > > Insight-users at itk.org
>  > > > > > > http://www.itk.org/mailman/listinfo/insight-users
>  > > > >
>  > > > >
>  > > 
> ------------------------------------------------------------------------
>  > > > > Find out: SEEK Salary Centre Are you paid what you're worth?
>  > > > >
>  > > 
> <http://a.ninemsn.com.au/b.aspx?URL=http://ninemsn.seek.com.au/career-resources/salary-centre/?tracking%3Dsk:het:sc:nine:0:hot:text&_t=764565661&_r=OCT07_endtext_salary&_m=EXT>
>  > > > >
>  > > > >
>  > > > >
>  > > > >
>  > > 
> ------------------------------------------------------------------------
>  > > > > Hotmail on your mobile. Never miss another e-mail with
>  > > > > <http://www.livelife.ninemsn.com.au/article.aspx?id=343869>
>  > > > >
>  > > > >
>  > > > >
>  > > 
> ------------------------------------------------------------------------
>  > > > > at CarPoint.com.au It's simple! Sell your car for just $30
>  > > > >
>  > > 
> <http://a.ninemsn.com.au/b.aspx?URL=http%3A%2F%2Fsecure%2Dau%2Eimrworldwide%2Ecom%2Fcgi%2Dbin%2Fa%2Fci%5F450304%2Fet%5F2%2Fcg%5F801459%2Fpi%5F1004813%2Fai%5F859641&_t=762955845&_r=tig_OCT07&_m=EXT>
>  > > > >
>  > > > >
>  > > > >
>  > > 
> ------------------------------------------------------------------------
>  > > > >
>  > > > > _______________________________________________
>  > > > > Insight-users mailing list
>  > > > > Insight-users at itk.org
>  > > > > http://www.itk.org/mailman/listinfo/insight-users
>  > >
>  > > 
> ------------------------------------------------------------------------
>  > > Find out: SEEK Salary Centre Are you paid what you're worth?
>  > > 
> <http://a.ninemsn.com.au/b.aspx?URL=http://ninemsn.seek.com.au/career-resources/salary-centre/?tracking%3Dsk:het:sc:nine:0:hot:text&_t=764565661&_r=OCT07_endtext_salary&_m=EXT>
>  > >
>  > >
>  > >
>  > > 
> ------------------------------------------------------------------------
>  > > Find out: SEEK Salary Centre Are you paid what you're worth?
>  > > 
> <http://a.ninemsn.com.au/b.aspx?URL=http%3A%2F%2Fninemsn%2Eseek%2Ecom%2Eau%2Fcareer%2Dresources%2Fsalary%2Dcentre%2F%3Ftracking%3Dsk%3Ahet%3Asc%3Anine%3A0%3Ahot%3Atext&_t=764565661&_r=OCT07_endtext_salary&_m=EXT>
>  > >
>  > >
>  > > 
> ------------------------------------------------------------------------
>  > >
>  > > _______________________________________________
>  > > Insight-users mailing list
>  > > Insight-users at itk.org
>  > > http://www.itk.org/mailman/listinfo/insight-users
> 
> ------------------------------------------------------------------------
> Find out: SEEK Salary Centre Are you paid what you're worth? 
> <http://a.ninemsn.com.au/b.aspx?URL=http%3A%2F%2Fninemsn%2Eseek%2Ecom%2Eau%2Fcareer%2Dresources%2Fsalary%2Dcentre%2F%3Ftracking%3Dsk%3Ahet%3Asc%3Anine%3A0%3Ahot%3Atext&_t=764565661&_r=OCT07_endtext_salary&_m=EXT>


More information about the Insight-users mailing list