3

コード(Android)を介して上記の画像とまったく同じようにしたい。しかし、私はそれを行うアルゴリズムについて混乱しています。私が知っているのは次のとおりです。

すべてのピクセルで:

  1. RGB を HSL に変換する

  2. ???

  3. HSL を RGB に戻す

ステップ2で何をすべきか誰か説明してもらえますか? 本当にありがとう。

ps: ColorMatrix.setSaturation(0) を介して Android で彩度を設定できますが、結果の画像は Photoshop と同じではありません (色相と明度が変更されていないためですか?)

4

1 に答える 1

10

画像の彩度を下げるための多くのオプションがあります。さらに、画像の彩度を下げることは単に白黒にすることではなく、一部のアプリケーションではそれらが同等であると考える場合があることに注意してください

詳細については、この投稿を更新しました。

平均

これは、学生がグレースケールに変換するために最初にイメージできることです (少なくとも私が過去に最初に考えたことです!)。

level = (R + G + B) / 3

悪い結果を生むことはありません。実装は高速で簡単です。しかし、人間が光度を知覚する方法と一致しないという大きな欠点があります。

輝度

この 2 番目の方法 (ルミナンスはルミノシティ、ルマ、または強度と呼ばれることもあります) は、私たちの目が明るさを認識する方法のより良いモデルです。これは、目の錐体密度が色全体で均一ではないという事実に基づいています。私たちは緑を赤よりも強く、赤を青よりも強く知覚します。
すべての色を同じ強度で知覚するわけではないため、平均法は不正確です (少なくとも、自然に見える結果は得られません)。これを管理する方法は?単純に加重平均を使用します。

level = R * 0.3 + G * 0.59 + B * 0.11

ご想像のとおり、これらの値については多くの議論があります。元の ITU-R 勧告は、次の式を提案しました。

level = R * 0.2126 + G * 0.7152 + B * 0.0722

私が間違っていなければ、Photoshop は単純な彩度低下機能にこれを使用します (はい、最初のものの丸められていないバージョンです)。

level = R * 0.299 + G * 0.587 + B * 0.114

推奨事項が最近変更されたにもかかわらず、多くの違いに気付くとは思いません。この式の詳細については、ウィキペディアのこちらを参照してください。

詳細を知りたいですか?Charles Poynton のこの記事を読んでください:ガンマのリハビリテーションと、このトピックに関する彼のFAQ 。

脱飽和

各ピクセルはRGB カラー モデルで記述されていますが、彩度はHSL カラー モデルに属します (実際には、彩度を扱う場合は HSL モデルと HSV モデルの両方を使用できます)。これらのモデルの詳細については、リンクを参照してください。

画像の彩度を下げるには、次の手順を実行します。

このプロセスの大きな簡略化を紹介しましょう: RGB の最大値と RGB の最小値の間の中間点を見つけて色の彩度を下げることができます (明度、RGB 色空間の色は 3D の点であることを覚えていますか?スペース?)。彩度の低い画像を取得する (簡略化された) 式は次のとおりです。

level = (max(R, G, B) + min(R, G, B)) / 2

分解

局所最大分解と呼ばれることもある単純な形式の彩度低下は、単純に各 RGB トリプレットの最大値を選択します。

level = max(R, G, B);

ご想像のとおり、ローカル最大値またはローカル最小値の両方を使用できます (ローカルと書いたのは、各ピクセルの最小値/最大値を検索するためです)。

その他の方法

RGB トリプレットから 1 つのチャネル (たとえば、緑のチャネル) を保持し、その値をすべてのチャネルにコピーするだけで、非常に高速な方法で B&W 画像 (彩度の低い画像のように見えるもの) を取得できることを忘れないでください)。

Photoshop のチュートリアルでは、その機能を使用して画像の彩度を下げることはありませんが (彩度低下機能と調整パレット)、より良い結果を得るために、均一な色 (輝度セクションの値で計算) のレイヤーを追加し、そのレイヤーを元の画像 (コードをステップ実行するチュートリアルと再現を検索します)。

于 2012-03-23T12:38:52.687 に答える