web-dev-qa-db-ja.com

RGBをsRGBに変換しますか?

RGBを知覚的に均一な色空間であるCIELABに変換しようとしています。ウィキペディアはこう述べています:

「RGBまたはCMYK値は、最初にsRGBやAdobe RGBなどの特定の絶対色空間に変換する必要があります。この調整はデバイスに依存しますが、変換の結果のデータはデバイスに依存せず、データを変換できますCIE 1931色空間に変換し、L * a * b *に変換します。」

一度sRGBに変換すると簡単な変換がいくつかあることは知っていますが、RGBからsRGBに移行するためのマテリアルが見つかりませんでした。では、そのような変換を行う方法は何ですか?

11
user1058860

いいえ、(線形)RGBからsRGBに移行するべきではありません。実際、それは逆です。手順は次のとおりです。

  1. SRGBを線形RGBに変換します。 sRGB画像はガンマエンコードされているため、カメラがガンマ関数pow(x、1/2.2)を光信号に適用します。このsRGBは、非線形のガンマ空間にあります。

  2. ここで、線形RGBをLABに変換するには、2つのステップが必要です。最初のステップは、線形RGBをXYZ色空間に変換することです(これは基本的な色空間です)。この変換は、線形演算、つまり行列乗算です。これが、sRGBではなくリニアRGB値が必要になる理由です。線形空間にある必要があります。最後に、XYZ値は、いくつかの標準式(心配する必要はありません)を含む非線形演算によってLAB値に変換されます。

興味深いリンク:

(i)sRGBと線形RGB空間を理解する: http://filmicgames.com/archives/299 ; http://www.cambridgeincolour.com/tutorials/gamma-correction.htm

(ii)MATLABチュートリアル: https://de.mathworks.com/help/vision/ref/colorspaceconversion.html

(iii)Pythonパッケージ: http://pydoc.net/Python/pwkit/0.2.1/pwkit.colormaps/

(iv)Cコード: http://svn.int64.org/viewvc/int64/colors/color.c?view=markup

(v)OpenCVはこのsRGBから線形RGBへの変換を行いませんが、color.cppコード(OpenCV_DIR\modules\imgproc\src\color.cpp)内で変換を行います。 initLabTabs()と呼ばれるメソッドを確認してください。ガンマのエンコードとデコードがあります。 OpenCV色変換API: http://docs.opencv.org/3.1.0/de/d25/imgproc_color_conversions.html

8
Sanchit