我@馬丁同意,這是一個有點棘手。您不僅沒有專用的NoData值,而且圖像也有點髒污。
不過,我想我找到了一種方法這是一個有點比clump
更好,它使用空間域分離的區域:
首先,我得到的像素鄰的焦點值:
#make copy
r2 <- r
# focal values
fv <- getValuesFocal(r2,ngb = c(3,3))
然後我首先排除所有像素,其鄰域值大於242.8。這純粹是試驗和錯誤,但它會給出好的結果。
ix <- rowMeans(fv,na.rm = T) > 242.8
r2[ix] <- NA
你實際上已經認爲這可以接受。唯一的問題是,價值區周圍有一個小的邊界,應該是NA。
所以不知何故,我需要擺脫剩餘NA像素。我試着用迭代排除來做這件事。對於每次迭代,我看看是否有像素仍然有NA值,最大值低於某個閾值。再次,有很多玩家參與其中,我想你可以取得比這更好的結果,但我想這是一條可行的路。
while (TRUE){
fv <- getValuesFocal(r2,ngb = c(3,3))
ix <- apply(fv,1,function(x) max(x,na.rm=T)) > 243 & rowSums(is.na(fv)) > 0
if (any(ix)){
r2[ix] <- NA
} else {
break
}
}
幾次迭代後,我得到這個:
顯然有一些已經消失的像素不應該是,也許它可以用多一點擺弄周圍做。
另一個有趣的想法是看所有三個渠道。如果您使用brick
加載圖像,則可以獲取RGB通道。我已經嘗試了一些像max,mean,mode,sd等,但無濟於事。
來源
2017-06-06 18:55:35
Val
謝謝 - 我也認爲'叢'是最好的方法。從技術上講,所需的輸出在這裏是'rc_reclass = clump(is.na(r))',然後是'rc_reclass [rc_reclass> 1] = NA'來選擇外部的'NA',但是因此你提供了一個合適的解決方案。謝謝! – ztl