使用R中的高斯滤波提取半径内的像素值的标准偏差和平均值

时间:2018-02-25 13:02:46

标签: r gaussian gaussianblur

我有一个类似下面的矩阵,从光栅文件中获取:

0   0   0   0   0   0   0   4   254 252
0   0   0   0   0   0   0   0   255 246
0   0   0   0   0   0   0   1   255 246
0   0   0   0   0   4   32  254 255 246
0   0   0   0   8   255 255 255 255 246
0   0   0   0   0   11 214 254 255 246
0   0   0   0   0   0   0   1   255 246
0   0   0   0   0   0   0   1   255 246
1   0   0   0   0   0   0   2   255 253
247 247 247 247 247 247 247 247 249 251

我想使用具有无线电“x”的高斯滤波器,该高斯滤波器能够估计该半径内所考虑的像素值的标准偏差和平均值。作为输出,我想获得“均值”的矩阵(通过使用滤波半径估计每个像素)和“标准偏差”的矩阵。

你对如何在R中做这个有什么建议吗?

1 个答案:

答案 0 :(得分:1)

给定矩阵m

m <- matrix(c(0,0,0,0,0,0,0,4,254,252,0,0,0,0,0,0,0,0,255,246,0,0,0,0,0,0,0,1,255,246,0,0,0,0,0,4,32,254,255,246,0,0,0,0,8,255,255,255,255,246,0,0,0,0,0,11,214,254,255,246,0,0,0,0,0,0,0,1,255,246,0,0,0,0,0,0,0,1,255,246,1,0,0,0,0,0,0,2,255,253,247,247,247,247,247,247,247,247,249,251), ncol=10, byrow=TRUE)

您可以像这样计算(高斯)加权平均值

library(raster)
r <- raster(m)

# Gaussian filter
gf <- focalWeight(r, .2, "Gauss")
rg <- focal(r, w=gf, na.rm=TRUE, pad=TRUE)

# plot(rg)
# as.matrix(rg)

我不知道如何计算加权标准偏差。

对于标准焦点均值和sd

 fm <- focal(r, w=matrix(1,3,3), fun=mean, pad=TRUE, na.rm=TRUE) 
 fd <- focal(r, w=matrix(1,3,3), fun=sd, pad=TRUE, na.rm=TRUE)