ピクセルごとの色相をEXCELで計算し出力する
発端
何かそんなツールがありそうなのですが、見つけられなかったのでやってみました。画像で使われている色の偏りを調べたかったからです。今回はあくまでも色相だけを見ています。
RGB値の取得
RGB値を1ピクセル毎に保存するツールを探したのですが、GIMPを使って.ppm形式だとよさそうでした。
GIMPについて
ppmファイルについて
ppmファイルをテキストファイルに変換する
ppmのファイルを選択し、拡張子を.txtにします(拡張子を表示していない場合はOSの設定で変更してください)
txtに変換したファイルを開き、最初の3行ないし4行程度を削除します。空き行が無い方がいいかと思います。
画像は削除した部分をハイライトしています。
削除後、保存します。
GIMPの場合は上から4行を削除しました。
内容を整形する
正規表現で検索置換できるツールをつかってさきほど保存したファイルをひらきます。
MacですのでCotEditorを使っています。
このデータは219がR、233がGと3つの数字で1ピクセルとなっています。
まず、改行をカンマに変更します。
検索ワードに \n(改行)を入力、置換ワードに , (カンマ)を入力し置換します。
(変換前)
(変換後)
R,G,B,R,G,B......とデータが並んでいます。
これではエクセルで一気に変換できませんので、
R,G,B,
R,G,B,
R,G,B,
と3つ区切りにします。
検索置換で、検索ワードに (.+?,)(.+?,)(.+?,) を、置換ワードに
$1$2$3\n
を入れて置換します。
(変換前)
これで、左からR,G,B,(改行)のデータになりました。
ここでファイルを保存します。
ホソンしたファイルの拡張子を.csvに変換します。これでEXCELで読み込む準備ができました。
EXCELで開く
保存したCSVファイルをEXCELで開きます。
1行目に行を追加し、A1セルにR、B1セルにG、C1セルにBと入力しておきます。
RGBからHSBなどへの変換公式は検索してみてください。
まず最大値を取り出します。 =MAX(A2:C2)
次に最小値を取り出します。 =MIN(A2:C2)
次にRGBのうち、最大となったセルがRかGかBかを判定します。 EXCELのINDEXやMATCH関数を使います。
=INDEX($A$1:$C$1,0,MATCH(MAX($A2:$C2),$A2:$C2,0))
最大の値がRかGかBかで変わりますので、IFを使ってHの値を計算します。
=IF(AND(EXACT(A2:C2,C2)),0,IF(COUNTIF(F2,"R"),60*(B2-C2)/(D2-E2),IF(COUNTIF(F2,"G"),60*(C2-A2)/(D2-E2)+120,IF(COUNTIF(F2,"B"),60*(A2-B2)/(D2-E2)+240,))))
負の値の場合を計算します。
=IF(G2<0,(G2+360),G2)
今回はおおかまな割合を見たいので、30度ずつに分割します。
=IF(OR(H2>344,H2<15),0,IF(AND(H2>14,H2<45),30,IF(AND(H2>44,H2<75),60,IF(AND(H2>74,H2<105),90,IF(AND(H2>104,H2<135),120,IF(AND(H2>134,H2<165),150,IF(AND(H2>164,H2<195),180,IF(AND(H2>194,H2<225),210,IF(AND(H2>224,H2<255),240,IF(AND(H2>254,H2<285),270,IF(AND(H2>284,H2<315),300,IF(AND(H2>314,H2<345),330))))))))))))
円グラフにします。
210度(195〜224度)が56%と多いですね。
元画像(職場なのでぼかしてます)はこちらです。
おつかれさまでした。