Rでお遊び:アニメ「シャーロット」キャラクターのイメージカラー? PV第3弾から解析してみました


なんどか取り上げている、2015年7月より放送開始のアニメ「Charlotte」のPV第3弾が6/26に公開されました。内容をチェックすると、「背景が黒い各キャラクターの能力説明文の文字」に特徴的な色がそれぞれ使われています。どうも、キャラクターのイメージカラーのようです。

使用されている文字のカラーコードが気になったので「能力説明文のシーン」を画像で切り出し、背景をなるべく取り除き、フリーの統計解析ソフトRで解析しました。

文字には非常に柔らかな色が使用されています。なんとなく、オフィシャルHPのキャラ紹介で使用されているキャッチコピー以上の情報が詰まっている気がします。放送開始が非常に楽しみです。

シャーロットHP:http://charlotte-anime.jp/?nopop

参考までに結果とコードを紹介します。コードでいろいろ試していただくと、新たな発見があるかもしれません。

解析に使用したPV第3弾は下記内容です。

紹介コードはR version 3.2.0で動作を確認しています。

結果

・各キャラ使用カラーTop20のパレット
左から、”乙坂有宇”, “友利奈緒”, “高城丈士郎”, “西森柚咲&美砂”の順です。

シャーロットパレット

・各キャラ使用カラーTop20のカラーコード
モバイルの方はこちらからご覧いただくと見やすいです。NOはファイル名です。ファイル名を表示のようにすると、2桁以上になってもファイルを順番に読み込むことができます。
別ウィンドウで開く


実行コマンドの紹介

下記コマンドを実行してください。詳細はコメントを確認してください。Rや各パッケージの使用方法はHP記事を検索して参照ください。

#パッケージのインストール
#install.packages(c("png", "jpeg", "colorspace", "DT"))

#パッケージの読み込み
library("tcltk")
library("png")
library("jpeg")
library("progress")
library("colorspace")

#読み込みフォルダを選択
FoldPath <- paste(as.character(tkchooseDirectory(title = "読み込みフォルダを選択"), sep = "", collapse =""))

#フォルダ内のアイテムを取得
ItemList <- list.files(path = FoldPath)

#キャラ名を設定
CharaName <- c("乙坂有宇", "友利奈緒", "高城丈士郎", "西森柚咲&美砂")

###S:フォルダ内の全画像からカラーコードを取得#####
#データ格納用の変数を初期化
MasterRGBCol <- NULL

#アイテム数の取得
ItemVol <- length(ItemList)

#プログレスバーの設定
pb <- progress_bar$new(format = "  処理状況 [:bar] :percent",
                       total = ItemVol, clear = FALSE, width= 60)

for(i in seq(ItemVol)){
  #プログレスバーの表示
  pb$tick()
  
  #Imageファイルの読み込み
  selectAImage <- paste(FoldPath, "/", ItemList[i],
                        sep = "", collapse = "")
  
  #jpeg/png/gifファイルの判断
  if (unlist(strsplit(ItemList[i], "\\."))[2] == "png"){
    
      Image <- readPNG(selectAImage)
      LABCol <- as(RGB(as.vector(Image[,, 1]), as.vector(Image[,, 2]), as.vector(Image[,, 3])), "LAB")
      RGBCol <- cbind(LABCol@coords[,1:3], hex(LABCol))
    
  }else{
    
      Image <- readJPEG(selectAImage, native = FALSE)
      LABCol <- as(RGB(as.vector(Image[,, 1]), as.vector(Image[,, 2]), as.vector(Image[,, 3])), "LAB")
      RGBCol <- cbind(LABCol@coords[,1:3], hex(LABCol))
    
  }

  #マスターデータのデータフレーム化
  RGBCol <- as.data.frame(RGBCol)
  
  #特定の色を削除。白色を削除
  RGBCol <- subset(RGBCol, RGBCol[, 4] != "#FFFFFF")
  
  #カラーコードを文字列化
  RGBCol[, 4] <- as.character(RGBCol[, 4])
  
  #画像で使用されているカラーコードを集計
  CountColor <- as.data.frame(table(RGBCol[, 4]))
  
  #集計データをカラーコードで並び替え
  CountColor <- CountColor[order(CountColor[, 1], decreasing = TRUE), ]
  
  #マスターデータの重複を削除
  RGBCol <- RGBCol[!duplicated(RGBCol[, 4]),]
  
  #マスターデータをカラーコードで並び替え
  RGBCol <- RGBCol[order(RGBCol[, 4], decreasing = TRUE),]

  #結合
  RGBCol <- cbind(ItemList[i], CharaName[i], RGBCol, CountColor[, 2])
  
  #プロットデータの作成
  MasterRGBCol <- rbind(MasterRGBCol, RGBCol)
  
  #必要のないImage,LABCol,RGBColの削除
  rm(Image,LABCol,RGBCol)
    
}

#行名の付与
colnames(MasterRGBCol) <- c("NO", "キャラ", "明度:l", "補色次元:a", "補色次元:b", "カラーコード", "出現数")

#ファイルの保存、解析画像数によってはファイルサイズが非常に大きい場合があります
#また、エクセルなどで読み込めないことがあるのでコメントアウトしています。
#setwd(paste(as.character(tkchooseDirectory(title = "保存場所を選択"), sep = "", collapse ="")))
#write.csv(MasterRGBCol, "分析結果.csv", fileEncoding = "CP932", eol = "\r\n")
###E:フォルダ内の全画像からカラーコードを取得#####


###データのプロット#####
#軸の設定
xRange <- seq(0, 1, by = 1/ItemVol)

#グラフ幅の設定
xWidth <- seq(1/ItemVol, 1, by = 1/ItemVol)

#プロット領域の作成
par(bg = "#2E2E2E")
#plot(0:max(c(xRange, xWidth)), 0:max(c(xRange, xWidth)), type = "n", axes = FALSE, xlab = "", ylab = "")
plot(0:1, 0:1, type = "n", axes = FALSE, xlab = "", ylab = "")
box()

#プログレスバーの設定
pb <- progress_bar$new(format = "  処理状況 [:bar] :percent",
                       total = length(ItemVol), clear = FALSE, width= 60)

#テーブル作成用のデータ格納用変数
TableDrowData <- NULL

for(k in seq(ItemVol)){
  #プログレスバーの表示
  pb$tick()
  
  #データの抽出
  Plot <- subset(MasterRGBCol, MasterRGBCol[, 1] == ItemList[k])

  #出現数で並び替えてTOP20を抽出
  Plot <- Plot[order(as.vector(Plot[, 7]), decreasing = TRUE),]
  Plot <- head(Plot, n = 20)
  
  #プロット内容の指定
  #明度で並び替え
  #行番号を指定することで並び替えの基準を変更できます
  #2行目"明度:l", 3行目"補色次元:a", 4行目"補色次元:b", 5行目"カラーコード"
  Plot <- Plot[order(as.vector(Plot[, 3]), decreasing = TRUE),]
  
  #テーブル作成用データ
  TableDrowData <- rbind(TableDrowData, Plot[, c(1, 2, 6, 7)])
  
  #データのプロット
  rasterImage(as.raster(Plot[, 6]),
              xRange[k], 0, xWidth[k], 1, interpolate = FALSE)
  
}

#色付きJavaテーブルの作成
#パッケージの読み込み
library("DT")

#HTMLファイルの保存場所を指定
setwd(paste(as.character(tkchooseDirectory(title = "保存場所を選択"), sep = "", collapse ="")))

#テーブルの作成
DataTable <- datatable(TableDrowData, rownames = FALSE, options = list(pageLength = 10, lengthMenu = c(5, 20, 40, 120)),
                       caption = 'シャーロット カラーパレット', escape = FALSE)

#キャラ名のセルの色をパイプ"%>%"でつなげてformatStyleで設定します
DataTable <- DataTable %>% formatStyle('カラーコード',
                                       backgroundColor = styleEqual(TableDrowData[, 3], TableDrowData[, 3]))
#作成テーブルをhtmlで出力
saveWidget(DataTable, 'DataTable.html')

少しでも、あなたのアニメ生活が充実しますように!!

スポンサードリンク

おすすめコンテンツ


スポンサードリンク