t-hom’s diary

主にVBAネタを扱っているブログ…とも言えなくなってきたこの頃。

黒つぶれの写真の方が良い素材? VBAで検証してみた

最近まよい犬さんが写真に凝っているようで、読んでたらなんだか写真も楽しそうだなと思えてくる。
www.mayoinu.com

まあ、私の場合は今のところ特に取りたいものがあるわけではなく、単純に技術的な面に興味があるのだが。

さて、ネットで色々と調べていたら、こんな記事を見つけた。
photo-studio9.com

これは目から鱗だ。一見、建物が綺麗に写っている右の写真が良いと思うが、あくまでRAW画像を「素材」と考えたとき、黒つぶれしている左の方が良い素材となる可能性があるとのこと。

人間の目には真っ黒に見えても、デジタル画像であれば階調は数値の差としてはっきり残っている。

どういうことか、実際にVBAで検証してみた。
(実行にはExcel2007以上が必要である)

まずはExcelを方眼紙のように綺麗なマス目にする。

Public Sub sq20()  '方眼紙化
    ActiveSheet.Cells.RowHeight = 12
    ActiveSheet.Cells.ColumnWidth = 1.44
End Sub

そして、以下のマクロで20*20のセルに色をつける。

Sub 黒つぶれ()
    For x = 1 To 20
        For y = 1 To 20
            Cells(y, x).Interior.Color = RGB(x, 0, y)
    Next y, x
End Sub

f:id:t-hom:20150816111038p:plain
殆ど真っ黒だが、一応セルごとに色が違うので、モニターによっては若干の差が分かるかもしれない。

さて、この黒つぶれのセルそれぞれの色味を二倍する。

Sub 色味二倍()
    For x = 1 To 20
        For y = 1 To 20
        With Cells(x, y).Interior
            'RGB値から、それぞれの値を分離する。
            B = Int(.Color / 256 ^ 2)
            G = Int((.Color - (B * 256 ^ 2)) / 256)
            R = .Color - (G * 256) - (B * 256 ^ 2)
            
            '各色を2倍
            .Color = RGB(R * 2, G * 2, B * 2)
        End With
    Next y, x
End Sub

1度実行しただけでは今ひとつハッキリしなかったので、3回実行してみた。

すると、ご覧のとおり。

f:id:t-hom:20150816112243p:plain

色味の差が明確に分かるようになる。

ただし4回目に実行すると、一部色の階調が飛んでしまう。

f:id:t-hom:20150816113700p:plain

これは色味の最大値である255を超えてしまうためである。
イミディエイトウインドウを使って、以下のように確認できる。

?20*2^3
 160 
?20*2^4
 320

階調さえデータとして残っていれば、フォトレタッチソフトで色味を復元できる。

白飛びするというのは、色の要素の値が255になってしまうこと。
逆に、少しでも階調が残っていればある程度復元できる。

VBAでやってみた。

Sub 白飛びもどき()
    For x = 1 To 20
        For y = 1 To 20
            Cells(y, x).Interior.Color = RGB(255 - x, 255, 255 - y)
    Next y, x
End Sub

…しかし。。

f:id:t-hom:20150816120416p:plain

こちらは真っ白ではなく、うっすらと色味が確認できる。
ということは、人間の目で見た白飛び画像はやっぱり本当に255に逝ってしまってる可能性が高い。

まあ、一応検証続行

こちらは色味を半分にしても上手くいかないので、まず1度だけ以下を実行して明度を落とす。

Sub 明度減()
    For x = 1 To 20
        For y = 1 To 20
        With Cells(x, y).Interior
            'RGB値から、それぞれの値を分離する。
            B = Int(.Color / 256 ^ 2)
            G = Int((.Color - (B * 256 ^ 2)) / 256)
            R = .Color - (G * 256) - (B * 256 ^ 2)
            
            '元が235~255の20階調なので、最低値を0にするため235を引く
            .Color = RGB(R - 235, G - 235, B - 235)
        End With
    Next y, x
End Sub

すると、黒つぶれ画像が得られる。
f:id:t-hom:20150816120909p:plain

あとは先ほどと同じ色味二倍マクロを3回実行すれば、こんな感じになる。
f:id:t-hom:20150816121106p:plain

あと1回実行するとさらに鮮やかになるが、その代償として一部の色が白飛びする。

検証から得られたことは、白飛びは本当に飛んでしまっている可能性が高く、黒つぶれは実際には階調が生きている可能性があるということ。

ただし、あくまで私のモニター上の検証なので、違うモニターだとどうなるか分からない。安いモニターだと、飛んでないのに白飛びに見えたりするかもしれない。
写真編集をされる方は、モニターもRGBを正確に再現できるものをチョイスしたい。

オススメはEIZOFlexScanシリーズである。
私はこれを使っている。

色味に正確なRGBモード、ネットで目疲れしにくいPaperモードなどを切り替えられる。
www.eizo.co.jp

また上記の機種は疲れ目対策に良いDC調光を採用している。
www.eizo.co.jp

あと、ディスプレイにかなり厚みがあるが、これは画質を安定させるためにバックライトが詰まっているからだそうで、他社製品に比べると輝度ムラが少ない。

大きい、重い、分厚いのが難点だが、性能は抜群に良いので置き場所に困らない方は使ってみてほしい。

IPSモニターもある。

でも正直、5万は高いな。

私はTNモニターで十分満足している。

当ブログは、amazon.co.jpを宣伝しリンクすることによってサイトが紹介料を獲得できる手段を提供することを目的に設定されたアフィリエイト宣伝プログラムである、 Amazonアソシエイト・プログラムの参加者です。