R中的滑动窗口函数
有人知道R中是否有滑动窗口方法用于二维矩阵而不仅仅是向量。我需要将中值函数应用于存储在矩阵中的图像优秀的光栅软件包中的函数R中的滑动窗口函数,r,median,image-processing,R,Median,Image Processing,有人知道R中是否有滑动窗口方法用于二维矩阵而不仅仅是向量。我需要将中值函数应用于存储在矩阵中的图像优秀的光栅软件包中的函数focal()。除了下面的示例中所示的参数之外,它还接受了几个参数,如果需要的话,可以用来指定非矩形滑动窗口 library(raster) ## Create some example data m <- matrix(1, ncol=10, nrow=10) diag(m) <- 2 r <- as(m, "RasterLayer") # Coerce
focal()
。除了下面的示例中所示的参数之外,它还接受了几个参数,如果需要的话,可以用来指定非矩形滑动窗口
library(raster)
## Create some example data
m <- matrix(1, ncol=10, nrow=10)
diag(m) <- 2
r <- as(m, "RasterLayer") # Coerce matrix to RasterLayer object
## Apply a function that returns a single value when passed values of cells
## in a 3-by-3 window surrounding each focal cell
rmean <- focal(r, w=matrix(1/9, ncol=3, nrow=3), fun=mean)
rmedian <- focal(r, w=matrix(1/9, ncol=3, nrow=3), fun=median)
## Plot the results to confirm that this behaves as you'd expect
par(mfcol=c(1,3))
plot(r)
plot(rmean)
plot(rmedian)
## Coerce results back to a matrix, if you so desire
mmean <- as(rmean, "matrix")
库(光栅)
##创建一些示例数据
m我知道这是一个老问题,但在解决类似问题时,我已经多次遇到这个问题。虽然光栅包中的焦点函数非常简单方便,但我发现在处理大型光栅时,它的速度非常慢。有很多方法可以尝试解决这个问题,但我发现的一种方法是使用系统命令来“whitebox工具”,这是一组命令行驱动的光栅分析工具。它的主要优点是并行执行这些工具,并真正利用了多核CPU。我知道R有许多集群函数和包(我用于randomforest模型光栅预测),但我一直在为R中的许多并行计算实现而挣扎。Whitebox工具具有用于均值、最大值、多数值、中值等的离散函数。。。过滤器(更不用说地形处理工具的负载了,这对于以DEM为中心的分析非常有用)
我如何使用白盒工具在大型分类土地覆盖光栅(nrow=3793,ncol=6789,ncell=25750677)的R in中实现模式或多数过滤器(3x3窗口)的一些示例代码:
system('C:/WBT2/target/release/whitebox_tools --wd="D:/Temp" ^
--run=MajorityFilter -v --input="input_rast.tif" ^
--output="maj_filt_rast.tif" --filterx=3 --filtery=3',
wait = T, timeout=0, show.output.on.console = T)
执行上述代码的时间不到3.5秒,同时使用“modal”的等效光栅包“focal”功能(也来自光栅包)需要5分钟完成以下代码:
maj_filt_rast<- focal(input_rast, fun=modal, w=matrix(1,nrow=3,ncol=3))
maj_filt\u rast focalFilter的位置可能是重复的,您确定它在光栅中吗?@mdsumner--Oops,看起来它现在已经从光栅包中消失了(如?focal
的注释部分所述)。相反,当前的focal()
可以完成旧的focal()
和focalFilter()所做的一切。这是通过允许w=
参数交替地获取权重矩阵来实现的,这就是focalFilter()
过去所做的。简而言之,filter()
是所有需要的,我将相应地修改这篇文章。谢谢你指出这一点。我试过了,效果很好。不幸的是,它挂在1280x1024个图像上,窗口宽度约为10。然而,3完成了,但在我的计算机上至少需要5分钟:(太糟糕了。我很想知道是否有更快的替代方案。不过,我不太抱希望,因为这似乎是一种固有的耗时计算类型。(FWIW,ma3x3.matrix()
来自limma软件包,比focal()慢一点)
,并且只允许3乘3移动窗口。)