Edited at

Rで扱える画像ライブラリの簡単な調査

More than 5 years have passed since last update.

画像処理のアイデアはRでさくっと試したいマンなので一応有名な(というか俺でも知ってる)ライブラリ3つに絞って簡単にデータ構造とかについてまとめて何かしようとしたときの初動に役立てたいというメモ。


調べるライブラリ


  • jpeg 0.1-8

  • biOps 0.2.2

  • EBImage 4.6.0


調べること


  • 配列データ

  • データサイズ

  • 値域と型


結果


使用画像


  • 640 x 480

  • 約156KB

  • カラー

  • JPEG

DSC01580.JPG


ライブラリ読み込み&画像準備


Console

> library("jpeg")

> library("biOps")
> library("EBImage")
>
> smoke <- "smoke.jpg"
>
> smoke.jp <- readJPEG(smoke) #jpeg
> smoke.bi <- readJpeg(smoke) #biOps
> smoke.eb <- readImage(smoke) #EBImage


配列データ

やはり画像関数としてピクセルにランダムアクセスしたいのでどんな配列表現をとってるかみてみる。


Console

> dim(smoke.jp)

[1] 480 640 3
> dim(smoke.bi)
[1] 480 640 3
> dim(smoke.eb)
[1] 640 480 3

カラー画像ということで3次元分のデータとして扱われており、RGB3チャネル分の画像が格納されてる。

配列データは EBImage のみ画像における横方向が1次元目に格納されてるため、参照方向が他の2つと逆になってるので注意が必要。


データサイズ

続けてメモリ上のサイズ。


Console

> object.size(smoke.jp)

7373008 bytes
> object.size(smoke.bi)
3687088 bytes
> object.size(smoke.eb)
7373584 bytes

EBImage > jpeg >> biOps という形になった。


値域と型

なんで↑で biOps だけ他2つと2倍程度違ってるのかとおもいきや、


Console

> summary(smoke.jp)

Min. 1st Qu. Median Mean 3rd Qu. Max.
0.0000 0.3176 0.4980 0.4571 0.5922 0.9294
> typeof(smoke.jp)
[1] "double"
>
> summary(smoke.bi)
Min. 1st Qu. Median Mean 3rd Qu. Max.
0.0 81.0 127.0 116.6 151.0 237.0
> typeof(smoke.bi)
[1] "integer"
>
> summary(smoke.eb)
Min. 1st Qu. Median Mean 3rd Qu. Max.
0.0000 0.3176 0.4980 0.4571 0.5922 0.9294
> typeof(smoke.eb)
[1] "double"

biOps のみ256階調の integer で値が表現されてた。他は0〜1の double


まとめ

各ライブラリ間での変換メソッド書かないとシームレスな連携できなそう。

調べてないけどグレスケの場合は多分3チャネル分あった3次元目が次元縮小されて2次元配列になるだけだよね。

次は各ライブラリのインストール方法とか含めた簡単なexampleもまとめたい。