GRASS GSoC 2012 Image Segmentation
(See also other GRASS GSoC 2012 projects)
|Student Name:||Eric Momsen|
|Organization:||OSGeo - Open Source Geospatial Foundation|
|Mentor Name:||Mentor: Markus Metz (backup mentors: M Lennert, P Roudier)|
GRASS GIS has many imagery related processing capabilities, but the field is rapidly developing and many techniques are not yet implemented. The goal of this GSoC project is to implement the region growing image segmentation algorithm.
Input: Raster map(s) to be segmented (plus optional vector map for a constraint)
Output: To include segmented regions with statistics. This information can be directly used or taken as input to existing image classification modules.
Image classification techniques already implemented in GRASS GIS include supervised and unsupervised classification. Classification of images based on pixels can often be very noisy. By first segmenting the image, later classification of 'objects' can be more effective. Noise is reduced, classification speed is increased, and most importantly the classification is performed on objects instead of pixels. The Image classification. Furthermore, the module in GRASS-addons uses internally the Mumford-Shah variational model for image segmentation.module does include a segmentation step (based on Gaussian mixture distribution), but there does not exist a module intended to segment the image and provide segment data for general use. A summary of the existing methods implemented in GRASS are at
- Boundary Based
- optimal edge detector +
- watershed +
- Region Based
- multilevel thresholding technique +
- region growing+
- mean-shift (does it fall under region based grouping?)
Carleer et.al.  reviewed 4 methods (marked with + above). Boundary based methods are sensitive to noise and texture, and usually depend on good pre-processing. (Does GRASS already have this pre-processing/filtering?) Good results with urban zones, high contrast. Both region based methods had difficulty with transition zones. Region growing was less sensitive to texture (good for high resolution (1m) images). Multi-level techniques are the only way to get all objects without over-segmentation.
As additional algorithm's are added to the module, attention should be given to diversify so algorithm's with different strengths are implemented first.
All(?) methods have some input parameter(s) that can be set. These parameters influence if the algorithm will over-segment (one expected region is divided into 2 or more segments) or under-segment (putting two expected regions into one segment). If the segments are used for later classification, over-segmentation should usually get preference to under-segmentation. With extensive over-segmentation, some of the advantages provided by segmentation can be lost, but at least the classification can combine the segments into the expected region. Under-segmentation is more critical, as the classification step will not divide the segment to recover the different regions. (Based on a summary of a number of papers from )
Implement an image segmentation method to extend the available options for image processing in GRASS. The region growing method has been selected as a robust general purpose method. An important contribution of the new method will be to include vector maps (for example road networks) as a constraint in growing the segments. Output from the module will include Spectral (mean/variance/range/ect) and Spatial (area/shape/location/etc) data for each region.
- General considerations
- The general principle in GRASS is KISS, with each module doing one thing. It is to be seen if the result of this project is one single module or rather more than one module each specialised in one task in a segmentation workflow.
- As soon as code is to be (potentially) used in several modules, the use of a library should be envisaged.
- in the GRASS logic, input should be an image group, or even image subgroup, which can contain any number of raster maps, but generally satellite or areal images that are pre-processed and ready for analysis (i.e. no pre-processing in the module)
- optionally vector maps of existing features
- lines (be it linear features or boundary lines of polygons) should be used as constraints meaning that no segment boundary should cross such a line
- Algorithm of segmentation
- in GSoC implementation of only one algorithm
- code should be structured to allow easy implementation of additional algorithms
- multi-scalar segmentation can significantly improve results and should thus be implemented if possible (see i.smap code for example)
- raster map of segments (i.e. each pixel value represents id of segment the pixel belongs to)
- one vector map of segments per hierarchy level with a series of attributes (not all of these attributes should probably be calculated directly be the segmentation module)
- spectral attributes:
- per spectral band: mean, min, max, skewness
- comination of bands: brightness, indices (i.e. results of multi-band calculations)
- textural attributes: stdev (per-band and/or multi-band), mean difference to neighbor, Haralick texture features cf
- geometric/morphological attributes: area, perimeter, length/width measures, see also
- context attributes: mean difference to all other regions in the same upper hierarchical level, relative localisation within upper hierarchical level, absolute localisation, number of objects in lower level
- spectral attributes:
- depending on segmentation algorithm: raster map indicating for each pixel the probability of belonging to the segment it was put into, i.e. some measure of reliability of results
The results of the implemented algorithm should be compared against the results of a similar algorithm implement in other software. Sample images publicly available can also be used for the documentation.
Carleer  used images with 1m resolution from Ikonos, panchromatic band from 08 June 2000, Brussels area.
Should test (and demo?) images from a few different resolutions and different numbers of bands.
Is there a benchmark for processing speed that should be considered?
Preparation: Gather ideas from the community! Feature requests, image segmentation literature, and any other ideas and suggestions.
- May 21: Start coding, 8 weeks until Midterm Evaluation
- Week 1: Develop pseudocode to outline the work
- Week 2-4: Implement the main algorithm
- Week 5: Add vector maps as a constraint to the segmentation
- Week 6: Validation
- Week 7: Debugging
- Week 8: Contingency time for finishing the above, ensure a solid main program.
- July 9: Midterm Evaluation: Evaluate the existing program, determine the plan for the remaining 3-4 weeks. Options include:
- Improving the main algorithm
- Adding control for what scale the segmentation is performed at
- Providing updates to to ensure the segmentation output can be used as input for the existing classification functionality
- Adding a second image segmentation algorithm
TODO: complete references with links.
 Carleer, et al: Assessment of Very High Spatial Resolution Satellite Image Segmentations