giovedì 6 novembre 2014

Image segmentation in GRASS GIS

Image segmentation is the process used to detect homogeneous objects in remote sensed images. This process is useful as a first step for classification. There are several tools around, both free and proprietary, that implement different algorithms. In these days I'm testing some of them and wanted to share some impressions.
To start I have selected my favourite GIS: GRASS. I'm using GRASS 7.1. The segmentation tool that I used is implemented in a module called i.segment, that was developed by Eric Momsen of North Dakota State University, during his Google Summer of Code in 2012.
The segmentation is performed on a group of bands and not on a single band, it means that the user can select the most significant ones in respect to the features she's investigating. The bands can be grouped using the command i.group (Shapiro, 2011).
The algorithm is iterative and can be time-consuming on large images. The parameter "memory" can be used to speed up the process if the machine  has a decent memory.
The main parameter worth to play with is the threshold parameter. The larger the threshold, the more objects are merged together. If the image is big, a useful tip is to test the threshold value on a smaller region then apply it to the region at large.
Another fantastic tools comes from Pietro Zambelli and is called i.segment.hierarchical (available in add-ons). It performs hierarchical segmentation for different threshold values, using the result of the previous run as a seed for the next one. It optimizes the computational time by subdividing the image in tiles and processing them in parallel.
The results of segmentation for increasing threshold values are shown hereinafter.
Threshold = 0.01


Threshold = 0.05



Threshold = 0.1



Threshold = 0.2