R로 통계 해석 : 도시락의 색채의 풍부함

지난 4월부터 아이가 고등학교에 진학했다. 동시에 도시락을 만드는 날들이 시작되었다.

뭐, 그 자체는 상관없다. 그러나, 이미 4~5년전이 될까, 뭔가의 기회에 초등학생이었던 아이에게 도시락을 만들어 갖게 했을 때, 동급생으로부터 「색채가 없네」라고 말해졌다, 라고의 말을 귀가한 아이로부터 받았다. 힘들어.

그렇다면 색채의 풍부함을 스칼라 값으로 표현하고 싶다고 생각하는 것이 보통이다.

도시락의 사진을 찍어 그 색채의 풍부함을 평가하는 방법이 있으면, 개량의 동기 부여를 유지하는데 도움이 된다. 라고 생각해 조금 구그라고 보았지만 잘 모른다. 그래서 색채의 풍부함의 수치화를 생각했다. 하나의 색이 하나의 파장이라고 생각하지만, 사진 데이터는 RGB로 분해되어 있기 때문에 그 비율이 색이라고 할 것이다. 에서 지금 도키의 사진은 마음대로 대비가 조정되고 있거나 하지만, 아무튼 안이하게 생각하면, 색채의 풍부함 수치화 알고리즘은 이런 느낌이 될까.

1. 밝은 점과 어두운 점을 5%씩 버린다
2. 각 점에서 RGB의 3치로부터 비율을 2회 취한다 $r = B/(G/R)$
3. $r$의 분산 계산

이 마지막 값이 클수록 풍부하다는 판단이다. R 스크립트를 쓰고, 시험에 반찬 부분만 잘라낸, 대부분의 색채의 모습이 다른 화상 3장에 대해서 계산해 보았더니, 0.0357, 0.0548, 0.0574였다. 수치만 봐도 아무것도 모르지만, 도시락을 만들 때마다 계속적으로 이 값의 변화를 봐 가면, 참고가 되자.
library(jpeg)

# 弁当の写真のファイルは、JPEG フォーマットで拡張子は JPG に固定
# カレントディレクトリでファイル名に "JPEG" を含む全てのファイルが対象
# 画像の各ピクセルについて計算した R3 の値の分散値を彩りの豊かさを判断材料にする
for (f in list.files(pattern = "JPG")) {
  img  <- readJPEG(f);                    # 画像を行列に読み込み
  L    <- 3 * 0.05;                       # 暗い方の閾値
  U    <- 3 - L;                          # 明るい方の閾値
  m    <- img[,,1] + img[,,2] + img[,,3]; # 輝度値合計 0 <  m  < 3
  imgR <- img[,,1];                      # 赤の輝度値 0 < img < 1
  imgG <- img[,,2];                      # 緑の輝度値
  imgB <- img[,,3];                      # 青の輝度値
  imgR <- imgR[(m > L) & (m < U)];       # 暗すぎる|明るすぎる点を捨てる
  imgG <- imgG[(m > L) & (m < U)];       # 暗すぎる|明るすぎる点を捨てる
  imgB <- imgB[(m > L) & (m < U)];       # 暗すぎる|明るすぎる点を捨てる
  R1   <- imgG/imgR;                     # 緑と赤の比
  R2   <- imgB/imgR;                     # 青と赤の比
  R3   <- R2[R1 != 0] / R1[R1 != 0];     # 上の二つの比の比
  cat(f, var(R3), "\n");                 # 二つの比の比の分散
}

0.0357
0.0548
0.0574

R 의 신택스 하이라이트에서는 변수명에 숫자는 들어가지 않는 것이 좋을 것 같다.

좋은 웹페이지 즐겨찾기