与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
矩阵,矩阵的每一层都是一个颜色通道
答案 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可能会给你一个关于地理配准的警告,但它应该可以工作,而且应该非常快。