画像処理のアイデアはRでさくっと試したいマンなので一応有名な(というか俺でも知ってる)ライブラリ3つに絞って簡単にデータ構造とかについてまとめて何かしようとしたときの初動に役立てたいというメモ。
調べるライブラリ
- jpeg 0.1-8
- biOps 0.2.2
- EBImage 4.6.0
調べること
- 配列データ
- データサイズ
- 値域と型
結果
使用画像
- 640 x 480
- 約156KB
- カラー
- JPEG
ライブラリ読み込み&画像準備
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もまとめたい。