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 回答