画像を取得し、その画像が色覚異常の人にどのように見えるかをシミュレートするツールがオンラインにたくさんあります。ただし、これらのアルゴリズムの説明は見つかりません。
色覚異常をシミュレートするために使用される標準的なアルゴリズムはありますか?色覚異常にはさまざまな種類があることは承知していますが(詳細については、このテーマに関するWikipediaのページを参照してください)、主に2色覚をシミュレートするためのアルゴリズムに関心があります。
画像を取得し、その画像が色覚異常の人にどのように見えるかをシミュレートするツールがオンラインにたくさんあります。ただし、これらのアルゴリズムの説明は見つかりません。
色覚異常をシミュレートするために使用される標準的なアルゴリズムはありますか?色覚異常にはさまざまな種類があることは承知していますが(詳細については、このテーマに関するWikipediaのページを参照してください)、主に2色覚をシミュレートするためのアルゴリズムに関心があります。
私は同じ欲求不満を持っていて、オープンソースの色覚異常シミュレーションを比較する記事を書きました。つまり、4つの主要なアルゴリズムがあります。
Coblisと「HCIRN色覚異常シミュレーション機能」。これは多くの場所にあり、MaPePeRによるJavascriptの実装です。完全なHCIRNシミュレーション機能は適切に評価されていませんが、実際には妥当です。ただし、colorjackによる「ColorMatrix」近似は非常に不正確であり、完全に回避する必要があります(作成者自身がそう言っています)。残念ながら、コピー/貼り付けが簡単だったため、まだ普及しています。
Brettel、Viénot、およびMollon(1997)による「2色覚の色覚のコンピューターシミュレーション」。非常に堅実なリファレンス。あらゆる種類の二色覚に作用します。私はlibDaltonLensでパブリックドメインCの実装を書きました。
Viénot、Brettel and Mollon(1999)による「2色覚によるディスプレイの読みやすさをチェックするためのデジタルビデオカラーマップ」。確かな参考文献も、1997年の1型2色覚異常と先天赤緑異常(3種類の色覚異常のうちの2つ)に関する論文を簡略化しています。libDaltonLensにもあります。
Machadoらによる「色覚異常のシミュレーションのための生理学に基づくモデル」。(2009)。事前に計算された行列は、Webサイトで入手できます。これにより、自分で簡単に実装できます。sRGBからlinearRGBへの変換を追加する必要があります。
あなたが答えているように見えますが、あなたがリンクしたウィキペディアのエントリにあります。
例えば:
1型2色覚(男性の1%):長波長に敏感な網膜錐体がないため、この状態の人は、スペクトルの緑-黄-赤の部分の色を区別できません。それらは、492 nm付近の緑がかった波長に中性点を持っています。つまり、この波長の光と白色を区別することはできません。
したがって、緑-黄-赤のスペクトルの色を白に彩度を下げる必要があります。 画像の彩度
他の2種類の二色覚も同様に扱うことができます。
まず、目がどのように機能するかを理解する必要があります。
通常の/健康な目は、3種類の錐体と1種類の桿体を持ち、可視スペクトルの光に対して活性化関数を持っています。
次に、それらの活性化は、あなたの脳に行く信号を生成するためにいくつかの機能を通過します。大まかに言えば、この関数は入力として4つのチャネルを取り、出力として3つのチャネル(つまり、明度、黄青、赤緑)を生成します。
色覚異常の人は、これら2つのことのいずれかが異なります(通常/常に1)。したがって、たとえば、人が1つのタイプの円錐を見逃したり、円錐の活性化が異なる場合があります。
最善の方法は次のとおりです。
すべてのピクセルをRGB空間から周波数の組み合わせ(強度付き)に変換します。これを行うには、最初に(健康な人の)3つの錐体のそれぞれの活性化を計算し、次に同じ活性化をもたらす一連の周波数(+強度)の「自然な」解決策を見つけます。もちろん、1つの解決策は、元の3つのRGB周波数とその強度だけですが、元の画像に実際にそれが含まれている可能性はほとんどありません。自然な解決策は、たとえば、ある周波数(または1つの周波数)の周りの正規分布です。
次に、(再び各ピクセルに対して)周波数の組み合わせに対する色覚異常の人の錐体の活性化を計算します。
最後に、健康な人が色覚異常の人と同じアクティベーションを持つようにRGB値を見つけます。
これらのアクティベーションを組み合わせる方法が、関連するタイプの色覚異常によっても異なる場合は、上記の手順でも同じように実行することをお勧めします。(したがって、アクティベーションを照合する代わりに、アクティベーションに対して関数の結果を照合します)。