画像処理

(まだ書きかけ)

ここではimagerというパッケージによる画像処理を扱う。

install.packages("imager")
library(imager)
vignette(gettingstarted)     # 解説をブラウザで表示

pic = load.image("hoge.png") # 読む
oblect.size(pic)             # サイズを確認
plot(pic, asp=1)             # 表示
hist(pic, breaks=(0:255)/255, col="black")    # ヒストグラム
hist(R(pic), breaks=(0:255)/255, col="red")   # 赤だけ
hist(G(pic), breaks=(0:255)/255, col="green") # 緑だけ
hist(B(pic), breaks=(0:255)/255, col="blue")  # 青だけ
r = range(pic)  # 最小値・最大値を求める
pic2 = (pic - r[1]) / (r[2] - r[1]) # 0〜1に調節
save.image(pic2, "hoge.jpg") # 保存

画像はcimgクラスのオブジェクトで表される。これは各ピクセル・各色ごとに,深度が8ビットなら255で割り,16ビットなら65535で割って,0以上1以下のdouble型にしたもの。各色は関数 R(),G(),B() で取り出せる。

画像の保存は save.image() で行う。画像の形式は拡張子で決められる。8ビット深度で保存され,JPEGの品質は指定できない。品質を気にする場合はいったんPNGで保存してImageMagickのconvertコマンドで convert hoge.png -quality 92 hoge.jpg のようにすればよいであろう。

各色に分解してから操作し,再合成する方法:

r = R(pic)
g = G(pic)
b = B(pic)
# 何らかの操作をする
pic2 = as.cimg(c(r,g,b), dim=dim(pic))  # 再合成