使用R中的高斯滤波提取半径内像素值的标准偏差和平均值
Extract standard deviation and mean of pixel values within a radius using Gaussian filtering in R
我有一个类似下图的矩阵,是从光栅文件中获得的:
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" 的高斯滤波器,它能够估计该半径内所考虑像素值的标准偏差和平均值。作为输出,我想获得 "mean" 的矩阵(通过使用过滤半径为每个像素估计)和 "standard deviation" 的矩阵。
你对如何在 R 中做到这一点有什么建议吗?
给定矩阵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)
我有一个类似下图的矩阵,是从光栅文件中获得的:
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" 的高斯滤波器,它能够估计该半径内所考虑像素值的标准偏差和平均值。作为输出,我想获得 "mean" 的矩阵(通过使用过滤半径为每个像素估计)和 "standard deviation" 的矩阵。
你对如何在 R 中做到这一点有什么建议吗?
给定矩阵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)