2013-03-14 3 views
3

왜 EBImage 패키지를 사용하여 R 이미지의 큰 이미지 (~ 4MB)를로드하는 속도가 matlab과 비교할 때 느립니까? 이 주변에 어쨌든 있습니까? 매트랩느린 이미지로드 R EBImage 사용

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

:

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

내가 EBImage 어떤 식 으로든 R에서 R

에서 ImageMagick를위한 래퍼입니다 확신 : 주

래스터 패키지를 사용하는

내가 채널


를 추출해야하기 때문에

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

는 8.617 초 그래서 난 다시 원점에있어 소요되는 값을 얻을하려고 할 때

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

는 0.264 초

소요

편집 2

나는 readJPEG 기능을 가지고있는 패키지 jpeg을 사용하여 끝내 었으며, 내가 시도한 것보다 뛰어나다.

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

는 4 메가 ​​이미지에 대한 1.431 초를 취득 해 색상 채널을있는 행렬의 각 계층과 함께 n x m x 3 행렬을 반환

답변

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) 

래스터와 함께에서 읽기의 결과를 플롯 할 수 있습니다,하지만 작동해야하며 무척 빠른해야합니다.

+0

와우! 장관. RasterLayer 객체에서 이미지를 3 차원 행렬로 얻으려면 어떻게해야합니까? – by0

+1

'getValues ​​(im)'을 사용하면 각 레이어를'ncol (im) * nrow (im)'과 같은 행 개수로 2D 행렬의 값 열로 반환합니다. 이 칼럼을 가지고 필요에 따라 희미해질 수 있습니다. –

+0

이 질문의 범위 밖일지도 모르지만 이미지를 표시 할 때 이미지 (im)를 사용하면 주황색 빨간색으로 보입니다. 이미지를 그대로 표시하도록 할 여지가 있습니까? – by0