質問
ピクセルの RGB 値を単一のモノクロ値に変換するにはどうすればよいですか?
解決
私は考えられる解決策の1つを見つけました カラーに関するよくある質問. 。の 輝度成分 Y(から CIE XYZ システム) は、人間が最も色として認識するものを 1 つのチャネルでキャプチャします。したがって、これらの係数を使用します。
mono = (0.2125 * color.r) + (0.7154 * color.g) + (0.0721 * color.b);
他のヒント
この MSDN 記事 用途 (0.299 * color.R + 0.587 * color.G + 0.114 * color.B);
このウィキペディアの記事 用途 (0.3* color.R + 0.59 * color.G + 0.11 * color.B);
これ 最近の科学論文 シンプルな輝度公式とより複雑な技術を含む、カラー写真をグレースケールに変換する最先端技術を比較します。
これはあなたの動機によって異なります。任意の画像をグレースケールに変換して見栄えを良くしたいだけの場合は、この質問に対する他の回答にある変換で十分です。
カラー写真を白黒に変換する場合、そのプロセスは非常に複雑かつ主観的になる可能性があり、画像ごとに特定の調整が必要になります。何が関係しているのかについては、これをご覧ください。 チュートリアル Adobe の Photoshop 用。
これをコードで複製するにはかなり複雑な作業が必要であり、(それが何を意味するにせよ) 見た目が「完璧」な画像を得るにはユーザーの介入が必要になります。
これも述べたように、RGB トリプレットからのグレースケール変換 (モノクロ画像はグレースケールである必要はないことに注意してください) は好みに左右されます。
たとえば、単純に赤と緑のコンポーネントを破棄し、代わりに青の値をコピーすることで、青のコンポーネントだけを抽出するという不正行為が可能です。もう 1 つのシンプルで一般的に問題のない解決策は、ピクセルの RGB トリプレットの平均を取得し、その値を 3 つのコンポーネントすべてで使用することです。
Photoshop 用だけでも、プロフェッショナル向けで決して安価ではない、ノイズのないグレースケール/モノクロ変換プラグインの相当な市場が存在するという事実は、変換が好みに応じて単純または複雑であることを物語っています。
RGB ベースの画像をモノクロに変換する背後にあるロジックは、単純な線形変換ではありません。私の意見では、このような問題は「カラーセグメンテーション」技術で解決する方がよいと考えています。K-means クラスタリングによって「カラー セグメンテーション」を実現できます。
MathWorks サイトの参考例を参照してください。
カラーの原画。
これはどのように作動しますか?
画像全体からすべてのピクセル値を収集します。幅 W ピクセル、高さ H ピクセルの画像から、W *H のカラー値が得られます。ここで、K-means アルゴリズムを使用して 2 つのクラスター (またはビン) を作成し、色を適切な「ビン」に投入します。2 つのクラスターは黒と白の色合いを表します。
K-means を使用した画像セグメンテーションをデモする YouTube ビデオ? https://www.youtube.com/watch?v=yR7k19YBqiw
この方法の課題
K 平均法クラスタリング アルゴリズムは外れ値の影響を受けやすいです。RGB 距離が残りの群から遠く離れている色のランダムなピクセルがいくつかあると、重心が簡単に歪んで予期しない結果が生じる可能性があります。