【GLSL】YUV色空間とHSV色空間


GLSLに限らず画像処理やエフェクトを書いていると、RGB座標系だけで考えていると限界があります。

別の色空間に変換して処理することで出来ることが増えたり、処理が楽になったりします。特に色合いと色の強度を分離できると多くの場面で役立ちます。

普段よく使うYUV色空間とHSV色空間をGLSLでも使ってみます。

YUV

YUVYCbCrYPbPr )は輝度Yと、青・赤の色差によって表現する色空間で動画などで多く用いられます。

映像規格ITU-R BT.709に基づいて変換してみます。

単純な行列を使った線形変換です。

行列の掛け算が逆じゃない?って思った方は以前の投稿を参照してください。

この変換では輝度を少し増やして、色相を固定しています。

余談ですが、この変換の輝度YをそのままRGBに適応すると同規格のグレースケール変換になります。

HSV

HSVは色相(Hue)と彩度(Saturation)、明度(Value)で表す色空間です。

色相環はペイントソフト等でもよく使いますね。

非線形変換で多少複雑な計算になります。

色環を[0~2π]0を赤として円錐モデルで変換します。

hsv->rgbの変換が特にめんどくさいですね。

RGBがすべて同じ場合の処理は無視(赤として処理)してます。

 

また余談ですが彩度がSaturationなのにどうしても違和感があります。photometricな世界だと飽和のほうで使われるので。

 

HSVでは特に明るさに関わらない色そのものに対して処理できます。

照明の当たり方の異なる同じ物体に対して彩度、明度を固定する(色相のみの情報にする)とこうなります。

R=G=Bの情報が落ちてますが、明るさに関わらず処理できることがわかります。


コメントを残す

メールアドレスが公開されることはありません。