2016年12月16日 (金)たまにやるならこんな言語
師走に入り、大阪も冬本番。
社内も社外も風邪が流行っています。
皆さんは体調を崩されていないでしょうか?
本日のブログ当番M.I.です。
少し前に画面全体のコントラストが弱く感じたので、
ポストプロセスでコントラストを上げたくなったことがありました。
輝度の低いところはより低く、高いところではより高く変換することで実装します。
画像をいじる人ならばトーンカーブを変更するという言い方の方が
分かりやすいかもしれません。
しかし、UE4のマテリアルには
トーンカーブを変更するというような直接的な機能はありません。
輝度値を取り出すのならRGBを取り出し、
HSL変換のLを変更してRGBに戻せばよさそうです。
コントラスト用関数で調べると、
高い値をより高く、低いところをより低くする関数として
シグモイド関数というものがあるらしいです。
ただ、今までそんな関数を知らなかった私には
何の数値を与えればどういう数値になるか想像もつきません。
とりあえずプロットしたい、エクセルでもプロットできそうですが、
ささっとコードを書いて確かめたい。
そんなときにRという言語があります。
統計や機械学習といった分野で活躍しているスクリプト言語です。
統計学者が作ったということで
2つのパラメータ間に相関関係があるかどうか調べる回帰分析、
音声認識などに使われる分類問題を解く機能もあり、
線グラフや分布図が手軽にプロットできるといった特徴があります。
例えば
plot(sin)
これだけでsinのxが0~1までの各値がプロットされます。
-3.14~3.14までをプロットさせれば1周期分見られます。
xlimに最低値、最大値を渡せばいいですね。
plot(sin , xlim = c(-3.14,3.14))
-3.14からちょっとずつ増やした値をsinに渡し、プロットさせるわけです。
こういったグラフが表示されます。
さて本題のシグモイド関数をプロットさせてみます。
2つの変数でグラフの傾きなどの特性を決められるようです。
関数定義はこういう書き方です。
http://www.hamanoweb.com/blog/?p=3408
の数式を参考にさせてもらいました。
sigmoid<-function(h,a,z) |
Rは最後に評価された式が返り値として扱われるタイプの言語です。
なのでreturn と書く必要がないのです。
先ほどのsinのようにプロットさせるには、
変数2つを固定して1引数関数として扱えばよさそうです。
sigmoidPlotter<-function(h,a) |
2引数関数に1引数関数を返させるのも自然な書き方で実現できます。
h<-0.5 |
こういったグラフが表示されます。
何度か値を変えてプロットした結果、
hを中央として、aが大きいほど急なカーブを描く関数だということが分かりました。
また、アーティストさんにこういうトーンカーブにします、
という風に説明しやすくなりました。
画像から輝度を取り出すのはHSL変換なりで調べてもらえればいいので割愛します。
ただ時間がなかったので、下の画像はすでにやり方を知っている明度変更で実装しました。
結果が以下のようになりました。
元画像
コントラストを強めたもの
自在にトーンカーブをいじるなら
ルックアップテクスチャを用意するといったことが必要かもしれませんが、
手軽にコントラストを入れたいなら今回の方法も使えるかもしれません。
| 固定リンク | コメント (0) | トラックバック (0)
「プログラマー」カテゴリの記事
- 技術交流の業(2019.03.07)
- 福袋争奪戦デビュー(2019.01.31)
- 温泉旅行(2019.01.24)
- ゲーセンの近況(2018.11.29)
- 健康的にプログラミングを続けるためのちょっとした習慣(2018.10.18)
この記事へのコメントは終了しました。
コメント