我正在尝试选择图像顶部的一部分和图像底部的一部分,然后连接顶部下方的底部以生成一个图像。
我一直在试验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)
答案 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
设置行之间的填充(以像素为单位)。