R连接图像

时间:2017-04-11 19:05:07

标签: r image concatenation

我正在尝试选择图像顶部的一部分和图像底部的一部分,然后连接顶部下方的底部以生成一个图像。

我一直在试验EBImage并成功捕获了顶部和底部,但无法将它们组合在一起。

以下是一些测试代码:

library("EBImage")
display(imgcol)

dims <- dim(imgcol)
dims

# top
range <- c(1:round(.185*dims[2]))                          
image.top <- imgcol[round(dims[1]*.25):round(dims[1]*.75),range,]
display(image.top)
dim(image.top)

#bottom
range <- (dims[2]-round(.185*dims[2])):dims[2]
image.bot <- imgcol[round(dims[1]*.25):round(dims[1]*.75),range,]
display(image.bot)
dim(image.bot)

# How do I concatenate images?
# The following creates a large numeric, not a large image
test <- c(image.top,image.bot)

1 个答案:

答案 0 :(得分:0)

在示例中提供的特殊情况下,当想要合并同一个图像的片段时,实际上可以通过使用数组子集[来选择合成图像的一部分,而无需存储中间结果并将它们连接起来。对于适用于连接任意原点图像部分的通用解决方案,请阅读。

xran <- round(dims[1]*.25):round(dims[1]*.75)
yran <- c(1:round(.185*dims[2]), (dims[2]-round(.185*dims[2])):dims[2])
imgcol[xran,yran,]

图像表示为多维数组,因此您可以使用abind来连接它们。指定along=2将它们叠加在另一个上面

library("abind")

imgdat <- abind(image.top, image.bot, along=2)

along=1将它们放在另一个旁边。

目前没有为Image对象定义特定的abind方法,因此输出imgdat是一个普通数组。使用Image与适当的colorMode进行重建。

imgnew <- Image(imgdat, colormode=colorMode(imgcol))

实现此目的的另一种方法是使用EBImage函数tile,它在通过combine获得的图像堆栈上运行。然而,该解决方案要求组合图像具有相同的尺寸。

tile(combine(image.top, image.bot), nx=1, lwd=0)

参数nx=1指定每行只包含一个有效连接列中所有帧的单个图像,lwd设置行之间的填充(以像素为单位)。