画像で使用されているカラーコードの取得には、画像編集ソフトを使用する方法があります。
「Rでお遊び:プレゼン資料の配色に使えるかも?キャラクターの髪の色?」でも、画像をフォトショップで読み込み、スポイトでカラーコードを取得しました。非常に手間がかかる作業です。
そこで、「Rで目的画像内の全ピクセルのカラーコードから、使用量が多いTOP5のカラーコードを取得する方法」を考えました。
紹介するコードでは、Rで画像の加工や情報を取得できる「EBImage」パッケージを使用しています。EBImageパッケージはbioLiteコマンドでbioconductorから簡単にインストールすることができます。
EBImageのバージョンは4.6.0です。
なお、bioconductorはRから利用出来るバイオインフォマティクス解析パッケージを提供しているサイトです。
参考URL:http://www.bioconductor.org/
画像からカラーコードを取得する他のお勧めパッケージ
おすすめのパッケージです。
パッケージのインストール
下記コマンドを実行してください。
source("http://bioconductor.org/biocLite.R") biocLite("EBImage")
実行コマンドの紹介
画像ファイルをダイアログで選択できるようにtcltkパッケージを利用しています。
今回の画像は「やはり俺の青春ラブコメはまちがっている。続」から「雪ノ下雪乃」の肩から上の画像を利用しています。
参考URL:http://www.tbs.co.jp/anime/oregairu/
使用画像です。
なお、Mac mini(Late 2012)、メモリ16GBの環境で2000×1260ピクセルの処理は約1分ほどです。
library("EBImage") #Imageファイルの読み込み selectAImage <- paste(as.character(tkgetOpenFile(title = "Imageを選択",filetypes = '{"Imageファイル" {".*"}}',initialfile = "*.*")), sep = "", collapse =" ") Image <- readImage(selectAImage, mode = "x11") #読み込んだImageをブラウザで表示 display(Image) #Imageからカラーコードを取得 #ピクセル数が多いImageほどメモリが必要です ColCode <- channel(Image, mode = "x11") #2000×1260ピクセルの処理で私の環境で約1分ほどかかりました。 CountColor <- sort(table(ColCode), decreasing = TRUE) #特定の色を削除。今回は白色を削除 CountColor <- CountColor[names(CountColor) != "#FFFFFF"] #検知数TOP5を表示 SelectCol <- 5 head(CountColor, SelectCol) ColCode #FAE7D8 #DBD5D4 #CFC8C8 #333335 #5C6062 3422 954 810 779 712 pie(rep(1, SelectCol), labels = names(head(CountColor, SelectCol)), col = names(head(CountColor, SelectCol)))
出力
画像処理コマンドの紹介
EBImageパッケージでは画像の明度、コントラスト、ガンマ値、カラーモードの変更、クリッピング、回転などが可能です。
#おまけ #明度は「+」または「-」で指定します #明るく Image1 <- Image + 0.4 display(Image1) #暗く Image2 <- Image - 0.4 display(Image2) #コントラストは「*」で指定します #明るく Image3 <- Image * 1.3 display(Image3) #暗く Image4 <- Image * 0.7 display(Image4) #ガンマ値は「^」で指定します #高い Image5 <- Image ^ 1.3 display(Image5) #低い Image6 <- Image ^ 0.7 display(Image6) #クリッピングもできます。範囲はdisplayコマンドで画像を表示して座標を取得すると便利です #指定は[x軸の範囲(幅), y軸の範囲(高さ),]です display(Image[39:159, 87:122,]) #回転も可能です #translate(rotate(Image, 「+」または「-」で回転), 回転の原点)です display(translate(rotate(Image, -45), c(0, 0))) #カラーチャンネルも変更できます colorMode(Image) <- Grayscale display(Image) #カラーにも簡単に戻せます colorMode(Image) <- Color
出力
少しでも、あなたのウェブや実験の解析が楽になりますように!!