Color Space or Color Model
Color Space(색 공간)은
"사람의 눈"이 3개의 color에 반응하는 감각세포(cone cell)를 통해 색을 인식하는 것에 기반하여
Tristimulus values (X,Y,Z)와 각각의 color를 연관시키는 방식처럼
"특정 공간의 위치"에 "특정 color를 할당"하여
해당 위치 좌표(~position vector)를 통해 color를 표현하게 하는
수학적 모델을 가르킴 (Color model이라고도 불림).
다음과 같은 Color cube를 보면 보다 쉽게 이해할 수 있음.
0. Trichromatic Color Vision System
인간은 Trichromatic color vision 시스템을 가짐.
- cone cell이 색을 인지. (rod cell보다 수가 적고 sensitivity가 낮음)
Cone Cell and Rod Cell
3가지 종류의 cone cell에 대해 각 color에 대한 상대민감도는 다음과 같음 (겹쳐있어서 기계적으로 한종류만 activation되진 않음)
1. CIE 1931 XYZ Color Space
1931년 International Commission on Illumination(CIE, Commission Internationale de l'Eclairage 국제 조명위원회)이 제안한 color space.
- 측색 및 조명에서 동일한 색을 사용가능하도록 표준화하기 위해 제안됨.
- 여러 가지 color space 중, CIE XYZ 는 인간의 색채 인지를 직접 측정하여 만들어졌기 때문에, 색 공간을 만드는 데 기본이 되는 특수한 색 공간.
2. 다양한 Color Space
완벽한 모델인 Color space는 존재하지 않음. → 응용 분야에 따라 적합한 Color space (or color model)이 존재.
2-1. Gray-scale
흔히 애기하는 흑백 사진이 바로 gray-scale image임.
(엄밀하게 흑백만 존재할 경우, binary image이나 우리가 흔히 애기하는 흑백사진은 명암정보를 가짐)
모든 색이 단일 채널에 의해 표현된다.
- 0 : black
- max : white
intensity (brightness) : pixel의 value임.
2-2. RGB (or BGR)
Gray scale에서 pixel이 scalar를 값으로 가지는 것과 달리,
vector를 값으로 가짐. Vector의 "element 수"를 흔히 "channel 수"라고 부름.
Additive color model: 서로 가산될 수 있는 삼원색인 Red, Green, Blue로 구성.
- RGB 모형은 3개 채널만 가지고 수행하는 점 때문에 다루기 쉬움.
- 영상처리 알고리즘들이 바로 적용이 쉽지 않음(보통 gray-scale 즉 명암도만을 처리하거나 binary image에서 동작하도록 만들어진 알고리즘이 대다수)
PNG등의 경우, alpha channel이 존재 : 배경의 투명도를 위해서 존재하며, background영역의 pixel은 0인 값을 가짐. 이는 RGBA color space라고도 불림
Intensity 추출 공식 (Gray-scale의 intesity를 RGB모델에서 구하기)
- NTSC(National Television Standards Committee)표준: 명암도(Brightness) = 0.2999R + 0.587G + 0.114B
- 일반적인 변환: 명암도 = 0.333R + 0.333G + 0.333B
2-3. HSI, HSV, HSL
Color space 에서 영상처리 할 때 가장 많이 사용하게 되는 space 중 하나.
HSI 는 Color 에서 색의 밝기(휘도,Luminance, 명도,Lightness, 밀도,Intensity)를 분리시켜 다음과 같이 구성된 Color space임.
- HSV는 밝기를 Value로 표현하고, HSL은 Lightness(or Luminance)로 표기함
- 이름이 조금씩 다르다보니 실제 밝기의 값을 계산이 조금씩 차이가 있으나 거의 유사하다고 봐도 됨.
인간이 느끼는 색상 공간과 가장 유사한 것이라고하나,
인간의 시각 반응에 선형이지 않음.
(사실, RGB도 비선형임. 선형이 필요하다면.... CIELab을 참고 (Gonzalez2010, 6장)
HSI / HSV /HSL 의 의미:
- H : Hue (색상)
- 빛의 파장의 길이(wavelength or freq.)에 의해 결정됨.
- 빨강은 0도, 초록은 120도, 파랑색은 240도
- red: 165~180,0~15
- green: 45~75
- blue: 90~120
- 0° ~ 360°
- opencv의 경우, 0~255의 범위에서 표현.(0~180으로 표현됨(1/2 처리))
- S : Saturation (채도 : 색상의 탁하고 맑음의 정도)
- 예 : 붉은 색이 핑크색이 되는 과정같이 순색(붉은색)의 경우 saturation이 높고, 핑크를 거친후 결국 회색이 됨.
- 채도가 낮을수록 컬러는(명도에 따라) 흰색/회색/검정색 (무채색들)이 됨 : 흐린 색들
- 채도가 높을수록 짙은 색이라고 애기가 됨.
- 0% ~ 100% ( or \([0.0,1.0]\))
- opencv의 경우, 255가 1.0에 해당.
- V 또는 I : Value or Intensity, Lightness(명도) : 밝기의 정도
- 빛의 진폭(amplitude)에 의해 결정됨. 진폭이 크면 밝기가 커짐.
- 0% ~ 100% (or \([0.0,1.0]\))
- opencv의 경우, 255가 가장 밝은 색. 0이 가장 어두운 색(검은색)으로 표현됨.
다음과 같은 그림으로 표현됨.
2-4. YCbCr, YUV
사람이 색상보다 밝기에 더 민감하게 인식하는 특징을 이용함. (색상 인식이 밝기 인식에 비해 더 둔함)
- 밝기 정보와 칼러 정보를 따로 분리해서 다루므로,
명암대비 (contrast) 등이 나쁜 영상을 좋게 만드는데 사용됨. - 밝기 정보를 하나의 채널로 사용하므로 명암처리가 쉬움.
YCbCr : MPEG, JPEG 등의 디지털 컬러 정보 인코딩에 이용됨.
YUV : 아날로그 컬러 인코딩 시스템 Phase Alternating Line (PAL)에서 정의
사실, YCbCr과 YUV는 엄밀하게는 차이가 있으나, 크게 보면 비슷하기 때문에 같이 다룸...
- Y : Luma (밝기)
- 많은 비트수를 할당. 4bit
- Cb (or U) : Chroma Blue (밝기와 파란색과의 색상차)
- 둔감한 색상정보이므로 적은 비트수 할당. 2bit
- V : Chroma Red (밝기와 붉은 색의 색상차)
- 둔감한 색상정보이므로 적은 비트수 할당. 2bit
RGB to YCbCr 변환공식:
- Y = 0.29900R + 0.58700G + 0.11400B
- Cb = -0.16874R - 0.33126G + 0.50000B
- Cr = 0.50000R - 0.41869G - 0.08131B
YCbCr to RGB변환공식:
- R = 1.00000Y + 1.40200 Cr
- G = 1.00000Y - 0.34414 Cb - 0.71414 Cr
- B = 1.00000Y + 1.77200 Cb
2-5. CMY
컬러 프린터 등의 인쇄 시스템에서 사용되는 color space
- 청록색(Cyan),
- 자홍색(Magenta),
- 노랑색(Yellow)
“RGB color space와 보색관계(complement)”로 RGB 공간으로 변환이 간단함.
CMYK color space는 CMY에 K(검정색)를 더한 공간. 컬러 잉크젯프린터의 경우, 흑색잉크가 따로 있음. 이를 반영한 color space.
RGB to CMY 변환 공식: C = 1.0 – R , M = 1.0 – G , Y = 1.0 - B
CMY to RGB 변환 공식: R = 1.0 - C , G = 1.0 - M , B = 1.0 - Y
RGB to CMYK
- K = min(C,M,Y) ,
- C = C - K ,
- M = M - K,
- Y = Y - K
3. 같이보면 좋은 자료들
https://dsaint31.me/mkdocs_site/DIP/cv2/ch02/dip_cv_color_space/
'Programming > DIP' 카테고리의 다른 글
[DIP] Modulation Transfer Function and Contrast (1) | 2022.09.26 |
---|---|
[DIP] OpenCV 에서 URL로 이미지 로딩 (0) | 2022.09.21 |
[OpenCV] cv2.cvtColor (0) | 2022.07.14 |
[Math] Hessian: Summary (0) | 2022.06.05 |
PIL과 opencv에서의 image 변환. (1) | 2021.11.22 |