将多个图像组合在一起

时间:2019-09-11 14:03:39

标签: r

我正在尝试在for循环中将多个图像(500张图片)合并在一起。图像大小是恒定的,甚至不会太大(225 * 410 px)。我需要获得一张由500张并排粘贴在一起的初始图片组成的图像。

我已经尝试过使用软件包EBImage的某些功能进行for循环。 abind()就像传统的rbind()一样。我使用的代码如下:

library(abind)
#path=a list containing the paths of the source images
final_image<-readImage(path[1]) #initialize the final image
for (i in 2:500){
  im <- readImage(path[i]) #open the i-esim image
  final_image <- abind(final_image,im,along=1) #paste the i-esim image with the previous one
}

该代码有效,但是显然很慢,因为每次迭代final_image的大小都会变大。

有人知道更快的解决方法吗?谢谢!

1 个答案:

答案 0 :(得分:1)

通常,迭代地rbind(也适用于其他*bind函数)是一个非常糟糕的主意,因为它会在循环中的每次迭代中生成完整的副本(如您所注意到的)。请注意,在?abind中,它花费...

...  Any number of vectors, matrices, arrays, or data frames. The
     dimensions of all the arrays must match, except on one dimension
     (specified by along=). If these arguments are named, the name will be
     used for the name of the dimension along which the arrays are joined.
     Vectors are treated as having a dim attribute of length one.

这允许我们使用do.call一次对所有图像的单个列表进行绑定。试试这个(未试用):

list_of_images <- lapply(path, readImage)
combined <- do.call(abind, c(list_of_images, list(along = 1)))