3

matlabと比較して、EBImageパッケージを使用してRで大きな画像(〜4MB)をロードするのがはるかに遅いのはなぜですか?とにかくこれの周りにありますか?

注: EBImageは何らかの形でRのimagemagickのラッパーであると確信しています

Rで:

system.time(im <- readImage("~/Desktop/image.jpg"))
Elapsed time is 10.935 seconds. 

Matlabで:

tic; 
im = imread('~/Desktop/image.jpg');
toc;
Elapsed time is 0.555381 seconds.

ラスターパッケージを使用する

system.time(im <- brick('image.jpg'))

0.264秒かかります

値を取得しようとするとき

system.time(vals <- getValues(im))

8.617秒かかるので、チャンネルを抽出する必要があるので、正方形に戻ります


編集2

jpeg私は、機能を備えreadJPEG、私がそこで試した何よりも優れたパフォーマンスを発揮するパッケージを使用することになりました。

 system.time(x<-readJPEG('~/Desktop/image.jpg'))

4MBの画像の場合は約1.431秒かかり、n x m x 3マトリックスの各レイヤーがカラーチャネルであるマトリックスを返します。

4

1 に答える 1

1

なぜ遅いのかわかりませんが、raster代わりに使ってみてください。で読み取った結果をプロットできますimage

require( raster )
im <- brick("~/Desktop/image.jpg")
image( im , y = 1 )

# Or for a rgb coloured image...
plotRGB( im , r=1 , g = 2 , b = 3 )

# To extract values of each layer
vals <- getValues( im )

# A quicker way to get the values would be to use the as.matrix method for rasters
vals <- as.matrix( im )

Raster は地理参照に関する警告を表示する場合がありますが、動作するはずであり、非常に高速です。

于 2013-03-14T16:56:45.757 に答える