R ImageProcessing - eiichiromomma/CVMLAB GitHub Wiki

(R) 画像解析

Rで画像解析を行なう

読み込み

rimageはfftwを使っているせいか環境依存性が高く、しょっちゅうインストール不可になるので代替を紹介。

jpeg, png

libjpegおよびlibpngを使ったpackage。readJPEG, readPNGで生のmatrixとして読まれるのでハンドリングは楽だが可視化がやや面倒。writeJPEG, writePNGで保存もできる。

ReadImages

rimage互換のimagematrix形式でjpegを読める。 但しfft関係は非搭載。

rimage

統計処理がメインのRは画像解析にも好都合。jpegを一発で読めるrimageパッケージを使う。

library(rimage)

読み込む画像はtest.jpg)とでもしておく。

gazou<-read.jpeg("test.jpg)")

でgazouにデータが入る。表示はplotコマンドで。

plot(gazou)

imagematrixにはカラーの場合[行,列,色]となり、縦横×RGB3枚の3次元行列とtype="colour"とカラー画像との識別が入る。 各色の参照は簡単。

gazou[,,1]

でRed成分の行列になり

gazou[,,2]
gazou[,,3]

がGreen,Blueとなる。

gazou_grey<-imagematrix(gazou[,,1],type="grey")

とすればRed成分をグレーとする画像データが入る。

おさらい

    library(rimage)
    gazou<-read.jpeg("test.jpg)")
    par(mfrow=c(2,2)) #Plotウィンドウを2x2に分割
    plot(gazou,main="Colour")
    plot(imagematrix(gazou[,,1],type="grey"),main="Red")
    plot(imagematrix(gazou[,,2],type="grey"),main="Green")
    plot(imagematrix(gazou[,,3],type="grey"),main="Blue")

部分処理

色を指定したのと同様にやれば良いがちょっとややこしい。 画像はf(x,y)だが行列は[行,列]と[y,x]ということになる。 つまり左上を原点として(0,0)-(100,200)の矩形データを得るには[1:201,1:101,]と指定する必要が生じる。 ついでに言っておくとrect()などの低レベル描画関数の使う座標は左下が(1,1)となるので、描画とデータの関係に注意する必要がある。

おさらい

    library(rimage)
    gazou<-read.jpeg("test.jpg)")
    height<-dim(gazou)[1]
    par(mfrow=c(2,2)) #Plotウィンドウを2x2に分割
    plot(gazou,main="Full size; false")
    rect(1,1,101,201) #低レベル描画関数は座標が異なる
    plot(gazou,main="Full size; true")
    rect(1,height-1,101,height-201)
    plot(imagematrix(gazou[1:201,1:101,]),main="100x200")