ちょっとしたメモ

輝度比による文字色と背景色のコントラスト評価

先日登場した11月23日付のWCAG 2.0草案に、文字色と背景色のコントラストを評価するための新しい方法が組み込まれたので、色の組み合わせチェックにも試験的に採用してみた。このアルゴリズムは、ガンマ補正を踏まえたHDTVの輝度信号の算出式を応用しているらしいことは分かったものの、今ひとつ基準値などの根拠が判然としなかったのだが、どうやらこれはWCAG2.0のエディタの一人である、Gregg Vanderheidenらが考案したものらしい。

Gez Lemonの記事 Luminosity Contrast Ratio Algorithm によると、GreggらTrace R&D Centerのメンバーが、従来のWCAG草案でも参考として示していたAERTの「色の差」によるコントラスト評価法に代わる方法としてこのLCRを案出したということだ。AERTはYIQのYを「明るさ」(brightness)とよび、LCRはYPrPbのYを「輝度」(luminosity)としているが、いずれも色の輝度成分を抽出しようというもので、本質的には同じ(「明度」というとまた話が違ってきて、特に日本語でいう「明度」はいろんな使われ方があってややこしい)。違いは、前者が「差」を取っているのに対し、後者は「比」を基準にしようというところにある。

コントラストの尺度として「差」と「比」のどちらがいいのかは俄には決めがたいが、たとえば標識などの識別のための基準が「輝度比2.0以上」といわれるように、比率を用いた基準が多いように見受けられる。また、人間の感じる明るさは、輝度(明度?)の1/3乗に比例するという説や、明度(輝度?)の段階は対数で表すべきだという説も見かける。「差」による評価よりは、「比」の方が洗練されていることになるのか。

とはいうものの、実際にAERTとLCRによるチェック結果を比べてみると、LCRの方が優れているという実感はあまりない。両者で評価が分かれる組み合わせをいくつか挙げてみよう。

色の組み合わせLCR評価AERT明るさAERT色差
文字色#033; 背景色#9995.15117(×)357(×)
文字色#f0f; 背景色#3035.74784(×)408(×)
文字色#fff; 背景色#f003.998(×)179510
文字色#090; 背景色#fff3.717(×)165612
文字色#090; 背景色#0005.64990(×)153(×)

※LCRは比率が5以上ならLevel 2、10以上ならLevel 3の基準を満たすとされる(Level 1基準はない)

Gezの記事は、《AERTにおける「色の差」も含めて比較すると、AERTでは中間色(#666~#999)と組み合わせて基準を満たす色がないのに対し、LCRでは使える色がある》ことを利点としてあげているが、その組み合わせは実際には読みやすいとは言い難いように思える。逆に、赤と白のような普通に使われる組合せは、AERTならOKだが、LCRでは基準を満たさないことになってしまう。

もちろん、WCAG2.0はまだ草案段階であり、このアルゴリズムがそのまま採用されるとは限らないわけで、これから手直しされていくとは思われる。今後どんな展開を見せるか、要注目というところだ。

〔追記〕真っ暗なところでは僅かな光でも明るく感じ、明るいところではライトをつけても明るさの感じはあまり変わらないように、光の“強さ”に対する感覚は、「差」よりも「比」もしくは指数的な指標の方が適当。ただし、単純な比にすると分母が0(黒)になると無限になるし、背景が黒っぽければ文字色はごく僅かに明度を高めるだけでも大きな比率が得られてしまうので、LCRでは分母、分子にそれぞれ0.05を加えるという操作をしている。このオフセットの扱いや、“強さ”ではなく“明るさ”の場合はどうかといったあたりが、検討の余地ありか。

map - genre: wai. at