2013-02-08 9 views
5

RのイメージからRGBピクセルデータを取得する方法を教えてもらえますか?イメージからピクセルデータを取得する方法R

私は分化イベントの理解を助けるために鳥の羽の違いを比較するために、この情報を必要とします。

私の写真は、デジタルカメラで撮影したとNEFファイルとして、今されています。どのタイプのファイルが必要なのかは問題ではありません。私が望むものにファイルを変換する可能性があります。しかし、私はできるだけ多くの情報をファイルに保存することを望んでいます(つまり、PNGファイルは良いです)。私はRで多くのパッケージを試してみました

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

私の問題は、この種の作業と私の低スキルが原因かもしれませんが、私は私が持っている背景にハード私ができるようにしようとしています。 誰かが私を助けたり、私に助言を与えることができれば、私は非常に感謝します。

+2

「運がない」とはどういう意味ですか? Kohskeさんはあなたの[前の質問](http://stackoverflow.com/questions/6085090/how-to-extract-the-pixel-data-use-rs-pixmap-package)に非常に良い答えをくれました。具体的に。あなたは彼のソリューションに適応しようとしましたか?それはなぜ機能しないのですか? – Andrie

+0

ImageJ(またはOS Xにアクセスできない場合はGraphicConverter)を使用すると、もっと楽しくなるでしょう。一方、バードフェザーが画像の一部しかカバーしていないと仮定すると、配列のサブセットを抽出して、あなたが混乱しているデータのサイズを最小限に抑えます。 –

+0

@Andrie、私の編集で見ることができるように、私は何をしているのか誤解しています。あなたが興味があれば、私はこのエラーメッセージbill_080答えをテストしようとしています:画像@サイズ "スロット:スロットを持たない基本クラス("配列 ")のオブジェクトからスロット"サイズ "を取得しようとするエラー" – MariaBioStudent

答えて

7

まず私が例にpng画像を生成:

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

は、その後、私はpixmapによって読み取り可能なフォーマットに変換します。私は色情報を維持したいとここで私は、PPMファイルにPNGを変換します。私は、コマンドラインからImageMagickのを使用しますが、何でもしたいプログラムを使用することができます:あなたはpixmapパッケージからread.pnm機能で画像を読み取ることができる

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

次に、:

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

そして、もし行列として各チャンネルの画素値を取得する[email protected][email protected][email protected]スロット(グレースケール画像または[email protected])を使用することができます。

dim([email protected]) 
[1] 480 480 
+0

ありがとう、今私は正しい軌道にいることを知っている! :) – MariaBioStudent

+0

あなたの質問が解決した場合は、緑色のマークをチェックして他のユーザーにそれを示すことができます。 – juba

1

はこの小さなサンプル3×3ピクセルのPNG画像を撮る:

sample image

その後:

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 
関連する問題