[R-sig-Geo] clustering multi band images
Agustin Lobo
Agustin.Lobo at ija.csic.es
Thu Jun 12 13:49:04 CEST 2008
Laura Poggio escribió:
.../...
>
> 2008/6/12 Agustin Lobo <Agustin.Lobo at ija.csic.es
> <mailto:Agustin.Lobo at ija.csic.es>>:
>
> May I just ask you if you have easily available an example of code to
> transform the image in a multivariate table pixels x bands? This would
> be helpful to avoid many trial and errors (especially the second one).
> Sorry for that but at my institution I am the only one dealing with R...
>
> Thank you again
>
> Laura
You already did it in:
kl <- kmeans(as(img, "data.frame"), 5)
Perhaps you want to do it in 2 steps:
imgtabla <- as(img, "data.frame")
kl <- kmeans(imgtabla, 5)
You can look at the first rows of imgtabla with
imgtabla[1:5,]
or
head(imgtabla)
and then
dim(imgtabla)
summary(imgtabla)
If img were your complete Landsat image, the same steps
would yield an imgtabla with 262144 x 6 (as I assume you are not
using the thermal band). In that case, you probably want
to run PCA and use only the first 3 PCs for classification, as they
typically
account for >95% of the total variance and you cam always apply
the inverse transform to the centroids to recover the original
metric.
As a matter of fact, I think it's more practical
here to convert imgtabla from data.frame to matrix, as all values are
numerical here.
Agus
>
>
>
> Agus
>
>
> 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>
> <mailto: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>
> <mailto: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>
> <mailto: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 <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