Loại bỏ các cụm pixel trong R


8

Tôi muốn xóa các pixel bị cô lập (hoặc cụm pixel <9) khỏi hình ảnh raster của tôi.

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) 

Trước khi loại bỏ các cụm pixel <9

nhập mô tả hình ảnh ở đây

Sau khi loại bỏ các cụm pixel <9 :

nhập mô tả hình ảnh ở đây

Trong Erdas, có công cụ Sàng để làm việc này, nhưng làm thế nào để thay thế nó trong R?


1
Hãy xem "Áp dụng rây raster bằng cách vón cục" trong Bài 7: Phân tích raster nâng cao
gen

Tuyệt vời, cảm ơn bạn rất nhiều, tôi din Trangt biết trang web này! :)
maycca

Câu trả lời:


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)

nhập mô tả hình ảnh ở đây

Lưu ý rằng từ clumpchức năng, ID cụm "4" có 2 ô ở bên phải kết nối với các ô ở bên trái.

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
Cảm ơn Andre, tôi đã nhận ra điều đó và tôi đã sử dụng công cụ mở rộng r2 <-extend (r, c (1,1))
maycca

6

Cảm ơn @gene và https://geoscripting-wur.github.io/AdvifiedRasterAnalysis/ Bây giờ tôi có thể trả lời câu hỏi của mình (sao chép và sửa đổi):

thư viện (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)

kết quả mong muốn (với một hàng và một cột NA được thêm vào mỗi bên của raster).

nhập mô tả hình ảnh ở đây


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.