読者です 読者をやめる 読者になる 読者になる

R言語による電子カルテデータの二次利用

~R言語初心者がデータ処理を楽しめるように基本的内容中心のサイトです~

Rで画像処理~magick package

R言語 画像処理 magick

最近、ホームページもRmarkdownで書くようになりました。凝ったものは必要ないし、修正するのも楽だし、Rstudioで全て済ませられるので満足してます。ただホームページに貼り付ける画像を編集するのに、他の画像ソフトを立ち上げるのはやや面倒だなとは感じていました。でも、もうほかのソフトは必要ないかもしれません、magick packageがあれば…

インストール

magickは、ImageMagick STLというものをラップしているみたいです。
まずはインストールしてみましょう。

install.packages("magick")

画像の入出力

パッケージを読み込んでから、画像を取り込みます。
先日頂いた、えび味噌ラーメン画像です。

library(magick)
ramen <- image_read('img/ebi_miso.jpg')

Rstudioのviewerに出力するには、ramenとそのまま打ち込むだけです。


f:id:r_beginner:20160911123202j:plain
f:id:r_beginner:20160911125853j:plain
コンソールには画像の情報も一緒に出力されます。

画像の情報だけ欲しい場合は、image_infoを使います。

image_info(ramen)

ちなみに画像の出力は、image_writeを使います。

image_write(ramen,path='img/ebi_miso.png',format='png')

画像の処理

画像のサイズ変更は、image_scaleで。

library(dplyr)
image_scale(ramen, "200") %>% image_browse()  # width: 300px
image_scale(ramen, "x200") %>% image_browse() # height: 300px

画像の回転、鏡像はimage_rotate,image_flip,image_flopで。

image_rotate(ramen, 45)
image_flip(ramen)
image_flop(ramen)

f:id:r_beginner:20160911135847j:plain
画像のフィルター、効果は、image_blur,image_noiseで。

image_blur(ramen, 10, 5)
image_noise(ramen) 

f:id:r_beginner:20160911140655j:plain

画像のテキスト注釈

上の写真のようなテキストを付けるのは、image_annotateを使います。

ramen %>% 
  image_annotate(.,'text!!',size=70,gravity='northeast',color='green') 

f:id:r_beginner:20160911141542j:plain

画像の結合

ラーメン画像を3枚用意します(ramen1,ramen2,ramen3)。
3つの画像をcombineしてから、image_appendするのですが、画像の大きさが、まちまちかもしれないので、image_scaleで高さをそろえてからappendしてください。

img <- c(ramen1,ramen2,ramen3)
image_append(image_scale(img, "x200")) 

f:id:r_beginner:20160911143743j:plain

レイヤー

Photoshopみたいにレイヤーを重ねたりできます。

logo <- image_read("https://www.r-project.org/logo/Rlogo.png")
image_scale(ramen, "500") ->ramen500
image_scale(logo, "300") ->logo300
img <- c(ramen500 ,logo300)
image_mosaic(img)

f:id:r_beginner:20160911144328j:plain

アニメーション

先ほどのラーメン画像3枚でパラパラアニメです。image_animateを使用します。

img <- c(ramen1,ramen2,ramen3)
image_animate(image_scale(img, "200x200"), fps = 1, dispose = "previous") 

f:id:r_beginner:20160911145157g:plain

試してない機能もまだまだあります。
ラスター画像に変換し、ggplotに貼り付けたりもできるようです。

まとめ

簡単な画像処理は、Rでできそうです。
たくさんの画像に同じ処理するような場合には、効率よいですね。
繰り返し作業は画像ソフトより、可能な限りRで済ませたいものです。