2017-04-11 9 views
2

画像の上部の一部と画像の下部の一部を選択し、上部の下を連結して1つの画像を生成しようとしています。R連結画像

私は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

サンプル画像をサンプルに読み込んで、誰でも再現できるようにしてください。 'f < - system.file(" images "、" sample-color.png "、package =" EBImage "); imgcol < - readImage(f) '(改行で'; ''を置き換えます)。 'xran < - round(dims [1] *。25):round(dims [1] *。75)また、配列インデックスでX範囲を抽出する式を繰り返さないようにすることで、コードの可読性を向上させることもできます。 ); yran < - 1:round(.185 * dims [2]); image.top < - imgcol [xran、yran、] '。 – aoles

答えて

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を使用することができます。それらを他に次のものを配置するために、それらを互いに上下に積み重ねること

library("abind") 

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

またはalong=1along=2を指定します。

現在、Imageオブジェクトに対して特定のabindメソッドが定義されていないため、出力imgdatはプレーンな配列です。適切なcolorModeImageを使用して、再構成を行います。

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

これを達成するための別の方法はcombineによって得られた画像スタック上で動作しEBImageの機能tileを使用することです。しかし、この解決策では、結合された画像が同じ寸法を有することが必要である。

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

引数nx=1は、各行が効果的に列のすべてのフレームを連結し、単一の画像を含むであろう、そしてlwd行の間のピクセル単位のパディングを設定することを指定します。