RegionGrow

Synopsis

Performs region growing segmentation on a 3D dataset in a unform field.


    module RegionGrowCore  {
       Mesh_Unif+Node_Data+IPort2  ∈
       Mesh+Node_Data+IPort2       &probe_in;
       float+IPort2                coherance[];
       int+IPort2                  go;
       omethod+notify_inst+req update<src_file="reg_grow.c">(
          in+read+req,
          probe_in+read+req,
          coherance+read+req,
          go+read+notify+req,
          out+write
       ) = "region_grow_update";
       Mesh_Unif+Node_Data+OPort2 out;
    };

Description

This module performs a form of region growing segmentation on a 3D data set. The form of region growing segmentation used is region aggregation, where elements which fulfill some criteria are added to the region until there are no more elements. A starting position is specified by a probe module and all the elements surrounding that point are tested against the set criteria. If an element passes the criteria it is added to the region and the elements surrounding it are tested against the criteria. This process recursively continues until there are no more elements that pass the criteria. The module was designed for use on 8 or 16 bit integer data taken from medical imaging data. It is able to deal with all the primitive types supported by AVS/Express. However best results are likely to be obtained with either unsigned byte or unsigned short data.

Please note that the majority of this documentation deals with the detailed functioning of the region growing algorithm and the low-level module. You may find that it useful to look at and experiment with the RegionGrowEg example application before reading the rest of this documentation. Please also note that the region_grow user macro used in the example application provides a much simpler interface and should normally be used in preference to this module.

Region Growing Criteria & Algorithm

The criteria used to decide if an element is part of the region is as follows. The current element is the element being tested and the parent element is the previous element in the region growing process. Coherance is the probability that an element with a certain value is part of the region. Distance between elements is calculated by using the pythagorean theorem. As the data is input on a regular grid this means that diagonally adjacent elements are further away than orthogonally adjacent elements. Given these restrictions two equations are used to calculate the probability that an element is part of the region.

diff = ABS( coherance<sub>parent</sub> - coherance<sub>current</sub> )
value<sub>current</sub> = (DIST_MOD * value<sub>parent</sub> * diff) / distance

The ABS() function calculates the absolute value or modulus of the supplied parameter. DIST_MOD is a constant value that is intended to ensure the probability value decreases with distance. As standard DIST_MOD equals 0.99

If the calculated probability value is greater than the previous value for the current element and the calculated probability value is greater than a specified threshold the current element is added to the region.

The coherance used to calculate the criteria are based on a lookup table which is input as an array of floating point values. This lookup table should map the values of the data elements between 0 and the maximum data value to a probability value between 0 and 1. These probability values should represent the coherance of the value with the desired region. A module is provided with the project that generates a guassian distribution of probability values.

The output of the module is a uniform 3D field of byte values between 0 and 255 which represent how well each element fits into the region.

Inputs

&in

Pointer to a unform 3D field containing the dataset to be analysed. The field should have a type of Mesh_Unif+Node_Data. Best results will be obtained if the node data is of unsigned byte or unsigned short type.

&probe_in

Pointer to a field holding the coordinates of the starting point for the field growing. These coordinates are normally picked by using the probe module to select a point in the dataset.

coherance[]

Floating point array that holds the lookup table. The array should contain probability values for each data value between 0 and the maximum data value. A probability value of 1 for a data value, indicates that an element with this data value will always be added to a region. Conversely a probability value of 0 indicates that an element will never be added to a region.

reg_threshold

Integer value that specifies the minimum probability value that is to be considered to be part of the selected region. If the calculated probability for an element is less than this value the element is ignored and the region does not continue growing into that element. Varying this parameter provides a simple way of controlling the processing time required. A high threshold value can greatly reduce the processing time. However the accuracy of the results will be reduced. Conversely a low threshold value will result in an extensive search of the input data at the cost of a higher processing time.

go

Flag to trigger the update method. Region growing is a mathematically intensive process and therefore the output field is only updated when the module is manually triggered by this parameter. Changes to the other parameters do not automatically cause the module to update. This parameter is not directly read by the method.

Outputs

out

Uniform 3D scalar field containing the byte data representing the segmented region. Output field contains a uniform mesh that has the same dimensions as the input mesh. It also contains byte node data that specifies the probability that each element is part of the grown region. Low values indicate a low probability that an element is part of the region.

Utility Macros

Several macros are provided to help ease the use of this module. The RegionGrow functional macro combines the RegionGrowCore module with GenerateGuassainProbs module. This allows the macro to automatically generate a suitable array of coherance values. The region_grow user macro uses that functional macro and also provides a user interface. The user interface is contained in the RegionGrowUI macro. The RegionGrowParams parameter block is used to connect these macros.

Example

The example application is called RegionGrowEg and it demonstrates the use of the region_grow user macro. When you first start up the application you should see a standard multi-window application with three views created. These views show a thresholded orthoslice of the original data, the guassian distribution that is to be used as the coherance array and an empty window. First you should select a point in the original data by CTRL-clicked on the orthoslice. Then start the module processing by clicking the option in the Region Growing user interface. After a period of time the region growing will complete and a isosurface of the new data will be shown in the empty window. The other controls in the user interface allow the guassian distribution to be altered so that other areas of the data can be selected, and the region growing threshold to be changed.

Files

iac_proj/reg_grow/rg_mods.v contains the V definitions of the low-level modules RegionGrowCore, GenerateGuassianProbs and AccumulateCore; and the parameter blocks RegionGrowParams and AccumulateParams.

Other Notes

The low-level RegionGrowMods library containing the module does not specify a process. By default the express process will be used.

Authors

Alex Allen & Joanna Leng.
Manchester Visualization Centre
Manchester Computing
University of Manchester
Oxford Road
Manchester
UK
M13 9PL.
Andrew Dodd
International AVS Centre

Contact

International AVS Centre
Manchester Visualization Centre
Manchester Computing
University of Manchester
Oxford Road
Manchester
United Kingdom
M13 9PL

See Also

GenerateGuassianProbs, AccumulateCore