1

画像の明るさとコントラストを調整しようとしています。RGB から HSL/HSV への変換に関する wiki の記事を見て、調整して元に戻すようにしましたが、非常に奇妙な出力が生成されます。だから今、私は他の例を見ていますが、うまく機能しているようです..唯一の問題は、明るさとコントラストを同時に調整するにはどうすればよいですか?

たとえば、RGB が 100 100 100 の場合、明るさを 2 倍に、コントラストを 2 と 0.5 に調整したいとします。どうすればそれについて行くでしょうか?2 番目のリンクによると、明るさのすべての RGB 値に 100 を追加し、これらの新しい RGB 値をコントラスト式に挿入しますか?

誰にもアイデアはありますか?

PS - これは、SDL と生の RGB 値を使用する C での作業です。

4

2 に答える 2

0

HSVのような空間で働きたいと思います。特に、価値 (V) に関心があります。RGB から HSV/HSL およびその逆に変換する式については、このリンクを参照してください。コードは JavaScript ですが、C に変換するのは基本的なことです。 http://axonflux.com/handy-rgb-to-hsl-and-rgb-to-hsv-color-model-c

考慮すべきもう 1 つの点は、輝度 (Y) と輝度 (Y') です。私は通常、次の式を輝度に使用します。 http://en.wikipedia.org/wiki/Luminance_%28relative%29

Y = 0.2126 R + 0.7152 G + 0.0722 B

V、Y、または Y' のどれを使用するのが最適かわかりません。ウィキによると、「明度または値の次元の定義はあまり明白ではありません。表現の目的と目標に応じて、いくつかの可能性があります。」 http://en.wikipedia.org/wiki/HSL_and_HSV#Lightness

私は Y を使用しています。Y と Y' の違いは、ガンマ補正によるものです。きちんと計算すればどちらでも使えると思います。しかし、コントラストと明るさのために単に V を使用することもできます。

最後に、ガンマ補正を考慮することに注意してください。

編集:プロセスがどのように進むと思うかを概説させてください.

  1. 色成分を float に変換する
  2. 色が sRGB (非線形) の場合は、RGB (線形) に変換します。
  3. RGB を HSV に変換する
  4. 値 (V) をスケーリングして明るさを変更します。コントラストのために彩度(S)も変更します。
  5. RGB に戻す
  6. 必要に応じて RGB を sRGB に変換します。
  7. 色成分を範囲 [0,255] に戻します。
于 2013-04-23T08:50:34.080 に答える
0

これがあなたの質問に答えているかどうかはわかりませんが、通常は *n* ビット色のパレットを使用するか、8 ビットを 3 つの赤、3 つの緑、2 つの青のようなものに分割する 8 ビットのカラー画像を使用しています。

パレットを使用していると仮定すると、操作によって色が変わるため、 SDL_SetPaletteを呼び出す必要があるかもしれません。

3/3/2 ビットで分割する場合、これは、赤には 8 つの離散値、緑には 8 つの離散値、青には 4 つの離散値しかないことを意味することに注意してください。この場合、色の変化は奇妙に見えるかもしれません。

ソースのみが 8 ビットの場合、ロード後に 24/32 ビットに変換することをお勧めします。

于 2013-04-22T23:40:14.850 に答える