使用EBImage加载R的慢图像

时间:2013-03-14 16:49:37

标签: image r matlab image-processing imagemagick

与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矩阵,矩阵的每一层都是一个颜色通道

1 个答案:

答案 0 :(得分: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可能会给你一个关于地理配准的警告,但它应该可以工作,而且应该非常快。