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")