2012-03-29 8 views
2

2次元行列ではなく、ベクトルだけでなく、Rにスライディングウィンドウ法があるかどうか知りますか?行列に格納された画像にメディアン関数を適用する必要がありますSliding window in R

+0

[C圧延メジアンアルゴリズム]の可能な重複(http://stackoverflow.com/questions/1309263/rolling-median-algorithm-in-c) –

答えて

7

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") 

enter image description here

+0

focalFilterあり、さあなたはそれがラスターであると確信していますか? – mdsumner

+0

@mdsumner - これは、**ラスター**パッケージから削除されたように見えます(「?focal」の**注:**セクションで説明されています)。代わりに、現在の 'focal()'は古い 'focal()'と 'focalFilter()'がしたことすべてを行うことができます。これは、 'w ='引数に重みの行列を取ることによって実現されています。これは、 'focalFilter()'がやっていたものです。要するに、 'filter()'はもう必要です。それに応じて投稿を修正します。それを指摘してくれてありがとう。 –

+0

私はそれを試して、それは動作します。悲しいことに、それは、しかし、それが終わる3と10の周りにウィンドウ幅と1280×1024の画像の上にハングアップするが、それは私のコンピュータ:(上で少なくとも5分かかり –