2006 年 2 月 21 日 22 時 43 分

近似色を探す


このアーカイブは同期化されません。 mixi の日記が更新されても、このアーカイブには反映されません。


任意のカラーテーブルを使って減色する場合、
元の色の近似色をカラーテーブルから探す必要がある。

「近さ」をどのように考えるか。

RGB の色は RGB 3 次元空間の点として考えることができる。
今までは区間で等間隔に区切っていたため、
軸(色要素)ごとに独立した単純な計算でよかったが、
カラーテーブルが空間上の任意の点となるとそうはいかない。

空間上においては、近さは「距離」として考えられる。
元の色に最も近い色を選ぶためには、
カラーテーブルの色を調べて、
最も距離が近い色を選ぶということになる。

2 点間の距離はどうして計算するか。これは意外と簡単だ。
ここでいう RGB 空間は、ユークリッド空間なので、
ピタゴラス(三平方)の定理を元に考えると、
自乗和の平方根で計算することができる。

my ($r1, $g1, $b1); # 色1
my ($r2, $g2, $b2); # 色2

my $distance =
sqrt(($r2 - $r1) ** 2 + ($g2 - $g1) ** 2 + ($b2 - $b1) ** 2);

これを使えば、どの色に対しても、
最も近い色を求めることができることとなる。

もし、人間の視覚を重視するならば、
緑や赤の座標軸のスケールを増やして計算すれば、
それらに対する重要度を調整することもできる。



Copyright (c) 1994-2007 Project Loafer. All rights reserved.