Rでお遊び:シャーロット第1話「我 他人を 思う」から10シーンの色使い

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

アニメ「シャーロット」第1話、期待通りの内容でした。どのように物語と登場人物の超能力が絡んでいくのかが注目です。また、「星」がキーワードとして出現していましたが何と関係してくるのでしょうか。

非常に話の展開がよく、ストレスなく見ることができるアニメかと思います。ダンまちに続き見ていこうと思います。

早速ではありますが、個人的に印象に残った「10シーン」の色使いを解析してみました。アニメで使用されている色使いは資料作成に役に立つことが多いです。

解析結果は各場面の使用頻度TOP500色のプロットと各場面の使用頻度TOP20のカラーコードをテーブルで紹介します。

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

スポンサーリンク

解析に使用した10シーン

解析画像

結果

coneCol

・各場面の使用頻度TOP500色のプロット
左からシーン1〜10です。

・各場面の使用頻度TOP20のカラーコードのテーブル
モバイルの方はこちらからご覧いただくと見やすいです。
別ウィンドウで開く


実行コマンドの紹介

下記コマンドを実行してください。詳細はコメントを確認してください。

#パッケージのインストール
#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)

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

#テーブル内容を昇順で並び替え
TableDrowData <- TableDrowData[order(as.vector(TableDrowData[, 1]), decreasing = FALSE),]

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

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

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

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