[GRASS-dev] [GRASS GIS] #1908: Request for a native GRASS implementation of the ISODATA clustering algorithm

#1908: Request for a native GRASS implementation of the ISODATA clustering
algorithm
-----------------------------------------------------+----------------------
Reporter: nikosa | Owner: grass-dev@…
     Type: enhancement | Status: new
Priority: minor | Milestone: 7.0.0
Component: Imagery | Version: unspecified
Keywords: clustering, k-means, i.cluster, isodata | Platform: Unspecified
      Cpu: Unspecified |
-----------------------------------------------------+----------------------
'''The ISODATA clustering algorithm'''

The ISODATA algorithm is a(nother) modification of the k-means algorithm.
Roughly, the difference lies in that the former allows for user-defined
number of clusters while the latter pre-assumes a fixed number of
clusters.[[BR]]

Quoting [details from ''A Fast Implementation of the ISODATA Clustering
Algorithm''][1]: [[BR]]

{{{
...the algorithm tries to find the best set of cluster centers for a given
set of points in d-dimensional space through an iterative approach until
some maximum number of iterations are performed. It uses a number of
different heuristics to determine when to merge or split clusters. [[BR]]

At a high level, in each iteration of the algorithm the following takes
place: points are assigned to their closest cluster centers, cluster
centers are updated to be the centroid of their associated points,
clusters with very few points are deleted, large clusters satisfying some
heuristics are split, and small clusters satisfying other heuristics are
merged. The algorithm continues until maximum number of iterations are
performed. Here we go over the algorithm in more detail. See the related
publications below for further information. [[BR]]
}}}

'''Clustering in GRASS''' [[BR]]

The current clustering implementation in GRASS GIS' module
[http://grass.osgeo.org/grass70/manuals/i.cluster.html i.cluster] is also
another modification of the k-means clustering algorith. One difference,
from an end-user point-of-view, is that i.cluster exptects at least two
input raster maps (variables) in order to run.

''' Differences for end-users'''

The ISODATA algorithm, contrary to i.cluster, can run on a single raster
map (variable) which makes it an easy and quick alternative for pixel-
based unsupervised image classification tasks. [[BR]]

This makes it, be it a good or bad choice, attractive for many
(commercial) remote sensing projects.

'''Proprietary Implementations''' [[BR]]

Most proprietary & commercial GIS & Remote Sensing packages have
integrated an option for the ISODATA unsupervised (and pixel-based)
classification algorithm. Some sources below: [[BR]]

* Iso Cluster Unsupervised Classification (Spatial Analyst) [2] in ArcGIS
[[BR]]
* ISODATA Clustering [3] in ERDAS [[BR]]
* Classification Tutorial (**PDF**) [4] for ENVI [[BR]]
* Technical Specifications, Geomatica Core (**PDF** [5] about Geomatica
[[BR]]
* Idrisi Selva Technical Specifications (**PDF**) [6] about Idrisi Selva
[[BR]]

'''FOSS Implementations'''[[BR]]

Some FOSS implementations of the ISODATA clustering/classification
algorithm include: [[BR]]

* the "Fast Implementation of the ISODATA Clustering Algorithm" by Nargess
Memarsadeghi, David M. Mount, Nathan S. Netanyahu, and Jacqueline Le
Moigne [1] [[BR]] which has found its way in
[http://opticks.org/confluence/display/~himsin/ISODATA+Plugin+Tutorial
Opticks] [7]
* the biOps package for R [8] [[BR]]

However, those are not easy alternatives for a GRASS GIS user.

'''References'''[[BR]]

[1] http://www.cs.umd.edu/~mount/Projects/ISODATA/ [[BR]]
[2]
http://help.arcgis.com/en/arcgisdesktop/10.0/help/index.html#//009z000000pn000000.htm
[[BR]]
[3]
http://geospatial.intergraph.com/fieldguide/wwhelp/wwhimpl/js/html/wwhelp.htm
[[BR]]
[4]
http://www.exelisvis.com/portals/0/tutorials/envi/ClassificationTutorial.pdf
[[BR]]
[5] http://www.pcigeomatics.com/products/pdfs/Geomatica_Core_1032.pdf
[[BR]]
[6] http://www.clarklabs.org/products/upload/IDRISI-Selva-GIS-Image-
Processing-Specifications.pdf [[BR]]
[7] http://cran.r-project.org/web/packages/biOps/index.html [[BR]]
[8] http://www.opticks.org [[BR]]

--
Ticket URL: <http://trac.osgeo.org/grass/ticket/1908&gt;
GRASS GIS <http://grass.osgeo.org>

#1908: Request for a native GRASS implementation of the ISODATA clustering
algorithm
-----------------------------------------------------+----------------------
Reporter: nikosa | Owner: grass-dev@…
     Type: enhancement | Status: new
Priority: minor | Milestone: 7.0.0
Component: Imagery | Version: unspecified
Keywords: clustering, k-means, i.cluster, isodata | Platform: Unspecified
      Cpu: Unspecified |
-----------------------------------------------------+----------------------

Comment(by benducke):

GPL'd implementations in C++ can be found here:
http://www.cs.umd.edu/~mount/Projects/ISODATA/

--
Ticket URL: <http://trac.osgeo.org/grass/ticket/1908#comment:1&gt;
GRASS GIS <http://grass.osgeo.org>

#1908: Request for a native GRASS implementation of the ISODATA clustering
algorithm
-----------------------------------------------------+----------------------
Reporter: nikosa | Owner: grass-dev@…
     Type: enhancement | Status: new
Priority: minor | Milestone: 7.0.0
Component: Imagery | Version: unspecified
Keywords: clustering, k-means, i.cluster, isodata | Platform: Unspecified
      Cpu: Unspecified |
-----------------------------------------------------+----------------------

Comment(by nikosa):

Link to "historical" i.cluster material (kindly pointed to by Markus N)

http://lists.osgeo.org/pipermail/grass-user/1997-December/000912.html

--
Ticket URL: <http://trac.osgeo.org/grass/ticket/1908#comment:2&gt;
GRASS GIS <http://grass.osgeo.org>