2
require("EBImage")

私は基本的に、画像のマスクを生成するためにRでこの一連のコマンドをループしたい

a <- readImage('BF_Position004_time021.tif') # load rgb image
g <- channel(a, "asgreen") #take green channel from image 
writeImage(g,"/Users/...path.../GFP_Position004_time021.tif") #save green channel image
r <- channel(a, "asred") #take red channel from image
writeImage(r,"/Users/...path.../RFP_Position004_time021.tif")#save red
b <- channel(r, "gray") #makes red channel into gray scale
#the following creates a white mask over pixels with high intensity
nmask2 = thresh(sqrt(b), 15, 15, .001)
# nmask2 = fillHull(nmask2)
mk3 = makeBrush(3, shape = 'diamond')
nmask3 = opening(nmask2, mk3)
nseg = bwlabel(nmask3)
nf = computeFeatures.shape(nseg)
nr = which(nf[,'s.area'] < 150)
nseg = rmObjects(nseg,nr) #resulting image called nseg
writeImage(nseg,"/Users/...path.../BF_Position004_time021.tif") #save nseg with the following name

000 から 100 までの複数の位置と 001 から 100 の時点でやりたいと思います。明確にするために、上記のコードに注釈を付けました。

あらゆる助けに感謝します

4

1 に答える 1

3

上記のコマンドを、ファイル名の共通部分と書き込み先のディレクトリを取る関数に入れます

fun <- function(fl, dirpath) {
    a <- readImage(sprintf("BF_%s", fl))
    ...
    writeImage(g, file.path(dirpath, sprintf("GFP_%s", fl)))
    ....
}

ファイル名のベクトルを作成する

fls <- sprintf("Position%03d_time%03d.tif", rep(0:100, each=100), 1:100)

じゃ、行け!

for (fl in fls)
    fun(fl, "/Users/...path...")
于 2013-11-14T00:59:55.463 に答える