私はしばらくこれを理解しようとしてきましたが、それは私を怒らせています。ほとんどの人が知っているように、白から黒まで HSV 輝度の等間隔で 10 個の長方形を並べて描画すると、それらは目と同じようには認識されません。その例を次に示します。
そして処理中のコード:
void setup()
{
size(600, 150);
colorMode(HSB, 360, 100, 100);
background(0, 0, 100);
translate(50, 50);
noStroke();
for(int i = 0; i < 10; i++)
{
fill(0, 0, i * 10);
rect(i * 50, 0, 50, 50);
}
}
ご覧のとおり、一部の暗いタイル間のコントラストは、一部の白いタイルよりもはるかに大きく認識されます。
多くの人がこれを指摘しています。Josef Albers は著書 The Art of Color の中で、(Weber-Fechner の法則に基づいて) 明度を指数関数的に上げるべきだと説明しています。アルバースがいくつかのひどい誤算をしたことが後で証明され、一定の対数増加の明るさを使用するという考えは、非常に限られた範囲内でのみ真実であることが証明されました。これに関する多くの論文がありましたが、それらの多くは私には非常に読みにくく、そのほとんどは網膜の物理的側面に関連しています.
だから私の質問は:
任意の色が与えられた場合、HSV 輝度 0 から 100 までの知覚される輝度の等しいステップを計算するにはどうすればよいですか?
さらに良いことに、ある色から他の色への明るさの等間隔をどのように計算すればよいでしょうか?
コードを使用して印刷用のファイルを生成していますが、これを Processing で行う必要があります。ただし、どの言語の例でも構いません。