Top

「紫色」には、どのデジカメでも撮影できる「紫色」と、多くのデジカメで撮影できない「紫色」があります。撮影できない「紫色」は、デジカメのホワイトバランスや露出を変えても正しい色にはなりません。また無理に合わせると写真の他の部分のバランスが崩れます。以下の内容は、その理由を書いたものです。

※ このページに書かれた各図は、説明が分かりやすいように私が手書きしたものです。精度はそれなりですから、あくまで説明を読む際の参照程度に考えてください。CCDのデータはSONYが公開していたPDF版スペックシートで、自分のPCにダウンロードしていたものを参照しています。現在はデジカメ用CCDのスペックシートは公開していないようです。

光の色

光は電磁波の一種であることをご存知でしょうか。電磁波には、テレビや携帯電話などで使われている電波も含まれます。電磁「波」というぐらいですから、光や電波は一定の周期(周波数)で振動しています。光と電波の違いは、光の方が周波数が非常に高いことです。

音は空気の振動ですが、人間の耳はこの振動を捕らえることができます。振動の速さ(周波数)で音の高低を、振動の強さで音の大小を聞き分けています。人間の目も同じように、電磁波の周波数で色の違いを、振動の強さで明るさを見分けています。ただし、知覚できるのは一定範囲の周波数だけです。波が一秒間に何回振動するかを表す単位としてHz(ヘルツ)が使われますが、音の場合は20〜20000Hzの範囲でないと聞き取ることができません。20000Hzを超えると超音波、20Hz以下だと超低周波といわれる聞こえない音になります。

光の場合も同じで、目に見えるのはの390〜790THz(1THz=1兆Hz)の範囲だけです。これより周波数が高いと紫外線、周波数が低いと赤外線となって、やはり目には見えません。目に見える光を可視光線といいますが、この範囲から外れると急に見えなくなるわけではなく、周波数の上限または下限に近づくほど見えにくくなります。周波数の高い方が低い方の約2倍しかありませんから、音に比べるととても狭い範囲です。
光のように非常に周波数の高い電磁波の場合、周波数より波長(1回振動する間に、光がどれだけ進むか)で表すのが一般的です。光は1秒間に30万km進みますが、周波数が非常に高いため、波長では380〜780nm(1nm=10億分の1m)になります。

光の波長の違いを色として見分けているわけですが、その関係はおおよそ次のようになります。

380〜430nm 紫(青紫)
430〜460nm 藍(青)
460〜500nm 青(青緑)
500〜570nm
570〜590nm
590〜610nm
610〜780nm

ただし「400nmの波長の光は紫色だ」とは言えますが「紫色の光は約400nmの波長だ」とは言えません。普段目に入る光には、1種類の波長(単波長)の光だけではなく色々な波長の光が混じっています。上記した単波長の光と同じ色が、2種類以上の波長の光が混じることでも見える場合があります。

光の三原色はご存知でしょう。下の図のように、赤・緑・青の3色の光を組み合わせることで、全ての色を表すことができるというものです。それぞれの色を正確に言えば赤・黄みの緑・紫みの青となるので、これ以降はR・G・B(Red,Green,Blueの頭文字)の記号で表します。

3colors.png(1977 byte)
図1.光の三原色

目に入る光は、通常さまざまな波長の光が混じりあっています。下の図は、太陽光に含まれる可視光線の各波長ごとのエネルギーを示したものです。ある程度強弱のばらつきはありますが、太陽光には図の範囲の全ての波長が含まれています。

spectrum1.png(2226 byte)
図2.太陽光の波長分布

物体は光が当たると、その一部を反射して残りは吸収または透過します。人間の目はその反射した光によって物の色を見分けています。他の波長に比べて赤の波長の光を多く反射する物があれば、その物は赤く見えます。同じように赤の波長の光を反射しても、他の波長の光も同じように反射すれば、三原色の図にあるようにその物は白く見えます。

図1のようにRとBの光を同じ強さで重ねればマゼンタ(赤紫)になります。BをRの光より強くすることで色が青に近づけば紫色になります。つまりRとBの波長の光が混じって目に入ることでも紫色に見えます。ただし、2種類以上の光が重なることで別の波長の光になる、というわけではありません。
人間の目の仕組みが「赤と青の両方の波長が混じった光」と「紫の単波長の光」が同じ色に見えるようになっているためです。

※ このページで紫光や黄光などと書いた場合は、それぞれ単波長の光を示します。

人間の目には錐体という光の強さと色の違いを感じるセンサーがありますが、波長の違いそのものを見分けられるわけではありません。感じる光の波長が違う3種類のセンサーを持ち、それぞれが感じる刺激の割合から、色の違いを認識します。
(人の目が色を感じる仕組みについては、諸説があるようですが、光による三種類の刺激の強弱(三刺激値)で説明できるということは間違いないようです。)

原色フィルター

構造はまったく違いますが、人の目が色を感じる仕組みは、基本的に原色フィルターのイメージセンサーと同じです。

デジカメには、フイルムの代わりにCCDやCMOSなどのイメージセンサー(これ以降ではCCDと表記)があります。CCDの表面には画素数分の光センサー(500万画素のCCDなら、500万個の光センサー)があり、その各センサーの表面に特定の波長の光だけを通すカラーフィルター(色ガラスのようなもの)がついています。フィルターが通す色によって、原色フィルターと補色フィルターに分けられます。

sensor.png(4178 byte)
図3.イメージセンサーとカラーフィルター

原色フィルターの場合は、RGBそれぞれの光だけを通す3種類のフィルターが使われていますが、図3を見るとGのフィルターがRやBの2倍使用されています。画像の情報には色と明るさがありますが、人間の目は色の変化より明るさの変化の方に解像度を感じます。Gは人間の目が感じる明るさに最も近い色ですから、Gを増やした方が解像感は高くなります。

フィルターは特定の波長の光だけを通すのですが、正確に言えばその波長にはある程度の範囲があります。下の図は、3種類のフィルターを光センサーと組み合わせたときの特性(分光感度特性)を示したもので、横軸が光の波長、縦軸が各センサーの感度となっています。グラフの線が上になるほど、その波長の光を受けたときにセンサーから読み出される値が大きくなります。

prim1.png(4104 byte)
図4.原色フィルターCCDの分光感度特性

Rセンサーは、赤から橙の光(700〜600nm、700nmの方が低いのは可視光線上限で目の感度が低下するのに合わせたため)でよく反応しますが、黄光(580nmあたり)に対しても反応します。Gセンサーも同様に、緑光(530nmあたり)だけでなく、黄光にも反応します。
CCDに黄光が当たると、RセンサーとGセンサーが反応するため、撮影後CCDから読み出されるデータは「赤と緑を合わせた色=黄色」となります。また、赤光と緑光が混じったときも、R・G両センサーが反応しますから、同様に黄色として認識されます。

紫についてはもう少し事情が複雑です。紫(400nmあたり)は目に見える光の中で最も波長が短いため、Bセンサーが強く反応します。Gセンサーは紫みの青(440nmあたり)までは変化しますが、それ以下は一定で、Rセンサーはこの光にほとんど反応しません。そのため撮影後にCCDから読み出されるデータは、ほぼBセンサーの値のみになります。
一方、RとBの光が同時に当たった場合は、問題なく「RとBを合わせた色=紫」のデータを読み出せます。

原色フィルターで撮影できない紫色があるというのはこのことです。
どの色が単波長の紫によるものかを、虹やプリズムによる分光以外で指摘するのは難しいのですが、赤光と青光の混じった紫なら、今ご覧のモニターやほとんどの印刷物で見られる紫がそうです。後者が青く撮影されるのなら、それは単にカメラのホワイトバランスの問題です。

補色フィルター

最近のデジタルカメラでは見当たらなくなりましたが、原色フィルターではなく補色フィルターを使ったCCDがあります。機種によって多少の違いはありますが、Cy(シアン)・Mg(マゼンタ)・Y(黄)・G’の4色のフィルターが使われています。G’以外のフィルターは、三原色の中の二色を組み合わせたものです(Cy=G+B、Mg=R+B、Y=R+G)。フィルターの特性を下の図に示します。補色フィルターのG’は色ではなく明るさを示すデータとして使われるため、原色フィルターのGと比べて紫光の波長まで感度が広がっています。

compl.png(4809 byte)
図5.補色フィルターCCDの分光感度特性

一般的な画像データは原色の値で記録されているため、補色フィルターを使った場合も原色の値に変換する必要があります。各原色のデータは、単純に考えるとCy・Mg・Yの各データを加減算すれば求まります。例えばMgとYはどちらもRを含んでいますから、この2つを足してRを含まないCyを引けばRが残ります。つまり、
Mg+Y−Cy=(R+B)+(R+G)−(G+B)=R×2
となります。RGBの各データはCy・Mg・Yから次のように求められます。

R=(Mg+Y−Cy)÷2
G=(Cy+Y−Mg)÷2
B=(Cy+Mg−Y)÷2

ここで紫光(400nm前後)について考えると、Yの値はほぼ0ですからBはMgとCyの和、RはMgとCyの差になります。MgがCyより感度が高くなっているため、少ないながらRの値が表れます。
もう一つのポイントは、この領域でG’が大きく変化していることです。センサーに当たる光のほとんどが、450nm以下の波長だとすると、Bに対するG’の比率が小さいほど短い波長が強いと考えられますから、その分をRに加算することができます。ただしG’の値が一定値以上の場合は、センサーが受けた光に他の波長が含まれると考えられますから、Rの値を補正することができません。


これ以降は話が難しくなるので、上記の説明では物足らない人だけ読んでください。読んで納得できる内容かどうかは保障できませんが......

計算による紫の検出

図4の分光感度特性をよく見ると、紫の領域でRセンサーの感度が少し増えていますが、これでは値が小さいため色はあまり変化しません。そこで以下のような方法を思いつきます。

「Bセンサーの出力が一定値以上でRセンサーの出力が一定値以下」という条件では、紫光が検出されているとみなしてRセンサーの値を増幅する。

センサー値を大幅に増幅すると、センサー値が含んでいるノイズ分まで増幅してしまいます。4倍の増幅ならISO100をISO400に変えたときと同じ高感度ノイズが表れます。...が、もっと根本的な問題があります。
CCDから読み出したデータだけでは、それが紫光に反応したものかどうか分からないということです。受けた光が単波長なら上記の「」内の条件は紫光が当たったことを示しますが、青光に弱い赤光が混じったときにもこの条件は成り立ちます。赤光に対するRセンサーの感度はが紫光の約10倍ですが、赤光の強さが紫光の10分の1であればRセンサーの出力としては同じ値になり、後から見分けることはできません。「青+弱い赤」は紫とはかなり色合いが違います。
150-0-250.jpg(693 byte)紫、 38-50-250.jpg(693 byte)青+弱い赤

原色フィルターの感度変更

次に後で増幅する必要がないように、紫光に対してRセンサーの感度をもっと上げた場合についても考えます。
前出の図4に比べて紫光に対するRセンサーの感度を上げ、センサーからの出力をそのまま使って紫の色を表現できるようにします。補色フィルターのMgでも同じように感度の高い部分が2ヶ所ありますから、製造上の問題はありません。

prim0.png(4204 byte)
図6.原色フィルターCCD(改)の分光感度特性

しかしこの方法では、カラーバランスの問題が出てきます。

ページの最初の方で説明したように、物の色は光源からの光を反射することで生まれます。波長ごとに光をどれだけ反射するかは物によって違います。例えばリンゴは赤の波長を他の波長より多く反射するため、赤い色に見えます。あくまでも反射ですから、光源に赤の波長がまったく含まれていなければ、赤い色には見えません。

実際の光源は、その種類によって含まれる波長の割合が大きく違います。下の図は「A=タングステン光」「B=正午の直射日光」「C=晴天時の直射ではない昼光」の、波長ごとの光の強さを表したものです。タングステン光ではかなり極端に、波長の長い光ほど強くなっています。BとCは同じ太陽光ですが、BがCより短い波長の光が弱くなっています。これは大気中を進む間に短い波長の光が拡散するためで、より大気中を進む距離が長くなる夕日が赤く見えることと同じ理由です。Cの場合はその拡散した光も含みますから、本来の太陽光に近いバランスになります。

spectrum3.png(3737 byte)
図7.各光源の波長分布

タングステンというのは電球のフィラメントに使われている素材で、タングステン光は一般的な白熱電球の光です。同じ明るさの太陽光と比べれば、赤い光の強さは倍、青〜紫の光の強さは半分以下になっています。そのため、全てのものが強い赤味を帯びて見えるはずですが、人間の目は電球の下でも、白い紙を白として認識します。

人間の目の光量に対する順応性は、デジカメのCCDなどよりずっと優れています。人間の目には瞳孔があって、これを開閉することで目に入る光の量を調節していますが、例えば晴天時の屋外と照明をつけた室内の差(約400倍)を補正するためには、まったく不十分です。
人間の目は、CCDでいえば画素ごとの感度調節ができます。晴天時、室内と窓越しの屋外を同時に見たときは、窓枠の中に見える明るい部分だけ、他より感度が下がっています。これは光の色に対しても同様で、赤い光が強く青い光が弱い場所では、赤に対して感度が低く青に対して感度が高くなります。
下の左図、緑の円の中にある赤点を30秒ほど凝視すると、緑に対する感度が下がって赤と青に対する感度が上がります。またその周囲の黒い部分では全ての色に対して感度が上がります。この調節には少し時間がかかるため、次に右の赤点を見ると、赤点の周囲にしばらく赤紫の色が見え、さらにその周囲がリング状に明るく見えます。

spot1.png(1922 byte) spot2.png(793 byte)

デジカメの場合、CCDの分光感度特性を撮影対象に合わせて変えることはできませんから、CCDから読み出したRGBのデータに補正値を掛けることで、カラーバランスを調節します。上記の電球の場合でいえば、Rの値を半分にしてBの値を倍以上にします。
しかしこれでは正確な補正とはいえません。例えばRの値には、主な領域だけでも700nm以上から600mn以下まで、広い波長のデータが含まれています。下の図のように波長によって補正量は違いますから、どの波長を多く含んでいるかによって補正量を変える必要があります。同時に記録した他のデータから予測する方法(Gの値が大きければ短い波長の割合が多いとみなして補正量を小さくする、など)では、誤差がでることもあります。

balance.png(2357 byte)

各センサーの感度の幅が広いほど、正確な補正は難しくなります。(補色フィルターの欠点の一つがこれです)

ここで、紫光に対して追加したRの感度が問題になります。正しく補正しようと思えば、Rの値のうち紫光による反応の部分だけを、半分ではなく逆に3〜4倍にする必要があります。
しかし前に説明したように、Rの値の何割が紫光によるものなのか正確には分かりません。補正に誤りがあれば紫光による色の変化が表れないだけでなく、過剰な補正が行われると、RGB値の小さい(暗い)部分では影響が大きいため色相が変わる(青〜緑系の色が紫〜黄に変化する)ことになります。

RGB表色系とXYZ表色系

先に人間の目は「光による三種類の刺激の強弱が分かる」と書きましたが、人間の目の反応はCCDとは少し違います。RGBの組み合わせによる色を、人間の目がどう捕らえているかについては、CIE(国際照明委員会)によって下記のグラフで表されています。CIEの定めた値は国際標準として認められたものが多く、一部はJIS規格にもなっています。
RGBの波長を、CIEではR=700nm、G=546.1nm、B=435.8nmとしています。

rgb.png(5144 byte)
図9.RGB表色系の等色関数

このグラフは、単波長の光と比較して同じ色に見えるRGB各光の割合を示したもので、等色関数といいます。グラフを見てまず気付くのは、緑から青にかけての波長でRの割合がマイナスになっていることです。

これはRの割合を0にして、GとBをどのような割合で組み合わせても、単波長光の鮮やかさには届かないということです。単波長光側に補色の関係にあるRを加えれば彩度が落ちますから、このマイナス分のRを加えることで、ようやくGとBの組み合わせで同じ色を表現できるようになります。このことから人間の目が感じる三種類の光が、RGBとは少し異なっていることが分かりました。

CIEでは、この基準となる三種類の光をX・Y・Zと定義して、その等色関数を以下のグラフにしています。X・Y・Zの割合が同じであれば、人間の目には同じ色として写ることになります。

xyz.png(4171 byte)
図10.XYZ表色系の等色関数

XYZ表色系は、色を扱う多くの分野でその基礎となっています。

原色フィルターの分光感度特性

X・Y・ZはそれぞれR・G・Bをベースに他の波長の光も組み合わせた実在しない光ですから、これをそのままCCDの分光感度特性にすることはできません。そこでRGB表色系の等色関数をベースにすることになりますが、CCDではマイナスの感度を出すことができないため、図11で示したように、Rのマイナス分をBやGに追加することで(彩度は低くなりますが)見た目が近くなるように調節しています。(RがGの最大値と同じ波長で少し感度が増えているのは、Gの感度が滑らかに変化するよう調節しているためです)

rgb2.png(5161 byte)
図11.マイナス分の調節

ただし例外もあります。フイルムの場合は、Rの補色であるシアンの発色を「第4の感色層」として追加した製品が富士フイルムから発売されています。またCCDにおいても、R・G・Bに加えてE(エメラルド)フィルターを追加した製品が、ソニーのデジタルカメラに搭載されています。EフィルターはGの半分と入れ替える形で配置されていますから、シアンにGを加えたEとしているのでしょう。

図4の分光感度特性を改めて図11と比べると、以下の点に気がつきます。

1.Bの感度が最大になる波長は、図4の方が長く範囲も広い。
2.RとBの感度が、Gに比べて低い。

RGB表色系の等色関数を見ると、紫色の波長でもRの値はあまり大きくなっていません。つまりこの等色関数のBは波長が435nmですから、元々かなり紫に近い色ということです。これに比べると、デジカメで撮影してモニターに表示するときのBは、藍か青に近い色()になっています。これはBセンサーに少しでも多くの光を当てるためです。

CCDやCMOSなどのイメージセンサーだけではなく、工業製品として使われている光センサーのほとんどはフォトダイオードを使用しています。フォトダイオードと聞くと、光が当たると電流が流れる電子部品を思いつかれる方もいらっしゃるでしょうが、実際の使用方法は少し違います。
金属などに光が当たるとその表面から電子が飛び出しますが、これを光電効果といいます。フォトダイオードの素材は半透明のシリコンですから、その周囲を電子が通らない状態にしておけば、内部に入り込んだ光によって発生した電子は全てその中に溜まります。雨の日に容器を外に置いておけば、たまった水で降水量が分かるように、受光後に溜まった電子の量を測ることで、センサーに当たった光の量が分かります。
とはいえ、電子同士は反発し合いますから、一定量を超えるとそこから溢れてしまいます。これを飽和といいます。上の例えで言えば、容器から水が溢れてしまえば降水量が分からなくなるように、溢れるまでに受けられる光の量がその光センサーで計ることのできる最大値です。

センサーに溜まった電子の量を測ってデータとして読み出すとき、様々な理由で誤差が発生してそれが画像のノイズとなります。計測値が大きくなるほどノイズによる影響は小さくなりますから、溢れない範囲でなるべく多くの電子を溜めてから計る必要があります。

光電効果によって発生する電子の量は、光の波長によって違います。CCDに使われている単結晶シリコンでは、図12に示したように、光の量は同じでも短い波長の光ほど発生する電子は少なくなります。CCDの分光感度特性は、カラーフィルターの透過率(光を通す割合)と光センサーの感度を合わせた性能ですから、実際にはR<G<Bの順でフィルターの透過率を低くしています。

gain.png(9957 byte)
図12.フィルター透過率×光センサ感度の波長特性⇒分光感度特性

RフィルターやGフィルターの透過率が低いということは、光センサーに当たる光の量が減ってCCDの感度が低くなります。もしBセンサの感度が図11のようにほぼ500nm以下の範囲に限られると、Bセンサの感度が高い部分が大きく減ることになるため、バランスをとるためにCCD全体の感度をさらに下げる必要があります。
RとBの感度がGに比べて低いのは、Bに関してはCCD感度の向上という点が大きいのですが、Rについては電球など赤光の強い光源でも飽和しにくくするという目的があります。撮影後に画像データに変換するときに、Gに比べてRやBの値を増幅します。