7

Rの画像からRGBピクセルデータを取得する方法について誰か助けてもらえますか?

鳥の羽毛の違いを比較して、種分化イベントの理解を助けるために、この情報が必要です。

私の写真はデジタル カメラで撮影され、現在は NEF ファイルになっています。必要なファイルの種類は関係ありません。必要なファイルに変換する可能性があります。ただし、ファイルにできるだけ多くの情報を保持することを好みます (つまり、PNG ファイルが適しています)。

私はRで多くのパッケージを試しました:Pixmap、Raster、ImageMetrics、インターネットを閲覧し、メソッドをテストし、共同学生に尋ねました.この問題を解決するために数週間。ここStackoverflowで私はこれを試しました: How to extract the pixel data Use R's pixmap package? 、運が悪い。私のファイルも R ウィンドウには大きすぎて (配列全体が表示されません)、生成された配列を理解するのが困難です。私にとって最善の方法は、データをマトリックスとして取得するか、何が何であるかを理解しやすくする別の方法で取得することです。同様の質問がたくさん見つかりましたが、他のプログラム (Java、C++、IOS、Matlab、Python など) では、残念ながら使用方法がわかりません。

私の問題は、この種の仕事のスキルが低いためかもしれませんが、自分のバックグラウンドでできる限りの努力をしています。誰かが私を助けたり、ヒントをくれたりしたら、とても感謝しています。

4

2 に答える 2

8

まず、サンプルpng画像を生成します:

png("/tmp/test.png")
plot(rnorm(100))
dev.off()

次に、それをで読み取り可能な形式pixmapに変換します。ここでは、色情報を保持したいので、png を ppm ファイルに変換します。コマンド ラインから ImageMagick を使用しますが、必要なプログラムを使用できます。

$ convert /tmp/test.png /tmp/test.ppm

次に、パッケージread.pnmから関数を使用して画像を読み取ることができます。pixmap

x <- read.pnm("/tmp/test.ppm")

次に、、スロット (またはグレースケール イメージの場合) を使用して、各x@redチャネルのピクセル値を行列として取得できます。行列の次元が画像のサイズと同じであることを確認できます。x@bluex@greenx@grey

dim(x@red)
[1] 480 480
于 2013-02-08T10:06:08.953 に答える
3

この小さなサンプル 3x3 ピクセルの png 画像を使用します。

サンプル画像

それで:

library('png')
download.file('http://i.stack.imgur.com/hakvE.png', 'sample.png')
img <- readPNG('sample.png')
pix.top.left <- img[1,1,]     # row 1, column 1
pix.bottom.left <- img[3,1,]  # row 3, column 1
pix.top.right <- img[1,3,]    # row 1, column 3

(上記のサンプル画像のように) アルファ チャネルを含む PNG 画像を読み取る場合、各pix.変数は 4 つのエントリを持つベクトルであり、各エントリはピクセルの赤、緑、青、およびアルファ値に対応します。

> pix.top.left
[1] 1 0 0 1
于 2014-07-05T14:52:14.347 に答える