Rで解析:画像操作の進化「magick」パッケージ

Rの解析に役に立つ記事
スポンサーリンク

これまでに画像を操作するパッケージとして「imager」や「EBImage」パッケージを紹介しました。これらパッケージも有用ですが、本パッケージはカユイ所に手が届くパッケージです。

各実行コマンドを自身で確認いただき本パッケージの有用性を実感いただければと思います。

パッケージバージョンは2.7.3。実行コマンドはwindows 11のR version 4.1.2で確認しています。

スポンサーリンク

パッケージのインストール

下記コマンドを実行してください。

#パッケージのインストール
install.packages("magick")

実行コマンドの紹介

詳細はコマンド、パッケージのヘルプを確認してください。

#パッケージの読込
library("magick")

#画像の読み込み:image_readコマンド
#からだにいいものバナーを読み込み
#もちろんローカル環境の画像も読み込めます
KaradaBanner <- image_read('https://www.karada-good.net/wp/wp-content/uploads/2015/08/4d45f652babef5b63a8c2a5f85c9885d.jpg')

#画像の情報を表示:image_infoコマンド
image_info(image = KaradaBanner)
format width height colorspace filesize
JPEG   986    149       sRGB    78164

#画像フォーマットを変換:image_convertコマンド
#フォーマットを指定:formatオプション;png,jpeg,gif,pdfが指定可能
ConvertImg <- image_convert(image = KaradaBanner, format = "pdf")
image_info(image = ConvertImg)
format width height colorspace filesize
pdf   986    149       sRGB        0

#画像を保存:image_writeコマンド
#tcltkパッケージを利用して保存場所を指定
library("tcltk")
setwd(paste(as.character(tkchooseDirectory(title = "保存場所を選択"), sep = "", collapse ="")))
#保存ファイル名を指定:pathオプション
#フォーマットを指定:formatオプション;png,jpeg,gif,pdfが指定可能
image_write(KaradaBanner, path = "test.pdf", format = "pdf")

#画像を表示:image_browseコマンド
#画像フォーマットに従いシステムで設定しているソフトで表示
image_browse(image = KaradaBanner)

#画像周囲に枠線を付与:image_borderコマンド
#色を指定:colorオプション
#枠線太さをピクセルで指定:geometryオプション;左右×上下で指定
image_border(image = KaradaBanner, color = "blue", geometry = "15x10")

#画像をtrim処理:image_trimコマンド
image_trim(image = KaradaBanner)

#画像を切り抜き:image_cropコマンド
#切り抜く大きさ位置を指定:geometryオプション;幅x高さ{+-}X軸開始位置{+-}Y軸開始位置
image_crop(image = KaradaBanner, geometry = "140x150+100-30")

#画像のリサイズ:image_scaleコマンド
image_scale(image = KaradaBanner, geometry = "400x600")

#画像の回転:image_rotateコマンド
#角度を指定:degreesオプション
image_rotate(image = KaradaBanner, degrees = 30)

#画像を上下反転:image_flipコマンド
image_flip(image = KaradaBanner)

#画像を左右反転:image_flopコマンド
image_flop(image = KaradaBanner)

#画像の塗りつぶし:image_fillコマンド
#基準点を指定:pointオプション
#境界領域の指定:fuzzオプション;0から100の範囲
image_fill(image = KaradaBanner, point = "200x130", color = "yellow", fuzz = 20)

#画像のぼかし処理:image_blurコマンド
#radiusとsigmaの数値を大きくするとぼかしが強い
image_blur(image = KaradaBanner, radius = 1, sigma = 1)

#画像にノイズを加える:image_noiseコマンド
#ノイズ処理を指定:noisetypeオプション;Uniform,Gaussian,Impulse,Laplacian,Poissonが指定可能
image_noise(image = KaradaBanner, noisetype = "Poisson")

#画像を縁取り:image_charcoalコマンド
image_charcoal(image = KaradaBanner, radius = 1, sigma = 0.5)

#画像の油絵処理:image_oilpaintコマンド
image_oilpaint(image = KaradaBanner, radius = 0.5)

#画像のエッジ処理:image_edgeコマンド
image_edge(image = KaradaBanner, radius = 1)

#画像のネガ処理:image_negateコマンド
image_negate(image = KaradaBanner)

#画像に文字を追加:image_annotateコマンド
#文字を指定:textオプション
#文字サイズを指定:sizeオプション
#表示位置を設定:gravityオプション;Forget,NorthWest,North,NorthEast,
#West,Center,East,SouthWest
#文字背景色:boxcolorオプション
image_annotate(image = KaradaBanner, text = "Karada-Good", size = 70,
               gravity = "West", color = "green", boxcolor = "lightblue")

#複数画像を1つの画像に結合する:image_mosaicコマンド
#からだにいいものバナーを読み込み
KaradaBanner <- image_read('https://www.karada-good.net/wp/wp-content/uploads/2015/08/4d45f652babef5b63a8c2a5f85c9885d.jpg')
#Rのロゴを読み込み
logo <- image_read("https://www.r-project.org/logo/Rlogo.png")
#画像を結合してリサイズ
img <- image_scale(c(logo, KaradaBanner), "300x300")
#描写
image_mosaic(image = img)

#複数画像を並べて表示:image_appendコマンド
#縦方向に表示:stackオプション;FALSEで横方向
AppendImg <- image_append(img, stack = FALSE)
image_background(image = AppendImg, "red")

#画像間を指定したframesで保管:image_morphコマンド
#フレーム数を指定:framesオプション
GifAnime <- image_morph(img, frames = 30)

#image_morphコマンドで作成したmagick imageオブジェクトをアニメ化:image_animateコマンド
#fpsを指定:fpsオプション
#繰り返しの設定:loopオプション;0で繰り返し,1で繰り返ししない
image_animate(GifAnime, fps = 10, loop = 0)

#参考_グラフに画像を追加;ラスター画像プロットと同じです
plot(cars)
rasterImage(image_scale(KaradaBanner, "600x400"), 5, 100, 20, 120)
#ggplo2パッケージの場合
library("ggplot2")
library("grid")
#rasterGrobコマンド
RasterData <- rasterGrob(KaradaBanner, interpolate = TRUE)
#annotation_customコマンドでグラフに追加
ggplot(data = cars, aes(speed, dist)) + geom_point() +
  annotation_custom(RasterData, xmin = 3, xmax = 20,
                    ymin = 100, ymax = 120)

出力例

他コマンドは実行してみてください。大変面白いです。

・画像のネガ処理:image_negateコマンド

・参考_グラフに画像を追加:ggplot2パッケージとの組み合わせ

magickggplot2

・image_animateコマンド

preview

少しでも、あなたの解析が楽になりますように!!

タイトルとURLをコピーしました