[Insight-users] Volview Adds more contours than needed : Labels are not Intensities

Luis Ibanez luis . ibanez at kitware . com
Fri, 28 Nov 2003 11:41:55 -0500


Hi Yasser,

Thaks for posting your labeled image,
that make things much clearer.

You cannot use marching cubes (nor any other
iso-surface extraction algorithm for that matter)
in order to extract surfaces from a labeled image.

Iso-surface extraction relies on the fact that
all the pixels inside a region have intensity
values lower than the iso-value and that all the
external pixels surrounding the region have
intensity values higher than the iso-value.

In your image, you have the case in which a structure
is labeled as "180" and it is in contact with regions
with labels: 0 and 196.

There is no way in which an iso-contour algorithm
could extract the boundary of the region with label 180.
If you try to recover the boundary between the label 180
and 196 you have to chose an isovalue between 180 and 196,
let's say 185. While if you want to extract the boundary
between the region labeled 180 and the region labeled 0
you have to select an iso-value between 0 and 180, let's say
70.

It is impossible in this case to find a single iso-value that
will extract the entire boundary of the region labeled at 180.

There is a simple solution however: just make sure that the
label assigned to the region you want to iso-surface, is the
largest or the lowest of all the labels.  That is, simply
replace 180 with 230.  In that case it will be surrounded by
regions at 0 and 196 that are all lower than 230.  You can
then use an iso-value like 225 in order to extract the surface
of your region of interest.

What you have to keep in mind is that labels are interpreted
as intensity values by the marching cubes algorithm. However
labels do not represent any scalar value. They are just like
letters. You can assign any value to a labe as long as it is
different from any other label.

--

One nice option in VolView is to create mult-component datasets.
In your case, you have 4 objects plust a background. You could
create binary masks for each one of the 4 objects and load them
in VolView using the Volume Merge option.

You will find this option under :


    "View" --> "Filters" --> "Utility" --> "Merge Volumes"

one by one, you selecte one of the binary masks as a "second
input" and it will get merged with the current components of
the data set.  Then you can extract iso-contours per individual
component.  If you go to the "Contours" menu, you will see that
there is a "Component" option under the "Isovalue" slicer.

I will strongly recomend you to apply the ITK AntiAlias image
filter to the binary masks  before you merge them and attempt
to extract iso-surfaces from them. Binary masks look really
bad when you extract iso-surfaces because you get all the
staircase effects.

In any case, the very nature of segmentation makes unlikely that
your binary masks are accurate on the borders, therefore you are
more clear by using a fuzzy representation for the boundaries
of the regions.


Please let us know if you have further questions.


Thanks


   Luis



------------------------
Yasser Bashir wrote:

> Hi Luis,
> 
> Thank you for your response.
> 
> Does it mean that the marchingCubes alone is insufficient for generating
> surface representation of objects in a labelled image.  Can you also explain
> the difference between a labelled and a segmented image in ITKs context?
> 
> Attached are a few slices from my labelled image.
> 
> Yasser
> ----- Original Message ----- 
> From: "Luis Ibanez" <luis . ibanez at kitware . com>
> To: "ITK Stanford" <itk_at_stanford at yahoo . com>
> Cc: <insight-users at itk . org>
> Sent: Thursday, November 27, 2003 8:42 PM
> Subject: Re: [Insight-users] Volview Adds more contours than needed
> 
> 
> 
>>Hi ITK-Stanford
>>
>>There is something strange in your description of the
>>problem.  Adding contours in VolView should only generate
>>iso-level at a particular value. It will not select a
>>region that has an assigned value.
>>
>>If what you did was to *label* the segmented images and
>>you assigned a label value of 182 to the aorta, and a
>>label value of 0 to the trachea then spurious contours may
>>appear around the trachea if the trachea has bordering
>>labels that are at values > 182.
>>
>>Keep in mind that when you ask for an iso-contours at level
>>182 what you are computing is a surface with values < 182
>>in one side and values > 182 on the other side. You are not
>>asking for the surface surrounding a region whose value is 182.
>>
>>
>>
>>Here is a simple solution for your problem:
>>
>>                     Use the ITK plugins in VolView.
>>
>>Simply load your stack of images, then go to the menu
>>
>>                    "View" -> "Filter"
>>
>>and select the group
>>
>>                 "Segmentation - Region Growing"
>>
>>Then the filter
>>
>>                 "Confidence Connected (ITK)"
>>
>>Set
>>
>>the number of iterations to 2
>>the multiplier to 1.0
>>the output value to 255
>>
>>Then go to the menu
>>
>>                  "View" -> "Markers"
>>
>>enable "Display 3D cursor" and "Display 3D markers"
>>
>>Add a 3D marker inside the structure that you want to
>>contour.
>>
>>Then go back to the filters menu (there should be a
>>tab for it now) and click in "Apply Filter" the
>>segmentation result will be a binary image of your
>>label (eg. the region at label value 182 if that's
>>where you put the 3D marker).  Once there, you can
>>enable a contour at value level 128.
>>
>>You will also find useful to run the AntiAlias image
>>filter available in the group " Surface Generation"
>>it will smooth the iso-surface of your binary segmenation
>>by reducing the staircase effects of the typical binary
>>images.
>>
>>
>>Please let us know if you find any problems,
>>
>>
>>Thanks
>>
>>
>>    Luis
>>
>>
>>--------------------------------------------------------
>>ITK Stanford wrote:
>>
>>
>>>Hi,
>>>
>>>I have a stack of .pgm files containing a segmented volume of the
>>>heart.  I can open and view the intensity values of pixels in
>>
>>volview.
>>
>>>However, adding a contour at a certain intensity value, adds contours
>>>for that value and all values lower than it.  For example the
>>
>>intensity
>>
>>>value of the descending aorta is 182 and the intensity value of
>>
>>trachea
>>
>>>is 0.  However adding a contour at value 182 also adds a contour at
>>
>>value 0.
>>
>>>Any idea why this is happening and how can it be fixed??
>>>
>>>All help will be appreciated
>>>--
>>>
>>
>>
>>_______________________________________________
>>Insight-users mailing list
>>Insight-users at itk . org
>>http://www . itk . org/mailman/listinfo/insight-users