Hapus gumpalan piksel dalam R


8

Saya ingin menghapus piksel terisolasi (atau gumpalan piksel <9) dari gambar raster saya.

library(raster)
# create some raster data
r <- raster(ncols=12, nrows=12)
set.seed(0)
r[] <- round(runif(ncell(r))*0.7 )
rc <- clump(r) 

Sebelum menghapus gumpalan piksel <9

masukkan deskripsi gambar di sini

Setelah menghapus gumpalan piksel <9 :

masukkan deskripsi gambar di sini

Di Erdas, ada alat Saringan untuk melakukan ini, tetapi bagaimana cara menggantinya di R?


1
Lihatlah "Menerapkan saringan raster dengan menggumpal" dalam Pelajaran 7: Analisis Raster Tingkat Lanjut
gen

Hebat, terima kasih banyak, saya tidak tahu situs ini! :)
maycca

Jawaban:


4
#reproducible example
r <- raster(ncols=12, nrows=12)
set.seed(0)
r[] <- round(runif(ncell(r))*0.7 )
rc <- clump(r) 

#extract IDs of clumps according to some criteria
clump9 = data.frame(freq(rc))
clump9 = clump9[ ! clump9$count < 9, ] #remove clump observations with frequency smaller than 9
clump9 = as.vector(clump9$value) # record IDs from clumps which met the criteria in previous step

rc[rc != clump9[1] & rc != clump9[2]] = NA #replace cells with IDs which do not belong to the group of interest 

plot(rc,col="black",legend=FALSE)

masukkan deskripsi gambar di sini

Perhatikan bahwa dari clumpfungsinya, ID rumpun "4" memiliki 2 sel di sisi kanan yang terhubung dengan sel di sebelah kiri.

head(rc)
    1  2  3  4  5  6  7  8  9 10 11 12
1  NA NA NA NA  2 NA  2  2 NA NA NA NA
2  NA NA NA  2 NA  2  2 NA  2  2 NA NA
3  NA NA NA NA NA  2 NA NA NA NA NA NA
4  NA  4 NA  2 NA  2 NA NA NA NA NA NA
5  NA  4 NA NA  2 NA NA NA NA NA NA NA
6  NA  4 NA NA NA NA NA NA NA NA NA NA
7   4 NA NA NA NA NA NA NA NA NA NA NA
8  NA  4 NA NA NA NA NA NA NA NA  4  4
9   4 NA NA NA NA NA NA NA NA NA NA NA
10 NA  4 NA NA NA NA NA NA NA NA NA NA

1
Terima kasih Andre, saya sudah menyadarinya dan saya telah menggunakan extended tool r2 <-extend (r, c (1,1))
maycca

6

Terima kasih kepada @gene dan https://geoscripting-wur.github.io/AdvancedRasterAnalysis/ Sekarang saya dapat menjawab pertanyaan saya (disalin dan dimodifikasi):

perpustakaan (raster)

# create some raster data
r <- raster(ncols=12, nrows=12)
set.seed(0)
r[] <- round(runif(ncell(r))*0.7 )
r[r==0]<-NA

# extend r with a number of rows and culomns (at each side)
# to isolate clumps adjacents to plot axes 
r2<-extend(r, c(1,1))
rc <- clump(r2, directions = 8) 

# get frequency table    
f<-freq(rc)
# save frequency table as data frame
f<-as.data.frame(f)

# which rows of the data.frame are only represented by clumps under 9pixels?
str(which(f$count <= 9))
# which values do these correspond to?
str(f$value[which(f$count <= 9)])
# put these into a vector of clump ID's to be removed
excludeID <- f$value[which(f$count <= 9)]

# make a new raster to be sieved
formaskSieve <- rc
# assign NA to all clumps whose IDs are found in excludeID
formaskSieve[rc %in% excludeID] <- NA

plot(formaskSieve)

dan hasil yang diinginkan (dengan satu baris dan satu kolom NA ditambahkan di setiap sisi raster).

masukkan deskripsi gambar di sini


Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.