R EBImage - eiichiromomma/CVMLAB GitHub Wiki

(R) EBImage

BioconductorのEBImageを使った画像解析

BioconductorのPackage

Bioconductorはオープンソースなゲノム解析ソフト群で、その中に色々な画像を扱えるEBImageがある。 EBImageはUnixではお馴染のImageMagicを利用している上に、データについては素直にRの配列で扱える仕様となっている。

が、Windows環境では普通使わないImageMagic(とGTK)に頼っている事がネックとなり、すんなり使えず導入にはImageMagicとGTKのインストールが必須となる。

使える画像フォーマット

ImageMagicのAPIを使っているので恐らくImageMagick: Formats に記載されているものが全て使える筈だが、取り敢えずBMPしか試してない。

EBImageを使う準備

によればエラい楽になった。ImageMagicとgtkは必要だが、 これらのインストール、PATHの設定を終えていればRで

source("http://bioconductor.org/biocLite.R")
biocLite("EBImage")

と入力するだけで良くなった。

旧バージョン

Bioconductor関連はCRANには登録されていないのでinstall.packagesは使えずに手動インストールとなる。 CRANでの紹介ではWindows用バイナリは存在しないとなっているが、メンテナのページ にはしっかり存在する。

"Win32 binary and dependencies"のリンクを辿るとEBImage_x.xx.xx.zip)の他、ImageMagic-x.x.x-Q16-windows-dll.exe、gtk-x.x.x-win32-1.exeが置かれているので、それぞれバージョンの一番大きいものを拾ってくる。 (gtkについてはGimp for Windowsを導入していれば不要)

gtk, ImageMagicを実行してインストールした後に、EBImage_x.xx.xx.zip)をRのlibraryフォルダ(デフォルトではC:\Program Files\R\R-x.x.x\library)に展開する。(EBImageフォルダが追加されている筈)

EBImageの利用

Rを起動して

library(EBImage)

とするだけで使える。 関数群については

help(package="EBImage")

の他、EBImageフォルダのdocフォルダ内にAnalysisWithEBImage.pdfがあり、具体的な操作法が記載されている。

画像の読み込み

read.imageを使う。定義は以下の通り。

im<-read.image(ファイル名, colormode)

colormodeはTrueColorあるいはGrayscaleのみが用意されている。ファイル名にはURLでも良いらしい。

例: test.jpgをフルカラーで読み込む

im<-read.image("test.jpg)",TrueColor)

ちなみにグレースケールで読む場合はファイル名のみで良い。

Image-class

読み込んだ画像はImage-classとして格納される。 他の画像処理packageでの取扱と決定的な違いは終始x,yの概念でデータを扱える仕様となっている点にある。 640x480の画像を読み込むとimは

>dim(im)
[1] 640 480   1

となる。つまり行、列が自動で入れ替えられているため、rimageの時のようなややこしい脳内変換をせずに画像f(x,y)についてのデータの参照は

im[x,y]

で行なえる。

またTrueColorで読み込んだ場合にはchannelでチャネル毎にデータを取り出す必要がある。

channel(Image,mode)

modeは

  • rgb:TrueColorの整数値。値を弄るのには不向き。
  • gray:グレースケール値。値は0~1の範囲。
  • red, green, blue:Red, Green, Blueの値。値は0~1の範囲。
  • asred, asgreen, asblue: Red, Green, Blueの値。値は0~255の範囲(8bitの場合)。
  • x11:RGBの順での16進表示。用途不明。

となる。 ちなみにImageは要素指定をしても有効。

表示はimageやplotではなく

display(im)

とする。

注意点

当然ながら画像f(x,y)としての完結しか出来ないため、行、列データとして保存するためには入れ替える必要が生じる。 入れ替えはflip, rotateを使えば良い。

imx<-flip(rotate(im,angle=-90))

とすると通常の行列データの並びになる。

rimageとの互換性

rimage用に作成した関数をそのまま使いたいのでImage-classをimagematrix-classに変換してみる。 変換にはflip, rotate済みのデータを使う。

x<-c(channel(imx,"red"),channel(imx,"green"),channel(imx,"blue"))
dim(x)<-c(dim(imx)[1:2],3)
immat<-imagematrix(x)

これでimmatはrimageで読み込んだ行列として扱える。