#1. [H.264] 동영상 압축의 기본 개념
#2. [H.264] 동영상 압축의 기본 개념 – RGB, YCbCr, 서브샘플링
#3. [H.264] Block-based Motion Estimation(ME)
#4. [H.264] Discrete Cosine Transform(DCT) 이산 코사인 변환
#5. [H.264] Quantization(양자화)과 Zig-zag scanning

안녕하세요? 맨날맑음 입니다.

이전 포스팅에서는 동영상의 정의와, 동영상을 압축하는 기본적인 방법에 대해 간단히 살펴 보았습니다.
이번 시간에는 동영상을 압축하는 자세한 방법을 알아보기 전에 색공간 RGB, YUV(YCbCr) 그리고 YUV 서브샘플링에 대해 알아 보도록 하겠습니다.

본론으로 들어가기 전에 간단하게 색공간(Color Space)에 관해 알아 보도록 하겠습니다.
위키의 설명에 보면 색공간은 색표시계를 3차원으로 표현한 공간 개념이라고 나와있습니다. 즉 색을 표현하는 방법은 여러가지(RGB, CMYK, HSV, CIE, YCbCr 등)가 있는데 각각이 색을 표현하는(담는) 방법이라고 생각해도 될 것 같습니다.

#1. RGB 색공간

-그림1. RGB 채널의 원리 -

빛의 삼원색(빨강, 녹색, 파랑)을 이용하여 색을 표현하는 방법 입니다. 원색 신호라고도 불립니다. 일반적으로 TV나 모니터, HTML의 색상표현에 쓰이며,  컴퓨터의 모니터는 RGB방식을 사용하므로, 우리가 영상을 화면에 디스플레이 하기 위해서는 RGB로 변화 하여야만 합니다. 각 값들은 0~255까지의 값(8bit)을 가지고 있으며, 각 값들을 가산 혼합하여 색상을 표현합니다.

#2. YCbCr 색공간

-그림2.  YCbCr 이미지의 구성요소-

YCbCr에서 Y는 휘도(빛의 양)이고, Cb와 Cr은 색차(크로마)를 나타냅니다. 색차 신호라고도 불립니다.이 방식은 RGB보다 색상의 분리 및 전달 효과는 약하지만, 적은 데이터로 보다 많은 색상을 나타낼 수 있는 장점을 가집니다.

YUV를 사용하는 대표적인 기계는 텔레비전입니다. 지금은 전부 칼라 텔레비전이지만, 예전 흑백의 경우 휘도(밝기)만을 가지고, 방송을 하다가, 컬러TV는 CbCr성분을 더해서 방송을 하기 때문에 지금에 와서도, 흑백 TV를 볼 수 있는 이유입니다. Y 성분만 뽑아 쓰면 되니까요.

이 방식에서 흑백을 표현하기 위해서는 Y 성분만 있으면 됩니다. 사람이 물체를 인식하는데 휘도(밝기)에 민감하지 그 외 Color 성분은 별로 민감하지 않습니다. 이것은 눈의 특성을 보면 알 수 있는데요, 사람의 눈에서 휘도를 구분하는 ‘간상세포’는 눈 전체영역에 분포하게 되고, 색을 구분하는 ‘원추세포’는 눈의 중심부에만 분포하여, 사람의 눈은 색상보다는 밝기에 민감하게 됩니다.

이렇게 때문에 사람이 민감하지 않은 모든 색상정보를 전부 포함해야 하는 RGB방식에 비해서, 적응양의 데이터(약 2/1)로도 비슷한 화질을 낼 수 있게 됩니다. (아래 설명 할 서브샘플링을 하였을때..)

영상장치가 영상을 만들 때, 빛을 인식하여(RGB)를 YUV로 바꿔 주게 되며, YUV를 압축하기 위해 서브샘플링을 하여 데이터를 줄이고, 저장장치에 저장하게 됩니다. 계속 알아야 할 개념이 늘어나고 있습니다. 다음은 서브샘플링에 관해 알아보겠습니다.

#3. YbCbCr 서브샘플링

동영상(Image)의 크기를 줄이기 위해 YbCbCr을 그대로 사용하기 보다는 압축하는 것이 효율 적입니다. 앞서 설명처럼 인간은 색차 보다는 밝기에 더 민감하기 때문에 샘플링에서도 이러한 기법을 사용함으로써 데이터를 압축 할 수 있습니다. 쉽게 말해 Y성분을 CbCr보다 많이 할당 함으로써 데이터를 줄이는데 감소한 데이터에 비해서 시각적인 차이는 거의 없게 됩니다.

러한 샘플링 기법은 Y Cb Cr의 각각의 비율에 따라 조금씩 다르게 나누어 집니다. 인코딩에서 사용하는 샘플링 비율은 아래의 3개의 비율을 사용합니다.

  • YCbCr 4:4:4 format

                                                  - 그림3. YCbCr 4:4:4 format -
     각 픽셀당 Y Cb Cr이 각각 4개가 들어가게 됩니다.

 

  • YCbCr 4:2:2 format
                                                       - 그림4. YCbCr 4:2:2 format -
    각 픽셀당 2개의 블럭을 기준으로 Y 4개 CbCr 2개를 공유하여 사용합니다.

  • YCbCr 4:2:0 format (YCbCr 4:1:1)
                                                        - 그림5. YCbCr 4:2:0 format -
    이 방식이 동영상 인코딩시 표준으로 쓰입니다. 그림5를 보면 YCbCr 4:1:1로 표현하는 것이 맞지만 표준화 기구에서 정한 이름이 4:2:0이라고 합니다. 저도 처음에 이름 때문에 좀 개념이 해깔렸습니다. 각 픽셀당 Y 4개 CbCr 1개를 공유하여 사용합니다.

    내용 추가 '09.09.02
    YCbCr (4:2:0) 와 YCbCr (4:1:1) 의 차이는 같이 사용하는 자료들도 있고 다르게 구분하는 자료들도 있는 것 같군요. 그래서 제 생각에는 YCbCr (4:2:0) 와 YCbCr (4:1:1)이 유사하다고 생각하면 댈 것 같습니다.  실제로 많은곳에서  같은 서브샘플링 개념으로 사용되고 있는 것도 사실이니까요.


#4. YCbCr 4:2:0 video format일 경우 데이터 구조는 어떠할까요?

데이터의 Type은 Byte이고 값은 0~255의 값이 들어갑니다. 그리고 중요한 것은 YCbCr의 경우 파일의 정보를 표시하는 ‘헤더’는 존재 하지 않습니다. 그래서 다음과 값은 데이터 구조를 가지게 됩니다.


-그림6. YCbCr 4:2:0의 데이터 구조-

빨간 점선은 프레임의 구분을 의미 합니다. 즉 한 프레임에 해당하는 Y정보가 먼저 나오고, 뒤를 이어 Cb Cr의 정보가 파일에 쓰여 있습니다. 예를 들어  해상도가 10X10이고, 10개 Frame으로 구성된 동영상의 경우 Y 100개, cb 25개, Cr25개의 정보가 쭉 이어 나오고 또 Y 100개, cb 25개, Cr25개의 정보가 쭉 이어 나오는 식으로 총 10개(10 프레임이므로)가 나열 됩니다.

 

생각보다 간단한 구조입니다. 이렇게 생각해 보면 파일에서 100Byte를 읽어오고 50Byte 건너뛰고 또 100Byte를 읽고 50Byte를 건너뛰는 방법으로 파일을 읽어 새롭게 저장하면, 원래 영상에서 흑백영상을 뽑아 올 수도 있습니다.

이번엔 RGB, YCbCr의 색공간에 대해 살펴 보았고, 서브샘플링에 관해서도 살펴 보았습니다. 다음 번에 어떠한 내용부터 올려야 할지 아직 잘 모르겠네요. 일단은 Motion Estimation 기법에 관해 올리려고 생각 중에 있습니다.




-------------------------------------------------------------------------------------------------------------------------------------------

# 마치면서..(좀더 알아볼 점)

  • YCbCr에서 Y는 어떤(? 정확히 모르겠어요) 용어와 해깔리지 않기 위해 Y’라고 표현해야 맞다고 합니다. 즉 Y’CbCr입니다. 대강 설명하자면 아날로그 인코딩과 디지털 인코딩 방식의 차이라고 알고 있습니다.
  • YUV와 YCbCr이 같은 거처럼 글을 썻지만, 사실 비슷하지만 조금 다른 개념인 것 같습니다. 저는 인코딩에 필요한 개념으로 용어에 따른 차이가 있을 수 있겠습니다.

 

참고 사이트 : http://www.fourcc.org/

Posted by 맨날맑음
,