Programming/python-computer vision

Color Space (색공간), OpenCV

방황하는 데이터불도저 2023. 7. 13. 20:05

대표적으로 흔히 들어본 색공간인 RGB, HSV, HSL에 대해 알아보자.

 

색공간(Color Space)이란?

  • 색 표시계(color system)의 모든 색들을 3차원 좌표계로 표현한 공간이다.
  • RGB, HSV, HSL처럼 색공간을 표현하는 방법들(=색공간의 종류)을 color model이라고 표현한다.

RGB

  • Red, Green, Blue 3채널로 표현되는 색공간
  • 각 채널마다 0~255로 표현되고, (0,0,0)은 검정색, (255,255,255)는 흰색이다.
  • 빨강(255, 0, 0), 초록(0, 255, 0), 파랑(0,0,255)이고,
  • OpenCV에서는 반대의 순차로 BGR의 형식을 사용한다.

https://en.wikipedia.org/wiki/RGB_color_model

HSV (HSB)

Hue : 색상 

  • 빨강, 노랑, 파랑 등으로 시각적 감각의 속성 사람이 인식하는 색상
  • 0° ~ 360° 까지 표현된다. Hue - Wikipedia
  • OpenCV에서는 0~179까지 사용한다. 
    (360까지의 범위는 1Byte=uint8의 범위를 벗어나기 때문에 절반으로 표준화하여 사용)

Saturation : 채도

  • 이미지의 색상 깊이로 얼마나 순수한, 선명한 색인지를 나타내는 것.
  • 원색에 가까울수록 채도가 높아진다.
  • 0~100%의 비율로 표현되며, 0에 가까울수록 무채색, 100에 가까울수록 선명한 색이다.
  • OpenCV에서는 0에서 255까지 범위로 표현한다.

Value : 명도 (=Brightness : 밝기)

  • 색이 밝고, 어두운 정도
  • 명도가 높을수록 색상이 밝아지며, 낮을수록 색상이 어두워진다.
  • 0~100% 비율을 가지고, 0에 가까울수록 검정색, 100에 가까울수록 가장 맑은 색이 된다.
  • OpenCV에서는 0에서 255범위로 표현된다.

HSL

Lightness : 명도

  • HSV의 Value와 같이 0~100%의 명도를 가진다.
  • HSV(HSB)와의 차이점은 아래의 b,f의 그림으로 설명해보겠다.

https://en.wikipedia.org/wiki/HSL_and_HSV#/media/File:Hsl-hsv_models.svg

b. HL의 스펙트럼에서는 1) RGB색상을 기준으로 정규분포모양처럼 색상이 퍼져있고, 2) Lightness가 1이면 무조건 흰색이 나온다.

f. HV의 스펙트럼에서는 1) RGB색상을 기준으로 좀 더 넓은 범위로 색상이 퍼져있고, 2) Value가 1이어도 Saturation 값에 따라서 흰색일수도 있고, 그냥 가장 밝은 색이 나올 수도 있다. (Saturation도 0이어야 흰색이 나온다.) 

 

이런 분포의 차이를 따라서, 전체적으로는 a와 e 그래프처럼 표현될 수 있고, L, V가 중앙값일때의 색상 그래프로 c, g 그림을 보면 색상 분포의 차이를 확실히 느낄 수 있다.