5

ポニー検出器の影の除去を書いています。PNG画像をsRGBからCIEXYZに変換した後、指示に従って輝度を削除します。


表示のために画像をsRGBに変換し直そうとすると、sRGB色域外のRGB値が得られます(255より大きい値が得られます)。これは正常ですか、それともバグを探し続ける必要がありますか?注:XYZに変換し、変更せずに元に戻すと、グリッチは発生しません。

イラスト(左上:オリジナル、左下:赤と青の色相のバイト値の折り返し):

完全を期すために:右上:色の比率、右下:HSVに変換して値を均等化します。

4

1 に答える 1

1

最後の変換では、輝度は削除されません。2つの新しい値xyが作成されます。これらの値は、一緒に彩度を定義し、Yには輝度が含まれます。これは、説明リンクの重要な段落です(リンクする数式の直前)。

CIE XYZ色空間は、Yパラメーターが色の明るさまたは輝度の尺度となるように意図的に設計されました。次に、色の色度は、2つの派生パラメーターxおよびyによって指定されました。これらは、3つの三刺激値X、Y、およびZすべての関数である3つの正規化された値のうちの2つです。

これが意味するのは、単色のサーフェスの画像があるが、サーフェスの一部が影になっている場合、xyY空間では、x値とy値が同じ(または非常に類似している)である必要があるということです。シャドウ内にあるかどうかに関係なく、サーフェス上のすべてのピクセル。

最終的な変換から取得したxyz値は、XYZ値であるかのようにRGBに直接変換することはできません(大文字と小文字を区別することに注意してください)。したがって、実際の質問に答えるには、xyz値をXYZ値であるかのように使用している場合、コードにバグはありません。それからRGBへの変換は、リンクした数式を使用して機能しないはずです。

ここで、画像全体から実際に影を削除したい場合は、次のようにします。

  • 各値を255で割って[0-1]範囲の浮動小数点値になるようにRGB値をスケーリングします(24ビットRGBを想定)。浮動小数点への変換は精度に大いに役立ちます!
  • 画像をxyYに変換します
  • すべてのY値を1つの値、たとえば0.5に置き換えますが、実験してください。
  • xyYからXYZへの変換を逆にします。

xyYからのX

xyYからのZ

  • 次にRGBに:

XYZからRGB

  • 次に、[0..255]間隔でRGB値を再スケーリングします。

これにより、元の画像の非常に退屈で影のないバージョンが得られるはずです。もちろん、目標が単色領域の検出である場合は、xyY画像のxy値に対してこれを実行し、元の画像で検出した領域を使用することもできます。

于 2011-06-01T15:29:34.710 に答える