Hi Benny
I once had the same problem and couldn't find a solution, so I coded a workaround. Adjusted to your example, this will look like:
library(rgeos)
library(raster)
library(maptools)
im=brick("P1020393.JPG")
extract=(im[[1]]>50)&(im[[2]]>180)&(im[[3]]>220)
poly_dissolve=rasterToPolygons(extract,fun=function(x){x==1},dissolve=T)
len<-length(poly_dissolve at polygons[[1]]@Polygons)
pol<-poly_dissolve
pol at plotOrder<-1:len
pol at data<-data.frame(1:len)
for(i in 1:len){
pol at polygons[[i]]<-Polygons(list(poly_dissolve at polygons[[1]]@Polygons[[i]]),i)
}
plot(pol,col=rainbow(len))
May not be the most elegant way, but it solved my problem.
HTH,
Rafi
On 25.05.2012, at 19:13, BennyB wrote:
Dear Geo List, Before I ask my question let me apologize for my lack of knowledge about spatial information processing in R, being merely a field biologist.. What I am trying to achieve is the quantification of a bunch of marks (rodent scent marks) in a picture (jpeg - http://r-sig-geo.2731867.n2.nabble.com/file/n7576826/P1020393.JPG P1020393.JPG ). This means I need to know how many marks there are, and what each mark's area is. I manage to import the image and to extract only the marks using an "extract by attributes" of the three RGB band values of the image. This gives me a raster layer with values 1 for the marks I want, and values 0 for everything else. I then use the rasterToPolygons function, which can convert the raster file to a Spatial Polygon Dataframe. My problem now is the following: The rasterToPolygons function gives me either one polygon for each pixel value in the raster image (dissolve=FALSE), or one multipolygon that contains all the marks (dissolve=TRUE). I then do not manage to either aggregate the many polygons into one polygon for each mark, or to separate the multipolygon into many polygons that each represent a mark. For the former I have tried using the unionSpatialPolygons function, but this again gives me only one big multipolygon instead of one polygon for each mark. I have been looking like crazy on the internet and in manuals, but being having a big lack of knowledge of the precise terminology of GIS processes, this has been proving fruitless. Probably it is something very trivial I am missing, so if anybody can point me in the right direction I would be extremely grateful! Many thanks, Benny Below you can see the script I have been using, and attached you can find the original jpg image of the marks. ---------------- library(raster);library(maptools) im=brick("P1020393.JPG") extract=(im[[1]]>50)&(im[[2]]>180)&(im[[3]]>220) # using the dissolve=T option poly_dissolve=rasterToPolygons(extract,fun=function(x){x==1},dissolve=T) # this gives me one big multipolygon and not one polygon for each mark # using the dissolve=F option poly_no_dissolve=rasterToPolygons(extract,fun=function(x){x==1},dissolve=F) # this gives me one polygon for each pixel having value=1 # I then try to create aggregate those polygons, which again gives me only one multipolygon uni_poly=unionSpatialPolygons(poly_no_dissolve,cut(pol_no_dissolve[,1], quantile(pol_no_dissolve[,1]), include.lowest=TRUE))) ----------------- http://r-sig-geo.2731867.n2.nabble.com/file/n7576826/P1020393.JPG P1020393.JPG -- View this message in context: http://r-sig-geo.2731867.n2.nabble.com/extract-by-attributes-from-raster-image-to-polygons-tp7576826.html Sent from the R-sig-geo mailing list archive at Nabble.com.
_______________________________________________ R-sig-Geo mailing list R-sig-Geo at r-project.org https://stat.ethz.ch/mailman/listinfo/r-sig-geo
-- Rafael W?est Swiss Federal Research Institute WSL Z?rcherstrasse 111 8903 Birmensdorf Switzerland +41 44 7392126 rafael.wueest at wsl.ch http://www.wsl.ch/info/mitarbeitende/wueest