【发布时间】:2013-04-13 02:38:21
【问题描述】:
如果我有一个二维矩阵,并且我想在给定一些过滤矩阵的情况下应用某种过滤器(例如扩张、侵蚀、索贝尔边缘检测):
f = matrix(c(0,1,0,
1,1,1,
0,1,0), 3)
将它应用于矩阵的最有效方法是什么。
循环遍历每个像素似乎效率太低:
for(i in 2:nrow(mat)){
for(j in 2:ncol(mat)){
//Apply filter to pixel i,j
}
}
【问题讨论】:
-
如果没有适用于每个像素的特定函数,这是无法回答的。
-
也许你可以从
SpatialVx包中的kernel2dsmooth获得灵感... -
raster 包中的
focal()支持非常通用的操作,您可以在其中为每个像元计算其邻域中的值的函数。 Here is one example 和 here is another. -
@JoshO'Brien 在您的第一个链接中读取 cmets,看起来
focal是从raster移动的,而且效率低下。也许我错过了什么。 -
@agstudy -- 不,您误读了第一条评论。回复:效率,这总是相对的。这些二维邻域操作通常相对较慢(我相信每个单元的 b/c 他们必须访问几个不连续的内存块),并且无法从 OP 的问题中判断他们需要多快是。另外,你知道什么更快(在 R 中)?
标签: r image-processing matrix filter filtering