1

画像処理プログラムからのデータがあり、それらをつなぎ合わせる必要があります。私の画像データは元々、顕微鏡スライド上の18(6 x 3)ウェルの配列です。後で各ウェルに何が入っていたかを識別できるように、これらのウェルに一貫して番号を付ける必要があります。ウェルのおおよそのx位置とy位置(ピクセル単位)があり、それらを左から右、次に上から下(最も単純に見える)に並べ替え、1から18の番号を付けたいと思います。

このような:

     [,1] [,2] [,3] [,4] [,5] [,6]
[1,]    1    2    3    4    5    6
[2,]    7    8    9   10   11   12
[3,]   13   14   15   16   17   18

警告:

-すべてのウェルが画像処理プログラムによってピックアップされたわけではないため、18未満のウェルがある場合があります。

-同じ行または列のすべてのウェルがまったく同じxまたはyにあるわけではなく、20〜40ピクセル以内で浮かんでいるように見えます。

-すべての画像が同じポイントまたはまったく同じ倍率で中央に配置されるわけではないため、適切な位置は範囲をコード化するのに十分な信頼性がありません。

データの例:

   Well BBXLeft BBYTop
1     0      39    637
2     1      43   1218
3     2     596    630
4     3     610   1212
5     4    1161    633
6     5    1164   1207
7     6    1710    623
8     7    1715   1202
9     8    2267    620
10    9    2271   1199
11   10    2824    617
12   11    2845   1197
13   12      35     57
14   13     593     53
15   14    1709     45
16   15    2262     41
17   16    2820     38

またはから再現可能な形式でdput

wells <- structure(list(Well = 0:16, BBXLeft = c(39L, 43L, 596L, 610L,1161L, 1164L, 1710L, 1715L, 2267L, 2271L, 2824L, 2845L, 35L, 593L, 1709L, 2262L, 2820L), BBYTop = c(637L, 1218L, 630L, 1212L, 633L, 1207L, 623L, 1202L, 620L, 1199L, 617L, 1197L, 57L, 53L, 45L, 41L, 38L)), .Names = c("Well", "BBXLeft", "BBYTop"), class = "data.frame", row.names = c(NA, -17L))

ウェルが画像解析プログラムから故障していますこの例ではウェル#15(または0からカウントする場合は14)がありません

理想的な出力は、左右、上下のウェル番号(または「戦艦」座標)を含む新しい列です。

これがちょっとした宿題の質問である場合は申し訳ありませんが、カットオフをハードコーディングせずにこれを効率的に行う方法が本当にわかりません。Rを使用しているのは、Rが私が把握している唯一の言語であり、この問題を回避するために他のコードを作成する準備ができているためです。

4

1 に答える 1

3

以下のコードは、ピクセル位置に従ってウェルを並べ替えるのに役立ちます。ただし、おそらくもっと重要なのは次のとおり
です。これらは、ピクセル位置に対してプロットされたWellNumberラベルです。 このラベル付けスキームは意図的なものですか、それとも画像データにラベルを付けるときにウェルの場所がシャッフルされていますか?

ここに画像の説明を入力してください



データを並べ替えるには、画像サイズなどの自然な休憩が必要です。以下の例では500を選択しましたが、必要に応じて調整できます。

# sort & plot the pixel corners, to get an idea for where the boundaries re
sort(wells$BBXLeft)
sort(wells$BBYTop)

plot(x=wells$BBXLeft, y=wells$BBYTop)

# add an NA for the missing value (we cant just ignore it)
wells[18,] <- c(NA, 1100, 30) 

imgSize <- 500
nrows <- 3
ncols <- 6

# Assign row and col number based on boundaries set every 'imgSize'
#  Note that rows are reversed, top to bottom
wells$row <- cut(wells$BBYTop,  breaks=seq(imgSize*nrows, 0, -imgSize), label=1:nrows)
wells$col <- cut(wells$BBXLeft, breaks=seq(0, imgSize*ncols, imgSize), label=1:ncols)

# your battleship coordinates
wells$battleship <- paste0("(", wells$row, ", ", wells$col, ")")


# then to sort it,  sorting by rows, then by cols
orderedWells <- wells$WellNo[order(wells$row, wells$col)]

# if you want to lay it out nicely, use a matrix
matrix(orderedWells, nrow=nrows, ncol=ncols, byrow=TRUE)

 #          [,1] [,2] [,3] [,4] [,5] [,6]
 #     [1,]   12   13   NA   14   15   16
 #     [2,]    0    2    4    6    8   10
 #     [3,]    1    3    5    7    9   11
于 2013-02-16T04:23:49.467 に答える