ブレンドモードを定量的に把握する with OpenCV | Nature | Photography | Music | Art

Nature | Photography | Music | Art

日々好奇心の趣くまま

サイト内の写真の使用ならびに無断転用を禁じます。

写真は数年前に阿蘇の麓で極寒ビバークした時、しばらく悪天が続いた後の久しぶりの日の出を撮影したもの。
結構思い入れのある写真でtwitterのヘッダ画像にも使っています。




おそらくこのあたりも現在は大変なことになっていると想像します。

阪神と東日本の2つの震災を実体験した身なので、現地の混乱や不自由は容易に想像ができ、早期復興を願うと共に被害に遭われた方々にお見舞い申し上げます。

更に九州には阿蘇カルデラや鬼界カルデラなど本気を出されたら大災害どころではすまないような火種もあるので、昨今の広範囲な地殻運動の活性化がこのあたりに波及しないことを願うばかりです。

話はがらっと変わって、

前回ちょこっと書いたPhotoShopやAfterEffectsのブレンドモード。

元画像を2つ(もしくはそれ以上)に複製し、それぞれに異なる画像処理を施した後にこのブレンドモードで再合成してインパクトのある画像にするという方法は定番手法になっているようです。

例えば簡単な例だと、これが元画像。



元画像のコントラストを上げてからシャープ処理をしたもの(A)



元画像にガウシアンブラーをかけたもの(B)



Bの上にAを重ねてAのブレンドモードをSoftLightに



(あまり上手くないが)輪郭を保ちながらガウシアンの柔らかさが出ているかと思います。

このブレンドモード、どういう効果が出るかはよく使うものに関してはだいたい感覚的に会得しているが、きちんと定量的に理解しているかというとチト怪しい。

それではいかんということでブレンドモードのアルゴリズムについてググってみると、StackOverflowに素晴らしい記事があった。

http://stackoverflow.com/questions/5919663/how-does-photoshop-blend-two-images-together


なんと、主要な各ブレンドモードの演算方法をC(++)でサンプルを上げてくれている。

折角なので、このサンプルをベースにしてOpenCV上で2画像を様々なブレンドモードで合成するマクロを作ってみました。(アルファブレンドに関しては外部パラメータが必要だし、ここで追求するまでもなく単純なので割愛)

https://github.com/delphinus1024/blend_mode

使い方はreadmeに譲るとして、ブレンドモードを更に定量的に理解するために、このマクロとmatplotlib(最近流行りのvisualization・見える化ができるライブラリ)を使って各ブレンドモードの演算結果を3Dにプロットしてみました。

X,Y軸は各画像の任意の位置のピクセル値。 Z軸がブレンド後のピクセル値となります。(簡易化のためグレースケール。RGBの場合は各チャンネルにそれぞれこれが適用される。)

16毎のメッシュ計算で見やすいように等高線表示させてあるので、実際はなだらかな曲面です。

順不同

















































どうでしょう。だいぶ直感的に分かるように見える化されてないでしょうか。