디지털 영상이든 아날로그 영상이든 색을 표현하는 가장 기본적인 방법은 RGB 색공간을 사용하는 것입니다.

하나의 색(빛)을 R, G, B 세 가지 성분의 합으로 표현하는 것이죠.

하지만 디지털 영상 압축에서는 일반적으로 YUV 색공간을 사용합니다.

(YUV는 정확히 말하면 YCbCr을 말하는데 이 글에서는 편의상 YUV로 표기하겠습니다.)

YUV 색공간은 임의의 색을 하나의 밝기 신호(Y)와 두 개의 색차 신호(U, V)로 표현하는 방식입니다.

디지털 영상 압축에서 YUV를 사용하는 이유는 사람의 눈이 밝기 신호(Y)에 더 민감하기 때문입니다.

비교적 덜 민감하게 반응하는 색차 신호의 정보를 줄임으로써 효율적인 압축이 가능하죠. (크로마 서브 샘플링)

뭐 이유야 어찌됐든 디지털 영상 압축에서는 주로 YUV가 사용되기 때문에 최초의 RGB 신호를

YUV 신호로 바꾸는 과정이 필요합니다. 마찬가지로 YUV 신호를 다시 RGB 신호로 바꾸는 과정도 필요하겠죠.

예를 들어 지상파 HDTV를 시청하는 과정을 간략히 정리해보면,

A. 방송국의 카메라에 들어오는 빛은 센서에 의해서 RGB 신호로 바뀝니다.

B. 이 RGB 신호를 YUV 신호로 바꾸고 MPEG2로 압축(인코딩)해서 송출합니다.

C. 가정(HDTV)에서는 수신된 MPEG2 스트림을 압축 해제(디코딩)해서 YUV 신호를 만들어냅니다.

D. YUV 신호를 다시 RGB 신호로 바꿔서 화면에 표시(디스플레이)합니다.


이처럼 카메라의 센서라든지 디스플레이 장치 등은 항상 RGB 신호를 기반으로 하기 때문에

RGB 신호를 YUV 신호로(B.), 또는 YUV 신호를 다시 RGB 신호로(D.) 바꾸는 과정이 필요한 것이죠.



RGB<->YUV 변환에 사용되는 방법도 여러가지가 있는데 BT.709(Rec. 709)나 BT.601(Rec. 601) 등이 이와 관련된 표준들입니다.

BT.709는 HDTV나 블루레이, BT.601은 SDTV나 DVD 등에서 주로 사용되고있죠. 이 외에도 SMPTE 등 다양한 표준들이 있습니다.

그리고 이런 표준들에 따라서 RGB<->YUV 변환에도 약간씩의 차이가 있습니다.


먼저 레벨과 관련된 내용인데 TV레인지 또는 PC레인지(Full range)라는 말을 들어보셨을 겁니다.

RGB 신호가 YUV 신호로 바뀔 때 바뀐 YUV 신호가 어떤 범위에 놓이는지에 따라서 TV 또는 PC레인지로 나뉩니다.

예를 들면 아래와 같이 밝기 신호인 Y 채널의 신호만 놓고 봤을 때, 원본 RGB 신호의 흰색과 검은색이

변환된 YUV 신호의 0~255에 대응하면 PC레인지 영상(YUV)이라고 합니다.


반면 원본 RGB 신호의 흰색과 검은색이 변환된 YUV 신호의 16~235에 대응하면 TV레인지 영상(YUV)이라고 합니다.


이처럼 RGB->YUV 변환 과정에서 YUV 신호가 어떤 범위에 놓이는지에 따라서 PC레인지와 TV레인지로 구분되는데

한 가지 중요한 점은 둘 다 YUV 값의 범위는 0~255라는 것입니다. 다만 흰색과 검은색의 정의만 다를 뿐이죠.

0~255의 값들 중 흰색을 255, 검은색을 0으로 정하면 PC레인지이고 흰색을 235, 검은색을 16으로 정하면 TV레인지인 것입니다.

따라서 RGB->YUV 변환을 어떻게 했는지에 따라서 그에 맞는 YUV->RGB 변환을 해줘야 위의 그림들처럼 원래의 밝기를 정확히 표시할 수 있습니다.

하지만 다음과 같이 PC레인지의 YUV 영상을 TV레인지로 보고 변환을 한다면 어떻게 될까요?


원래는 Y 값이 16이면 약간 밝은 검은색으로 표시되어야 하지만 이 경우에는 완전히 검은색으로 표시되겠죠.

YUV->RGB TV레인지 변환은 16을 완전히 검은색으로 인식할 테니까요.

반대로 아래와 같이 TV레인지의 YUV 영상을 PC레인지로 보고 변환한다면 검은색으로 표시되어야할 16이 검은색보다 밝게 표시될 겁니다.


YUV->RGB PC레인지 변환은 16을 완전히 검은색이 아니라 약간 밝은 검은색으로 인식하기 때문이죠.


이처럼 재생 과정의 잘못된 YUV->RGB 변환을 바로잡기 위해서 사용되는 필터가 레벨 조정 필터들입니다.

PC레인지의 YUV 영상을 TV레인지로 바꾸거나 TV레인지의 YUV 영상을 PC레인지로 바꿔줌으로써 원래의 밝기대로 표시하게 해주는 것이죠.

예를 들면 TV레인지의 YUV 영상에 아래와 같이 Levels 필터를 적용하면 PC레인지의 YUV 영상으로 바뀌게 됩니다.

MPEG2Source("test.d2v")

Levels(16,1,235,0,255)


만약 현재 사용중인 디스플레이 장치가 TV레인지의 YUV 영상을 PC레인지로 보고 변환을 한다면 이런식으로 스크립트를 작성해서

제대로 된 변환이 이루어지도록 만들어 주는 것입니다. 


다음으로 컬러 매트릭스에 관한 내용인데 지금까지 설명드린 레벨 조정과 기본적인 개념은 비슷합니다.

컬러 매트릭스는 RGB<->YUV 변환에 사용되는 변환식을 말하는데 표준별로 약간씩의 차이가 있습니다.

TV, PC레인지가 YUV의 범위에 관한 문제라면 컬러 매트릭스는 범위와 상관없이 변환식 자체에 관한 문제라고 할 수 있습니다.

즉 레인지가 같은 영상이라도 RGB<->YUV 변환식이 다르면 영상의 색감이 달라지게 되는 것이죠.

따라서 어떤 영상이 BT.709로 변환된 YUV 영상이라면 다시 RGB로 바꿀 때에도 BT.709를 사용해야 제대로 된 색감을 표시할 수 있습니다.

만약 BT.709로 변환된 YUV 영상에 BT.601이 적용되는 상황이라면 이 영상을 BT.601의 YUV 영상으로 바꿔주면 되겠죠.

Avisynth의 Colormatrix 필터 등은 이런식으로 YUV 영상의 데이터를 BT.709 또는 BT.601 등에 맞게 바꿔주는 필터입니다.

레벨 조정 필터들과 마찬가지로 YUV->RGB 변환이 잘못 적용되는 경우 이를 바로잡아주기 위한 용도로 사용됩니다.





'인코딩 일반' 카테고리의 다른 글

DTS-HD Master Audio와 TrueHD  (3) 2013.03.22
x264의 --level 옵션  (17) 2013.02.25
레벨 조정과 컬러 매트릭스  (17) 2013.02.14
H.265 / HEVC 동영상 압축 표준  (15) 2013.01.29
x264의 VBV 옵션  (7) 2013.01.24
프로그레시브로 송출되는 지상파 디지털 방송?  (3) 2013.01.16
Posted by 김코덱