The function focal() does these types of operations. 
Raster algebra and boolean operations do the rest.

library(raster)

va <- c(0,0,0,0,0,0,0,0,0,0,0,1,0,0,
0,1,0,0,0,0,
        0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
        0,0,1,1,1,1,1,1,1,1,1,0,1,0,1,1,1,1,1,0,
        0,0,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,1,
        0,1,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0)
r <- raster(ncols=10, nrows=10)
r <- setValues(r, va)
plot(r, col=c("blue","red"), main="before filter")
r2 <- focal(r, fun=sum, ngb=c(3,3))
r3 <- -1 * (r2<2 & r == 1) #isolated 1 cells
r4 <- r2>7 & r == 0 #isolated 0 cells

rf <- r + r3 + r4

x11()
plot(rf, col=c("blue","red"), main="after filter")

Cheers, Jacob.

--- On Tue, 4/13/10, gianni lavaredo <gianni.lavaredo@gmail.com> wrote:

From: gianni lavaredo <gianni.lavaredo@gmail.com>
Subject: [R-sig-Geo] Suggestion to build a Special Filter for a Raster classification
To: r-sig-geo@stat.math.ethz.ch
Date: Tuesday, April 13, 2010, 4:57 PM

Dear Researchers,

Sorry if I use your time with this email, but I wish to ask a suggestion to
build-up a special filter in a forest/no forest classification. In the end
of my methodology I have a raster image with Forest (pixel with 0 value) and
No forest area (pixel with 1 value). But when plot the raster I can see some
noise of my methodology (single isolate pixels with "0" value and single
isolate pixels with "1". PS: the resolution of my map is 1x1 m and It's not
possible a forest gap with area <= of 1 m square and not possible a forest
with the same area in a Gap). I wish to create a filter to eliminate these
pixel:

example
"1" value pixel around 8 "0" value pixels = Became "0"
"0" value pixel around 8 "1" value pixels = Became "1"

you could see with this example:

library(raster)

va <- c(0,0,0,0,0,0,0,0,0,0,0,1,0,0,
0,1,0,0,0,0,
        0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
        0,0,1,1,1,1,1,1,1,1,1,0,1,0,1,1,1,1,1,0,
        0,0,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,1,
        0,1,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0)

r <- raster(ncols=10, nrows=10)
r <- setValues(r, va)
plot(r,  maxpixels = 1000, col=c("blue","red"), main="before filter")

va2 <- c(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,
        0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
        0,0,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,0,
        0,0,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,1,
        0,1,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0)

rfinal <- raster(ncols=10, nrows=10)
rfinal  <- setValues(r, va2)
plot(rfinal,  maxpixels = 1000, col=c("blue","red"), main="after filter")


Thanks for attention
Gianni

    [[alternative HTML version deleted]]

_______________________________________________
R-sig-Geo mailing list
R-sig-Geo@stat.math.ethz.ch
https://stat.ethz.ch/mailman/listinfo/r-sig-geo



      
	[[alternative HTML version deleted]]

