Rのピクセルの塊を削除する


8

ラスターイメージから孤立したピクセル(または9未満のピクセルの塊)を削除したいと思います。

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) 

ピクセルの塊を削除する前<9

ここに画像の説明を入力してください

ピクセルの集まりを削除した後<9

ここに画像の説明を入力してください

Erdasには、これを行うSieveツールがありますが、Rでそれを置き換える方法は?



すばらしい、ありがとう、私はこのサイトを知らない!:)
maycca 2015年

回答:


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)

ここに画像の説明を入力してください

clump関数から、クランプID「4」の右側に2つのセルがあり、左側のセルに接続していることに注意してください。

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
Andreに感謝します。すでに理解しており、拡張ツールr2 <-extend(r、c(1,1))を使用しました
Maycca

6

@geneとhttps://geoscripting-wur.github.io/AdvancedRasterAnalysis/のおかげで、質問に答えることができます(コピーして変更):

ライブラリ(ラスター)

# 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)

必要な結果(ラスターの各サイドに1行と1列のNAを追加)。

ここに画像の説明を入力してください


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.