(RGB)画像をグレースケールに変換するより良い方法はありますか
この方法では光の強度が発生するため、オブジェクトをさらに処理するために十分にマーキングできない場合があります。たとえば、ホットスポットまたは反射がある場合、これはグレースケールで目立つオブジェクトとして表示されます。
のような他の色空間を試していますLab
が、コントラストが悪いです。
(RGB)画像をグレースケールに変換するより良い方法はありますか
この方法では光の強度が発生するため、オブジェクトをさらに処理するために十分にマーキングできない場合があります。たとえば、ホットスポットまたは反射がある場合、これはグレースケールで目立つオブジェクトとして表示されます。
のような他の色空間を試していますLab
が、コントラストが悪いです。
レシピを求めるほど単純ではありません。必要なものを定義する必要があります。
あなたが使用した変換は、クロマを送信するために利用できる帯域幅がはるかに少ないという事実を考慮して、アナログ放送信号のルミナンスとクロミナンスを別々にエンコードする方法が必要だったカラーテレビの初期の時代にさかのぼります。ルマより。エンコーディングは、人間の網膜の錐体の黄緑色帯域の相対感度が高いことに非常に大まかに関連しています。
盲目的に使用する理由はありません。むしろ、目的の変換の目標が何であるかを明確に表現し、その目標を (定量化可能な) 基準に変換してから、その基準を最適化する特定の変換を見つける必要があります。変換は、グローバル (つまり、使用した TV のように) またはアダプティブ (つまり、現在のピクセルの近傍のカラー値に応じて) にすることができます。 .
人々は実際に「影」と「反射」という用語を識別できるため、これはかなり高いレベルの操作であると言えます。さらに、これらの影響により、人は「盲目」または混乱する可能性があります。したがって、「いいえ、さまざまな輝度効果を排除するための大幅に優れた低レベルの方法はありません」と答えます。
隣接する明度の歪んだ領域を検出するモジュールを作成し (色相や彩度などの手がかり、それらが「ジグソー パズル」を形成するかどうかの空間的要因などに基づいて)、それらをつなぎ合わせることができます。
私は HSV をお勧めします。これは、画像の影をかなり確実に克服するためにうまく機能しているためです。
Lab で使用できるトリックは、L チャンネルを無視して、他の 2 つのチャンネルで色のバリエーションを与えることです。これは、明るい光が当たっているオブジェクトの境界を見つけたい場合に非常に効果的です。
Lab のように、明度を色情報から分離する他の多くの色空間があります。いくつかの例は、HSV、YUV、YCrCb です。これらのうち最も効果的なものを選択し、明るさを破棄して、2 つのカラー チャネルで作業します。
Lab は、目の非直線性を一致させようとする「知覚」色空間です。つまり、近い Lab 番号は人間によって非常に類似していると認識されますが、大きく異なる Lab 番号は非常に異なるものとして認識されます。 RGBはそのようにうまく機能しません。
あなたが言及した変換に関するいくつかのメモ:
OpenCV で CV_RGB2GRAY 変換を使用する場合、言及した coefficeints を使用します。ただし、これらが正しい数値であるかどうかは、使用している RGB のフレーバーによって異なります。
あなたの番号は、NTSC や PAL などのアナログ TV で使用される BT.601 原色用です。最近の HDTV と、コンピューターのモニターやプリンターで広く使用されている sRGB は BT を使用します。この場合、変換は Y = 0.2126 R + 0.7152 G + 0.0722 B である必要があり、ここでの Y は CIE 1931 で定義されています。Lab の L チャネルも CIE 1931 輝度値に対応します。
次に、sRGB よりも多くの色を表現できる Adobe RGB があります (より広い「色域」があります)。しかし、OpenCV にはそのための変換があるとは思いません。
RGB をグレースケールに変換する最良の方法は、画像の取得元とその画像で何をしたいかによって異なります。
OpenCV cvtColor()のドキュメントを見る価値があります。