Milkのメモ帳

日々の思いつきを忘れないようにのメモ用です。

Milkのメモ帳

なぜ白飛びしている画像は加工できないの?


f:id:maxminkun:20160713150959j:plain

購読させていただいている方の中に、興味深い記事がありました。

gentarou62.hatenablog.com

流行っていますよね。Instagram

私はどちらかというと、Facebookに買収されたことの方に興味が行ってしまうのですが(←だめだねww)

画像データはどのように保持されているか

この記事の中で、様々な写真加工法を紹介されていて面白いのですが、ある一文が特に興味を引きました。

白飛びしてしまうと編集できません。

あなたは使ってる? instagramの6つのEDIT機能 - 赤裸々ノーガード

なぜ白飛びしていると加工が出来ないのか知っていますか?

そもそも白飛び(サチる)の状態とは?

この白飛びと言ったり、サチると言ったりする状態は、光の量が多すぎる状態のことを言います。

カメラの構造については、昔書いた記事があるのでちょっと割愛して・・・

www.milkmemo.com

カメラの奥には、CCDやCMOSと言ったイメージセンサと言う物が入っています。

写真を撮る時に、絞り値を小さくし過ぎたり、シャッタースピードが遅すぎたりすると、光が多く入りすぎて写真全体が白くなってしまう。

この状態を白飛びまたは、サチると言うのです。

画像はどのような状態でデータ保持されているか

写真画像は以下の3つの値を組み合わせたデータです。

R(赤)、G(緑)、B(青)

この画像についての色の配合の表し方は他にもありますが、今回は一般的なRGBカラーモデルで話を行います。

光というのは、RGB全ての色が混ざった時に白になるという性質があります。

RGB - Wikipedia

https://upload.wikimedia.org/wikipedia/commons/thumb/c/ce/Barn_grand_tetons_rgb_separation.jpg/320px-Barn_grand_tetons_rgb_separation.jpg

参考画像をWikipediaから借りてきました。

実際のところ、画像をRGBに分解すると、上のように赤の写真、緑の写真、青の写真というようには別れません。

イメージしやすいように上のように色をつけているだけです。

どういうことかって?

本来は、赤だけの写真(R成分を抽出した写真)を取り出すと、GとBの成分はない、ただのRの値だけを持っている写真となりますから、それはモノクロ写真と状態は一緒になります。

画像の各ピクセル(画像の最小単位の点)はRGBの値を持っていて、それを合わせることで色を表現しています。

そしてRGBはデジタルの特性上、0〜255の段階で表します。これはその1ピクセルの情報量を1byte(8bit)で記憶しているからです。(1byteで表せる10進数が0〜255までだからです。もちろんこの記憶容量を大きくすればもっと細かく情報を持つことは可能です。しかし、そこまで大きくすると画像の容量自体が大きくなり、カメラのSDカード等のメモリに写真画像が入りきらなくなります。)

例えば3ピクセル×3ピクセルの小さな画像があるとしましょう。

その写真は以下の情報を持ちます。

R(赤)成分
100 105 255
200 10 35
40 95 30
G(緑)成分
50 105 255
200 10 35
40 95 10
B(青)成分
178 3 255
30 10 15
0 45 30
モノクロ写真
50 3 255
100 125 150
30 45 20

どうですか?各RGBに分解した状態の画像は、モノクロ写真の状態と情報の保持の仕方は変わりません。

ですから、RGB分解した画像はグレースケール化(白から黒の変化で表した状態)した状態で本当は表されます。

まぁ・・・ここまではちょっとした雑学なので、本題に戻りましょう。

白飛び(サチる)とはどういうことか

この白飛び(サチる)ということは、データ的には以下の状態になっていることを言います。

R成分:255
G成分:255
B成分:255

そして、赤・緑・青を混ぜると、光は白になります。なので、この状態を白飛び(サチる)と言うのです。

もう一歩踏み込んで話をすると、この白飛びしている状態というのは色の情報が飽和している状態と言えます。

つまり、本当は何か物があって写真を撮りたいのに、周りが明るすぎて255段階の色情報を超えているからです。

この状態で撮った写真は、データ情報としてはRGBの全てが255(色を表せる限界値)であるため、見た目は白、つまり何も輪郭情報を持っていません

RGBが255以外だと?

例えば、RGB全て200だとどうでしょうか。

この場合は、全ての成分が均等であるためグレーになります。

RGB成分が連動して変化している場合は、グレースケール化した写真(モノクロの写真)になります。

ペイントソフトで試してみると一番分かりやすいと思います。

f:id:maxminkun:20160713161110p:plain

白飛び(サチる)した写真を修復は出来ない

結論としては分かりきったことですが、白飛び(サチる)した状態の箇所は加工のしようがありません。

そこには表現領域を超えた状態、つまりRGBが255以上の状態が存在していて、データが飽和しているからです。

もっと違う言い方をすると、写そうとしているものを正常にデータ変換出来ていないため、データ欠損をしている箇所と言い換えることも出来ます。

データ欠損が起きた写真は、その後の加工で、RGB成分を変更しても意味はありません。

既に輪郭等の情報は欠損してなくなっていますから・・・

ということで、白く光って情報を持っていないため、このような箇所は、写真加工によって物体を見えるようにすることは不可能なのです。

似た事象

これと似た事象は他にもあります。

実は、デジタルのデータは全てこのような事象が発生する可能性があるのです。

例えば音楽。

音もCDというデジタル情報で保存するために、サンプリングレートと量子化ビットというものでデータを記憶しています。

とても分かりやすい図がブログにありましたので、ちょっとお借りしてきました(すみません。)

xiaoxia.exblog.jp

http://pds.exblog.jp/pds/1/201408/21/75/a0003075_17491933.png

この図はCDのデータはどのように記憶されているかという図式です。

音とは、波形で表されます。

サンプリングレートとは、毎秒を何分割して記憶するかというタイミングを表します。

量子化ビットとは、波形の高さを何分割して記憶するかを表します。

音の欠損(クリップ)

たまに潰れた音や、バリバリという破裂したような音がスピーカーから出ることがあります。

これは、音の波形が想定している量子化ビットより大きい場合(記憶できる状態を波形が超えている)にデータを記憶できず、飽和した状態(正確に音をデータ化出来ずに欠損が起きている)が発生しているのです。

その結果、音を再生する時に、収録した音を再現出来ずに、潰れた音や破裂音となって(クリップと言う)表現されてしまうのです。

因みに、ディストーションと言って歪んだり潰したりした音に加工することは、また違います。

これは正常なデータ情報をそのように聞こえるように加工した状態ですから、データ欠損は起きていません。

最後に

という訳で、世の中はほぼデジタルでデータが扱われています。

そして、その扱える許容量を超えた状態(飽和状態)になった場合に、データ欠損として状態が表現されることになるのです。

なので、白飛び(サチる)が発生した場合は、画像を加工してどうにかしようなんて考えず、もう一度ちゃんとカメラの調整をして撮り直す方が良いです。

白飛び(サチる)したら、もう小手先の加工では無理ですから・・・;


では、今回はここまで!

adios!!