11/25/2015

RGB , YCbCr, YUV 및 영상 Format 정리

매번 영상관련부분을 할때 마다 관련부분을 까먹어서 아래와 같이 간단히 정리한다.


1. RGB (Red , Green, Blue)

일반적으로 RGB Color의 정확한 이해부터 해보도록 해보자.
어렸을 때 흔히 빛의 3원색과 색의 3원색을  배웠던 기억이 있을 것이다.
우선 RGB를 이해하기위해서는 빛의 3원색의 이해가 중요하다.
색의 3원색은 우리가 물감을 이용할때가 필요 할때이며, 빛의 3원색과 성질이 다르다.

1.1 빛의 3원색 

이 세상에는 다양한 색이 존재하고 인간은 이를 많은 색상을 구분하는 것이 가능하다. (사람이 모든 색상을 완벽하게 구분을 하는 것은 아니지만)

색상의 기본적인 이해부터 해보도록 해보자. 일단 빛이 있어야 사람은 색상을 구분한다.
흔히 예전에 빛의 R, G, B로 색을 기본으로 합칠 경우 거의 모든색상이 표현이 되는데, 이를 빛의 3원색이다. 그리고, 이것이 RGB 이다.
기본적으로 존재하는 색상은 3가지 색상이며 이를 혼합하여 다른색상을 표현을 하는 것이 기본원리이다.
흔히 말하는 빛의 3원색이라고 한다. 빛의 경우 3가지 색상을 합칠 경우 흰색이 나온다.




1.2 빛의 이론과 성질 

빛의 이론으로 들어가면 빛도 일종의 파장과 진동수가 존재하며 이를 깊게 파고 들고자 한다면 (예전부터 과학동아 많이 봐왔기에 이 부분을 간단히 정리하겠다 )
빛은 파동설과 입자설 존재하며, 이 부분은 거의 정설로 되어져 있다. (이 부분까지 들어가며 설명이 길어질 것 같다, 사실 나도 자세히 모르겠다.)

간단히 설명하면, 빛도 일종의 파장을 가지고 있으며, 주파수를 가지고 있다고 하는 것이 기본 정설이다. 그래서 일종의 주파수 개념이라고 생각을 파면되겠다. 거기에 입자설까지 나왔는데, 그 부분은 나도 오래되어서 까먹었다. (추후 공부하겠지만, 현재부분과 별로 관계가 없다)
관련부분이 궁금하다면, 직접 검색을 추천 (이 부분은 이전에 과학동아에서 우주관련부분에서 많이 설명이 나왔다.)

그래서 결론적으로 RGB의 즉 빛은 3원색에서 각 색상에는 특정 파장(Wavelength) 과 진동수(Frequency ,Hz) 도 존재한다는 것이다.

일단 차근차근 살펴보자. 인간이 볼수 있는 가시광선부터 살펴보자.
아래의 그림처럼 Wavelength와 Frequency를 나타내어주고 있으며,  빨간색으로 갈수록 점점 Low Frequency 와 Wavelength가는 것을 볼수 있다. .  
빛을 파동설로 보기때문에 이를 Microwave와 Radio 까지 연결시켜 볼수 있다.
빛을 일종의 전자파 개념으로 보는 것이다.


  • 파동-입자설 
 https://ko.wikipedia.org/wiki/%EB%B9%9B
 https://ko.wikipedia.org/wiki/%ED%8C%8C%EB%8F%99-%EC%9E%85%EC%9E%90_%EC%9D%B4%EC%A4%91%EC%84%B1


사람은 가시광선의 빛을 보고 색을 감지하기 때문에 이부분에 대해서 좀 더 자세히 알아보자.


RGB 색상혼합
  http://yjh-phys.tistory.com/35
  https://ko.wikipedia.org/wiki/RGB_%EA%B0%80%EC%82%B0%ED%98%BC%ED%95%A9


sRGB관련사항
  https://en.wikipedia.org/wiki/SRGB
  https://ko.wikipedia.org/wiki/SRGB



1.3 RGB의 표현 


  • RGB16  (5:6:5) 
Red,Blue에 5Bit를 할당하고, Green에 6bit에 할당하며, 이유는 Green 값이 Gamma 값과 밀접하기때문에 이곳에 더 할당값을 더 주었다.

그리고, 2Byte로 쉽게 표현이 가능하기에 , 이전에는 Video 영상보다는 거의 OSD에서 많이 사용되어져 왔으며 사용되었다.


  • RGB24  (8:8:8) 
각각 8bit씩 할당하며, 이 값은 LCD에도 전달하기에도 편하고 많이 사용되어지고 있다.
흔히 True Color 라고 하며, RGB888이라고 한다.


  • RGBA 
상위 RGB24와 거의 동일하지만, A 즉, 알파,Alpha 값 즉 투명값을 두어 32bit로 만들어 이를 사용하고 있다.



2. YUV 


YUV를 논하기 전에 사람의 색상을 인식하는 방법에 대해서 좀 알아보도록하자.
인간은 어떻게 색을 구분하는지에 대해서 원리를 알아야 YUV에 대한 기본접근이 가능하기 때문이다.

상위 RGB는 물리적인 접근이라면, YUV는 사람이 색을 어떻게 감지하는지에 대해서 힌트를 얻어 만들어낸 접근방식이라고 한다.
그리고, Analog TV, NTSC 와 PAL에서 이를 주로 사용했으며, Codec에서 주로 사용한다.



2.1 인간의 색 인식 방법 

인간은 망막을 가지고 있으며,  망막에는 망막에 상이 맺히며, 이 상을 시세포가 인지하여 색을 구분을 한다.
시세포는 다시 2가지로 구분이 되는데, 이 것이 간상세포와 원추세포이다.

각 세포의 역할을 살펴보면 다음과 같다.


  • 간상세포(막대세포)
사람마다 다르겠지만, 대체적으로 약 1억 3천만개의 간상세포을 가지고 있다고 한다.
빛에 대한 감도는 원추세포보다는 간상세포가 더 뛰어나기때문에 물체의 명암을 구별을 해주고 빛에 민감하다고 한다.
이 값이 Y값이며, 그래서, YUV 개념이 나왔다고 한다. 
 
  https://ko.wikipedia.org/wiki/%EA%B0%84%EC%83%81%EC%84%B8%ED%8F%AC
  https://en.wikipedia.org/wiki/Rod_cell


  • 원추세포(원뿔세포)
사람마다 다르지만, 약 7백만개 정도를 가지고 있다고 하며, 원추세포의 역할은 자세한 모양과 색을 구별을 해주는 역할이다.
상위에서 RGB에서 배웠듯이 빛의 3원색에 각 빛에는 파장이 존재하며, 각 원추세포는 16개 정도의 원추세포가 존재하는 것으로 알려져있다.
대략 아래와 같이 3가지색으로 구분해보고 그 비율을 보면 아래와 같다.

  1. 장파장 L 원추세포인 로우(ρ)세포 (빨간영역)
  2. 중파장 M 원추세포인 감마(γ)세포 (초록색 과 노랑색 부분)
  3. 단파장 S 원추세포인 베타(β)세포 (파란색)

  https://en.wikipedia.org/wiki/Cone_cell
  https://ko.wikipedia.org/wiki/%EC%9B%90%EC%B6%94%EC%84%B8%ED%8F%AC


  • 사람의 색 인지방법 
  http://yjh-phys.tistory.com/35
  http://lovescience.pe.kr/ms/chapter2/color.htm



2.2 YUV 값의 사용 


  • YUV 값의 사용 
YUV에서 가장 중요한 것은 Y값이며, Y 값만 전송하면, 흑백 TV가 되어진다.
물리적으로는 YUV는 존재하지는 않지만, 주로 전송을 위해 혹은 Codec, 영상처리를 위해서 사용하는 것으로 보인다.

  • YUV의 주파수 개념도입 
생소할지는 모르지만, 보통 영상처리 혹은 Codec에서 많이 사용되어지며, 영상의 한 장면 2D로 나타낼 경우, 
이를 공간주파수? 개념으로 생각하면된다. (정확히 말해 주파수가 아님,주파수는 시간기반임)
예를들면, 사진의 경우 Y값을 간단히 생각을 해보면, 사진 속의 물체 or 사람있다고 하면 그 주변의 Y값은 각 그라데이션 형식으로 윤곽을 나타낸다.
이 때 이 Y값 변화율을 공간주파수?로 도입하여, 2D FFT or DCT 기반으로 사용해서 주파수 대역을 파악 후 각 윤곽(높은 공간변화?) 파악이 가능하다.
그리고, 영상(사진에 Time 축 추가)의 경우, Time 축을 추가되면서 더 재미었지며, 특정영역의 시간변화율 측정에도 주파수 개념을 넣어 또 측정 가능하다.
즉, 3D FFT or DCT 도 가능하며, 이를 사용하는 것이 Codec 과 영상처리인 걸로 기억한다.

  • YUV 사용 
YUV도 좀 깊게 들어가면, Analog 와 Digtal이 존재하며, 이제 거의 Analog를 사용안하니, Digtal 만 알아두자 
YPbPr : Analog 방식으로 Y 값 과 UV 값을 각 주파수에 할당해서 전송하는 것으로 기억하며 Bandwith가 다름(Component Cable) (정확히 기억이 안남?) 
동축 Cable 기반으로도 가능하며, 여러 Channel을 합쳐서 FDM 형식으로 보낼수도 있다. (1 Channel 당 각 Y Bandwith, UV Bandwith가 존재하며,이를 각 Channel 할당하여 전송)
YCbCr : Digtal 에서 Codec or Video 영상처리에서 주로 사용되어진다.
  https://en.wikipedia.org/wiki/YUV

  • YCbCr 관련 사항 Link
간단히 정리하면, 각 Y 값 기반으로 UV를 몇개 넣어 구성하는 구조로 아래와 나뉜다.
YUV 4:4:4 / YUV 4:2:2 / YUV 4:2:0 / YUV 4:1:1
  https://en.wikipedia.org/wiki/Chroma_subsampling
  https://ko.wikipedia.org/wiki/%ED%81%AC%EB%A1%9C%EB%A7%88_%EC%84%9C%EB%B8%8C%EC%83%98%ED%94%8C%EB%A7%81


  • CIE-1931 Color Space 
아래와 같이 각 빛의 Wavelength를 알아보자. (nm, Wavelength라고 보면되겠다)
X 축 Cb
Y 축 Cr


  https://en.wikipedia.org/wiki/Chromaticity
  https://en.wikipedia.org/wiki/CIE_1931_color_space

   https://en.wikipedia.org/wiki/CIE_1931_color_space#CIE_xy_chromaticity_diagram_and_the_CIE_xyY_color_space

  http://www.fourcc.org/yuv.php
  http://ryan.tistory.com/129
  https://msdn.microsoft.com/ko-kr/library/windows/desktop/bb970578(v=vs.85).aspx