【发布时间】:2016-11-16 21:19:30
【问题描述】:
我正在处理一些相当大的图像文件(航测马赛克,通常 > 10 亿像素),因此将整个图像加载到内存中将成为我系统的问题。我想将它们一块一块地放入 R 中,这样我就可以在“网格”部分中处理它们。
注意:我不依赖于特定的图像格式,所以tiff、png、bmp 等都可以作为输入。
我可以用readJPEG 做一些类似的事情,但这需要先将整个文件加载到内存中,所以它并不能真正解决我的问题,但希望能展示我想要实现的目标。
image.file <- "~/Desktop/penguins.jpg"
grid.size <- 100
v <- 3
h <- 1
library( jpeg )
image <- readJPEG( image.file )[ seq.int( (v-1)*grid.size+1, (v)*grid.size, 1 ),
seq.int( (h-1)*grid.size+1, h*grid.size, 1 ), ]
上面仅加载图像的一个样本,由grid.size、v 和h 指定,这样可以很容易地将其构建到循环中以分段分析图像。
是否可以在不将整个图像加载到内存的情况下实现这一点?像read.csv 这样的东西,使用skip 和n 参数是合理的(它至少一次只加载一个垂直部分,比readJPEG 需要的内存少得多)。
【问题讨论】: