[R-sig-Geo] clustering multi band images

Agustin Lobo Agustin.Lobo at ija.csic.es
Thu Jun 12 10:55:40 CEST 2008


Laura,

Laura Poggio escribió:
> Thank you very much for your detailed answer that made me understand a 
> lot, and also it pointed out what I was thinking: R does not use the 
> spatial information for classification.

Hep! this is not a problem of R, don't blame it for that. R is wonderful
for multi-variate classification. This is a problem of the whole 
approach of applying multi-variate classification to multi-spectral 
imagery. And this does not mean that the approach is wrong or useless,
it's just a warning, a fact that the analyst must keep in mind.

Agus


> The image (for the moment) is rather small, as it is a sample of 512x512 
> pixels. I have to compare the effect of a segmentation method over raw 
> data for various unsupervised techniques.
> My idea was to do the classification in R, because it handles many more 
> methods then GIS/RS software I have available.
> 
> I will investigate some of the points raised and in case I will come 
> back with more clear ideas and questions.
> 
> Thank you very much to everybody for the support.
> 
> Laura
> 
> 
> 
> 2008/6/12 Agustin Lobo <Agustin.Lobo at ija.csic.es 
> <mailto:Agustin.Lobo at ija.csic.es>>:
> 
>     If your images are large (and images typically are large because
>     pixel size
>     has to be small compared to the extent of the image for the image to
>     be of acceptable quality for our vision system), I do not advice you
>     to get them into R for processing as R has severe memory limits
>     and many classification techniques are not precisely memory-efficient
>     (but see clara() in package cluster, actually read
>     http://cran.r-project.org/web/views/Cluster.html).
> 
>     I think that you should sample your image in a RS/GIS environment
>     making sure you cover all
>     the radiometric space and import only a table pixels x bands into R,
>     the actual nb. of pixels depending on your HW/SW configuration (but
>     10000 would be a good start). Then use the numerous R classification
>     tools to define the centroids and once you have them use again your
>     RS/GIS program to actually assign each pixel in the image to a
>     centroid according to a given rule (i.e. maximum likelihood). There
>     might be
>     ways of writing an efficient assignation step within R itself also,
>     I think that mclust package does it.
> 
>     Another way of reducing the number of individuals to classify is
>     performing a segmentation of the image first and then classify segments
>     instead of pixels (i.e.
>     # Lobo, A. 1997.  Image segmentation and discriminant analysis for
>     the identification of land cover units in Ecology. IEEE Transactions
>     on Geoscience and Remote Sensing, 35(5): 1- 11.
>     http://wija.ija.csic.es/gt/obster/ABSTRACTS/alobo_ieee97.pdf
>     perhaps other articles in
>     http://wija.ija.csic.es/gt/obster/alobo_publis.html
>     might be of help)
> 
>     In any case, note that img in your code should be converted into
>     a multivariate table pixels x bands for most classification
>     functions in R to work. Note that this fact makes obvious
>     that classification approaches to image processing do not make
>     use of the spatial information of the image, which is actually
>     a fundamental part of the information of any image.
> 
>     Agus
> 
>     Laura Poggio escribió:
> 
>         Dear list,
>         I am trying to do some clustering on images. And I have two main
>         problems:
> 
>         1) Clustering multiband images.
>         I managed to be successful with a single band image, but when
>         trying to
>         apply to a 3 band I get the following warning message:
>         In as.matrix.SpatialGridDataFrame(x) :
>          as.matrix.SpatialPixelsDataFrame uses first column;
>          pass subset or [] for other columns
> 
> 
>         2) saving clustering results as grid or image.
>         I get a vector of clusters, but without both coordinates. How it
>         is possible
>         to transform it in a grid?
> 
>         Here the code I use to read the image itself and to do the
>         clustering:
> 
>         library(rgdal)
>         fld <- system.file("E:/data/IMG/fr/", package="rgdal")
>         img <- readGDAL("123_rawR.tif")
> 
>         kl <- kmeans(img, 5)
> 
>         I am quite new to image processing, especially within R, and any
>         help is
>         greatly appreciated.
> 
>         Thank you in advance
> 
>         LP
> 
>                [[alternative HTML version deleted]]
> 
>         _______________________________________________
>         R-sig-Geo mailing list
>         R-sig-Geo at stat.math.ethz.ch <mailto:R-sig-Geo at stat.math.ethz.ch>
>         https://stat.ethz.ch/mailman/listinfo/r-sig-geo
> 
> 
>     -- 
>     Dr. Agustin Lobo
>     Institut de Ciencies de la Terra "Jaume Almera" (CSIC)
>     LLuis Sole Sabaris s/n
>     08028 Barcelona
>     Spain
>     Tel. 34 934095410
>     Fax. 34 934110012
>     email: Agustin.Lobo at ija.csic.es <mailto:Agustin.Lobo at ija.csic.es>
>     http://www.ija.csic.es/gt/obster
> 
> 

-- 
Dr. Agustin Lobo
Institut de Ciencies de la Terra "Jaume Almera" (CSIC)
LLuis Sole Sabaris s/n
08028 Barcelona
Spain
Tel. 34 934095410
Fax. 34 934110012
email: Agustin.Lobo at ija.csic.es
http://www.ija.csic.es/gt/obster




More information about the R-sig-Geo mailing list