잘 알려져있다시피 컴퓨터에서 이미지 및 동영상을 저장할 때는 RGB 그대로 저장하는 것보다 YCbCr로 변환해서 저장하는 것이 일반적이다.


오랜만에 소환되신 Lena님…


RGB는 특성상 중복되는 값이 많이 들어가며, 이러한 중복을 최소화하기 위해 변환 및 서브샘플링을 하는 것이다.


https://en.wikipedia.org/wiki/YCbCr 에서 빌려왔어용


그런데, YCbCr 또는 YUV의 표기법을 읽다보면 헷갈리는 경우가 많다.

YCbCr, YUV, Y'CbCr, YPbPr 등등…


일단, 간단히 이 용어들을 정리해보면 다음과 같다.


1. Y? Y'?


결론부터 간략히 얘기하자면, Y와 Y'는 사실은 정확히 같은 값은 아니다.

Y는 Color Science에서 다루는 RGB의 가중치 합인 휘도를 의미한다.

반면, Y'는 Luma라 불리우며, 감마 변환된 RGB 즉, R' G' B'의 가중치 합이다.



2. UV ? CbCr?


최초에 비디오 전송은 전자공학 계에서 먼저 연구가 되었다.

RGB를 YUV 등으로 변환하는 것부터 모두 전자공학의 산물이다.

그 과정에서 자연스럽게 회로를 지칭할 때 사용하는 U, V라는 용어가 사용되었다.


이후 전산학에서 다루는 과정에서 Cb, Cr이라는 용어를 사용하게 되었고, 현재에도 아날로그 영역은 YUV, 디지털 영역YCbCr로 부르는 게 일반적이다.



3. Pb? Cb?


Pb/Pr 역시 아날로그 계에서 이를 부르는 용어이다.

값은 사실상 Cb, Cr과 동일하다.



4. Y, Cb, Cr의 의미는?


앞에서도 간략히 적었듯이 Y(또는 Y')는 전체의 밝기를 의미하고, 식으로 표현하면 Green의 가중치가 가장 높은 색의 밝기… 정도로 이해하면 된다.

Cb와 Cr은 각각 이 Y와 blue/red의 색의 차이를 의미한다.



이제, 모든 용어를 Y, Cb, Cr로 표기하기로 하고…

RGB는 아래의 식들을 통해 각각 Y, Cb, Cr로 변환할 수 있다.



이때 K_R + K_G + K_B = 1이다.


물론, 이 식을 역으로 풀어보면 Y, Cb, Cr에서 RGB로 변환할 수도 있다.


B-Y = 2 \cdot C_b \cdot ( 1 - K_B )


즉,

B = Y + 2 \cdot C_b \cdot ( 1 - K_B )

이고, 마찬가지로 하면,

R = Y + 2 \cdot C_r \cdot ( 1 - K_R )

이다.


G는 조금 복잡하다.





이렇게 도출된 식에 K_R, K_G, K_B에 숫자를 대입하면 정확한 식을 도출할 수 있다.

도출 자체가 어려운 건 아닌데, 대부분의 자료에 이 과정이 생략된 경우가 많아 직접 하나씩 도출해봤다.


1. ITU-R BT.601


가장 널리 알려진 값들은 바로 BT.601의 값들이다.



이 권고안은 최초 아날로그 TV에서부터 사용되었으며, 이후 MPEG에서도 계속 사용되었다.

따라서, MPEG 쪽을 조금만 공부해본 사람이라면 아래의 식들을 쉽게 기억할 것이다.



이의 역함수는 아래와 같다. 이 역시 많이 보던 수식.




2. ITU-R BT.709


BT.709 권고안은 HDTV를 위해 나온 안이다.

기본 상수는 아래와 같다.



이 값들을 동일한 수식에 넣으면 아래와 같은 식들이 나온다.



역함수는 아래와 같다.




3. ITU-R BT.2020


4K/UHD 등을 위하여 지원되는 색의 범위가 넓어진 권고안이 BT.2020이다.

기본 상수는 아래와 같다.



변환식은 아래와 같고…



역함수는 아래와 같다.



덧. Y, Cb, Cr의 범위에 따라 뒤에 -128을 추가하는 경우도 있지만, 여기서는 생략함



  1. 후후후 2018.09.01 07:00 신고

    제거기 최고

+ Recent posts