개인 블로그에서 21.04.10에 작성된 글입니다. 참고 바랍니다.
https://kyoungwhankim.github.io/ko/blog/color_space/
색 공간(Color Space)은 색을 일정한 규칙으로 정리해둔 가상의 공간입니다. 색 마다 이름을 붙여서 정리할 수도 있고, 수학적 공간에 숫자로 정리할 수도 있습니다. 예컨대, 앞에서 살펴본 CIEXYZ 표색계에서 색을 X, Y, Z값으로 표현하면 CIEXYZ 색 공간이 됩니다. 더 나아가, X, Y, Z값을 잘 조절하여 색도를 나타내는 x, y값, 그리고 밝기를 나타내는 Y값의 조합으로 색을 표현하면 CIExyY 색 공간이 되는 것입니다.
색 공간은 어떤 색 모델을 활용하는지에 따라 그 종류가 다양합니다. 이 글에서 모든 색 공간을 다 살펴볼 순 없습니다. 우리가 살펴볼 색 공간은 다음과 같습니다.
우리가 살펴볼 색 공간은 가산 혼합 모델을 사용하는 RGB 색 모델이 적용된 RGB 색 공간입니다. 왜냐면 우리는 디지털 공간에서의 색에 대해 다루고 있고, 디지털 공간에서의 색은 대부분 RGB 색 공간에서 정의됩니다.
RGB 색 공간은 RGB 색 모델을 따르며 그 종류가 다양합니다. RGB 색 모델이란 Red, Green, Blue를 적절히 가산 혼합하여 하나의 색을 표현하는 방식입니다. 앞에서 살펴본 CIERGB, CIEXYZ 표색계도 RGB 색 모델을 따르는 표색계였으며, 따라서 CIERGB 색 공간, CIEXYZ 색 공간, CIExyY 색 공간 모두 RGB 색 공간이라고 할 수 있습니다.
그 중에서도 CIE 1931 색도도의 바탕이 되는 CIExyY 색 공간은 다른 RGB 색 공간들을 서로 비교하기 위한 레퍼런스 색 공간으로 자주 사용됩니다. 이는 CIExyY가 이론적으로 우리 눈이 보는 모든 색을 담고 있고, x, y값으로 색도를 표현하여 2차원 공간에서 색의 영역을 삼각형으로 표현할 수 있게 해주기 때문입니다.
CIEXYZ의 한계와 CIELAB
CIEXYZ 색 공간, 혹은 이에서 파생된 CIExyY 색 공간은 유니폼한 공간이 아닙니다. 유니폼한 공간이 아니라는 말에는 많은 의미가 내포되어 있지만 그 한계는 '색차 계산과 같은 공학 계산에 활용될 수 없다'라고 정리할 수 있습니다.
색차 계산은 다양한 색들을 수학적으로 정확히 비교 분석하기 위해 필요한 계산입니다. 컬러 영상 분할 등과 같은 작업을 할 때 필요한 계산입니다. CIEXYZ의 한계를 극복하기 위해 유니폼한 색 공간인 CIELUV, CIELAB 등과 같은 색 공간들이 등장했습니다.
그럼에도 불구하고 CIEXYZ 색 공간이 아직까지도 많이 활용되는 이유는 관성 때문이라고 생각합니다. 즉, 오래 사용하던 색 공간이고 CIE가 제정한 대표적인 색 공간이기 때문에, 색차 계산과 같은 공학 계산을 하는 경우가 아닌 이상 아직까지도 명맥을 유지하는 것이 아닌가 생각합니다.
실제로 디스플레이에 이미지를 표현하기 위해 사용되는 색 공간들은 우리가 볼 수 있는 모든 색을 다 포함하지는 않습니다. 예컨대, 컴퓨터 디스플레이에서 가장 많이 쓰이는 색 공간인 sRGB 색 공간은 CIExyY 색 공간(혹은 그의 부모격인 CIEXYZ 색 공간)의 35.9%밖에 표현할 수 없습니다.
자, 그럼 컴퓨터로 이미지 작업을 할 때 자주 보게 될 다양한 RGB 색 공간들이 각기 어떻게 다른지, 무엇 때문에 다른 건지 확인해봅시다. 즉, RGB 색 공간을 정의하는 3가지 요소를 살펴봅시다.
RGB 색 공간은 사실 단순히 '표현할 수 있는 색의 영역'만이 아닙니다. RGB 색 공간은 3가지 구성 요소를 가집니다.
Primaries의 알맞은 번역을 찾기 힘들어 그냥 영어로 쓰겠습니다. 아마 나머지 3가지 구성 요소도 마찬가지가 될 것 같습니다.
Primaries는 색역(gamut)의 꼭지점입니다. 색역은 색 공간이 재현할 수 있는 색의 영역, 혹은 부분입니다. RGB 색 공간의 색역은 CIE 1931 색도도에서 삼각형으로 표현됩니다.
어떠한 RGB 색 공간은 그 공간이 재현할 수 있는 색역으로 정의될 수 있으며, 색역을 수치적으로 표현할 때 그의 꼭지점들인 Primaries로 표현합니다.
위의 그림은 CIE 1931 색도도 위에 그려진 다양한 RGB 색 공간들의 색역입니다(SWOP CMYK 제외). 각각의 색역은 서로 다른 x, y값의 조합을 가지는 Primaries로 표현될 수 있습니다. 예컨대, sRGB 색 공간의 Primaries는 CIE 1931 색도도 위에서 다음과 같습니다.
Red = (0.64, 0.33)
Green = (0.30, 0.60)
Blue = (0.15, 0.06)
반면, ProPhotoRGB 색 공간의 Primaries는 다음과 같습니다.
Red = (0.7347, 0.2653)
Green = (0.1596, 0.8404)
Blue = (0.0366, 0.0001)
Primaries를 가지고 색역을 표시해보면 ProPhotoRGB의 색역이 sRGB보다 크다는 것을 알 수 있습니다. 더불어 같은 Red이더라도 서로 다른 x, y 좌표를 가진다는 것을 알 수 있습니다. 이를 다시 말하면, 똑같은 컬러 코드 (255, 0, 0)이더라도 색 공간에 따라 다른 빨간색이 나타날 수 있습니다.
Whitepoint는 표준 광원(Standard Illuminant)을 삼색 자극값으로 치환한 것입니다. CIEXYZ에서 삼색 자극값 X, Y, Z는 CIExyY 색 공간에서의 x, y, Y 값으로 바꿀 수 있고, 따라서 표준 광원 또한 x, y, Y 값으로 표현될 수 있습니다. 즉, CIE 1931 색도도 위에 x, y 좌표로 표현될 수 있습니다.
위와 같은 설명은 너무 어렵습니다. 따라서, Whitepoint를 쉽게 말하자면 하얀색에 대한 정의입니다. 우리가 정오에 야외에서 찍은 사진과 실내 백열등 아래에서 찍은 사진은 같은 하얀색도 다르게 나타납니다. 마찬가지로, Whitepoint가 서로 다른 색 공간에서는 같은 하얀색도 다르게 나타납니다.
하얀색을 어떻게 정의하느냐에 따라 이미지의 전체적인 온도가 결정됩니다. 따라서, Whitepoint는 하얀색 뿐만 아니라 색 공간의 모든 색들에 영향을 미칩니다.
표준 광원(Standard Illuminant)
물체의 색은 조명 종류 및 빛의 세기에 따라 달라지므로 이를 표준화하기 위한 광원을 표준 광원이라고 한다. 다른 조건의 조명 환경에서 촬영된 이미지를 비교하기 위해 사용한다.
표준 광원은 알파벳과 숫자의 조합으로 표시합니다. 가장 많이 사용되는 표준 광원은 D50, D55, D65, D75 등입니다. D65가 보통 정오의 햇빛을 표현하는 표준 광원입니다.
RGB 색 공간들은 저마다 Whitepoint를 정의합니다. 그리고 이 Whitepoint들은 CIE 1931 색도도 위에서 Planckian locus에 가까이 분포합니다.
예컨대, sRGB의 Whitepoint는 D65이며 이는 색 온도 6504K에 근사합니다.
Transfer Function은 광학 신호와 전기 신호 간의 상호 변환 관계를 정의한 변환 함수입니다. Transfer Function은 EOTF(Electro-Optical Transfer Function)와 OETF(Optical-Electro Transfer Function)로 나뉘는데, 전자는 전기 신호를 광학 신호로 변환(전광변환)하는 함수이고, 후자는 그 반대(광전변환)입니다. 즉, EOTF는 이미지 파일을 디코딩하여 출력 장치로 출력할 때, OETF는 카메라가 빛 정보를 받아 디지털 파일로 인코딩할 때 사용되는 함수입니다. 그 외에도 카메라에 포착된 빛과 디스플레이 장치에 출력할 빛의 차이를 보완해주는 OOTF(Opto-Optic Transfer Function)가 있습니다.
Transfer Function을 공부하면서 깨달은 바는 'Transfer Function만으로도 한 시리즈의 글을 쓸 수 있겠다'였습니다. 즉, 그 내용이 너무 많고, 어려웠습니다. 그래서 여기선 RGB 색 공간에서 Transfer Function이 가지는 주요한 기능만 소개하고 넘어가도록 하겠습니다. Transfer Function에 대해선 추후 다른 글에서 자세히 설명드릴 수 있기를 바랍니다.
RGB 색 공간의 Transfer Function은 대표적으로 감마 보정(Gamma Correction)과 같은 작업을 수행합니다.
감마 보정은 다음 글에서 다룰 선형 워크플로우(Linear Workflow)에서 매우 중요하게 다뤄질 것이기 때문에 여기선 간단히 언급만 하고 가겠습니다.
CRT 모니터가 갖던 특성과 색에 대한 우리 눈의 특성(두 특성들에 대해서도 다음 글에서 자세히 다루겠습니다) 때문에 대부분의 모니터들은 이미지를 원래 이미지보다 조금 어둡게 보여줍니다. 따라서, 카메라가 이미지를 촬영하고 이를 디지털 파일로 저장할 때 이미지를 보다 밝게 저장합니다(물론 이미지를 어떤 파일로 저장하느냐에 따라 다릅니다). 그럼 두 효과가 상쇄되어 모니터가 원래 이미지를 원래 밝기대로 보여줄 수 있는 것입니다. 이렇게 이미지를 보다 밝게 저장하게 해주는 것이 바로 이미지 파일의 RGB 색 공간이 갖는 Transfer Function입니다. 각각의 RGB 색 공간은 저마다의 계산법으로 이미지를 밝게 만듭니다.
JPEG vs RAW
DSLR이나 미러리스 카메라를 조금 다루실 줄 안다면 카메라 설정에서 이미지 파일의 형식을 지정할 수 있다는 것을 알고 계실 것입니다. 흔히 JPEG 파일이나 RAW 파일 등의 옵션이 제공됩니다. 그리고 색 공간 역시 지정할 수 있는 카메라들이 있습니다. 보통 sRGB나 AdobeRGB 등이 제공되곤 합니다.
JPEG 파일은 위에서 설명한대로 사진을 다소 밝게 만든 채 저장공간에 저장됩니다. 나중에 컴퓨터에서 JPEG 파일을 열면 컴퓨터 모니터가 밝게 만들어진 사진 파일을 어둡게 조정하여 비로소 원래 우리가 원하던 밝기의 사진을 볼 수 있게 되는 것입니다.
하지만 RAW 파일은 찍은 그대로 저장 공간에 저장됩니다. 따라서, RAW 파일을 컴퓨터에서 열면 모니터가 이를 어둡게 만들어 결국 우리 눈에는 다소 어두운 모습으로 사진이 보여집니다.
.이는 카메라가 JPEG와 RAW 파일을 생성할 때, 다른 색 공간을 적용하기 때문입니다. JPEG 파일의 경우 위에서 말한 색 공간 설정에서 선택한 색 공간이 적용된 채 파일이 저장됩니다. 그리고 sRGB나 AdobeRGB 등은 이미지를 밝게 저장하는 Transfer Function을 갖고 있습니다. 반면, RAW 파일은 위 설정을 무시한 채 색 공간을 공백으로 둡니다. 따라서 이미지를 밝게 저장하지 않습니다.
RGB 색 공간은 Primaries, Whitepoint, Transfer Function으로 구성되어 있습니다. 디지털 디바이스에서 우리가 보는 이미지들은 대부분 이런 RGB 색 공간에서 특정한 의도에 맞게 '조작'된 이미지이며 이를 display-referred 이미지라고 부릅니다. 반대로, 아무런 조작이 가해지지 않았고 카메라에서 포착된 실제 밝기 신호에 비례하여 생성된 밝기 신호로 저장된 이미지를 scene-referred 이미지라고 부릅니다. 그리고 display-referred와 scene-referred 등을 묶어서 Image State라고 합니다.
마지막으로 Viewing Environment, 혹은 Viewing Condition이란 개념이 있습니다. 이는 쉽게 말해 우리가 이미지를 보는 환경, 또는 조건입니다. 예컨대, 맑은 대낮의 야외에서 보는 이미지와 암막 커튼을 친 방에서 보는 똑같은 이미지는 서로 다르게 보일 수밖에 없습니다. 백열등 아래에서 본 이미지와 형광등 아래에서 본 똑같은 이미지 역시 서로 다르게 보이겠죠. 이런 차이들을 극복하고 제작자의 의도에 맞게 이미지를 상영하기 위해선 톤 매핑(Tone Mapping)이나 CAT(Chromatic Adaptation Transform)과 같은 과정을 거칩니다.