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

  • 6
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

画像処理のアイデアは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もまとめたい。