画像の各ピクセルをデータフレームの変数に変換するソリューションを探しています。ピクセルマトリクスを変数(データフレーム)に変換するR
解像度が320x280pxの~2500の入力イメージがあり、readJPEG()
でマトリックスに読み込まれます。ファイル名には、後で分類する必要のある変数に関する情報が含まれています。
file_list <- list.files("D:/path/to/images", full.names=TRUE)
# Extract person number and eye position from file names
file_names <- sapply(strsplit(file_list, split = '/'), "[", 8)
person_list <- substr(file_names, 1 ,3)
person_class <- as.factor(person_list)
# Read pixel matrices from image files
pixelMatrices = lapply(X=file_list, FUN= function(x) readJPEG(file_list))
entryCount <- length(file_list)
# Setting up a proper data set
eyes = data.frame(pos= numeric(entryCount))
eyes$person <- person_class
eyes$pixels <- pixelMatrices
この結果、各オブジェクトは2つの変数(人物、ピクセル)を持つデータフレームになります。しかし、私は320 * 280 + 1の変数を持つデータフレームを持っていると思います。各ピクセルとファクタークラスに1つ。
は私が行列test <- as.data.frame(x = unlist(pixelMatrices[1]))
test <- unlist(pixelMatrices[1])
test <- as.data.frame(pixelMatrices[1])
をunlistingが、非適切な結果を与えるように異なるアプローチを試してみました。私が持っている唯一の(ほぼ)作業のアプローチは、これまでのすべてのピクセルをループし、次のようになり、データセットに行で行を挿入するためのものである:ループの
count <- length(file_list)
imageWidth = 320;
imageHeight = 280;
variableCount = imageHeight * imageWidth + 1
images <- as.data.frame(matrix(seq(count),nrow=count,ncol=variableCount))
images[1] <- eyes$person
for(i in 1:count) {
img <- readJPEG(file_list[i])
image <- c(img)
images[i, 2:variableCount] <- image
}
しかし、非常に遅いです。だから、〜2500 objで結果のデータフレームを得るための最良のアプローチは何ですか? 89601変数の?
Iあなたのアプローチを使用してみましたが、私のRStudioが計算行の数分後に私は次のエラーを与えた 'dfList < - mapply(combineDataと、pixelMatrices、person_class) ':R Session Aborted、Rに致命的なエラーが発生しました。セッションが終了しました。 – 4ndro1d
多くの列がなぜ必要なのか尋ねることはできますか?行列を平坦化せずにdfsに変換し、各行に対してperson_classを繰り返すのはなぜですか? – Parfait
その後、最も重要な機能を見つけるためにPCAを使用したいと考えています。モデルを訓練するために複数のデータフレームをどのように使用するかはわかりません。私はRの初心者であり、noobのチュートリアルがないのでかなり制限されていると感じている – 4ndro1d