読者です 読者をやめる 読者になる 読者になる

プログラムdeタマゴ

nodamushiの著作物は、文章、画像、プログラムにかかわらず全てUnlicenseです

ぼかしてみよー!

プログラム

ぼかしについてちょっとググってみたらこんなページを見つけた(URL
このページをざっと要約すると、RGB値は明るさの対数表現なんだって。
分かりやすい身近な例では、音なんかも同じだよね。一オクターブ上がると振幅数は元の値の二乗に増えるのは結構有名だと思う。
そして、人間の目は明るさを指数的に捕らえているのに対し、カメラのフィルタは明るさを直線的に捕らえているらしい。
だから、RGBを対数表現からもどして、ぼかしを加えるとカメラのボケに近い物ができるという事だ。

ほう。

まぁ、百文は1回やってみるに如かず。よかろう、やってみよう。

元画像

写真は商用利用でも無料で利用できる!無料写真素材集・Gra free photo様よりお借りしました。ありがとうございます。

さて、まずはこの画像に8×8ピクセルのガウシアンフィルタをかけて普通にぼかしてみます。


暗い部分も明るい部分も区別無く混ざり合ってぼんやりとしました。元の画像が暗いので全体的に暗くなってしまいました。

さて、今度はRGBを指数表現から元の直線表現に戻してから全く同じガウシアンフィルタをかけてぼかし、その後にまたRGB値に戻してみます。



ものすっごい明るくなりました。でも、確かに私が●ズニーランドで撮ったぼけまくった写真こんな感じだったかも。

今回はRGBを変換するとき.1.03^m(1.03のm乗 mはRGB値)を使っています。最初1.1でやったのですが、明るすぎてとてもじゃないけど流石にこれはどうよ?という物になってしまいました。1.03でもまだ値が大きいようですね。

指数で結果が変わるのは明るい部分に対してマスクの値がどれぐらい有効な値であるかが変わってしまうからです。
たとえば、指数1.1で、R値が255だったら実に1.1^255は30億ぐらいになってしまいます。たとえ、マスクの値が1%でも3000万。R値に戻せば180ぐらい。1%でものすごい影響力。話になりません。
これにたいし、1.03^255は1800ぐらい。1%なら18で、マスクが効いてきます。
以下にもうちょっと値を下げた物を置いておきましょう

指数1.02


指数1.01


指数1.005


1.01ぐらいが、元の赤みも残しつつ良い感じに明るくなっているような気がします。

それにしても、フィルタは全く同じなのに、中々面白い結果が出ましたね。
RGBそれぞれ別個にやるんじゃなくて、一つの波長として計算するとまた違った別な物とか出来るのかなぁ?

今日はこんな感じでさようなら〜


おまけ

ガウシアンフィルタアルゴリズム作成ミスで何だか横方向モーションブラーみたいになった