ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 색공간이 뭐지? RGB YUV
    동영상 편집 & 엔코딩 2013. 12. 20. 12:32
    반응형

    취미로 영상과 사진을 만지면서 알게 된 내용들을 틈틈이 정리해보았습니다. 오류는 리플 남겨주시면 수정하겠습니다. 

     

    0. 색공간

    다양한 색공간이 있다.

     

    우리가 컴퓨터에서 쓰는 RGB도 있고
    인쇄물에서 잉크색을 기준으로 CMYK라고 나누기도 하고.. 
    TV에서 쓰는 YUV라는 방식도 있다. 

     

    자세한 것은 위키 백과의 색 공간을 참고하시기 바라며
    이 글에서는 RGB와 YUV에 한정해서 가볍게 정리하려고 한다. 

     

    http://ko.wikipedia.org/wiki/%EC%83%89%EA%B3%B5%EA%B0%84

     

     

    1. RGB

     

    일단 가장 이해하기가 쉽고 가장 흔하게 접하는 RGB부터..

     

    우리가 어릴 적부터 배웠던 (빛의) 3 원색을 기반으로 한 색공간이라 친숙하고.
    PC에서 많이 사용되는 색공간이라 자주 접한다. 

     

    간단히 설명하자면 다음과 같다.

     

    1. 빛의 3원색이 있다. R, G, B
    2. R, G, B 각각을 가장 어두운 부분부터 가장 밝은 부분까지 순서대로 번호를 붙인다.
    3. 이를 조합한 뒤 배열한다.
    4. RGB 색공간 완성. 

     

    더욱 자세한 것은 아래 링크를 참고하면 좋을 것이다.
    (그림을 꼭 봐야)

    http://ko.wikipedia.org/wiki/RGB_%EA%B0%80%EC%82%B0%ED%98%BC%ED%95%A9

     

    가산 혼합이란 '빛은 더할수록 밝아진다.'는 원리를
    숫자로 표현한 거라고 생각하면 된다.
    숫자가 커질수록 밝아진다. 

    잉크는 더할 수록 어두워지니 숫자가 커질수록 어두워짐...
    이것은 감산 혼합. ^^

     

     

    256 컬러의 표현이 가능한 VGA @,.@

     

     

    1.1 컬러 뎁스

     

    여기까지 이해가 되었으면 최저와 최고를 몇 단계로 나눌 것인가? 이게 문제가 되는데...

     

    백문이 불여일견이라~!

     

    아래 링크에 따라오는 그림들을 보면 이해가 될 것이다.

     

    http://en.wikipedia.org/wiki/Color_depth

     

    1비트

    1비트는 0,1. 2색으로 표현.


    사진들을 보면 디더링을 사용했다.
    제한된 색을 보완해서 단계를 표현하기 위한 기술.
    https://ko.wikipedia.org/wiki/%EB%94%94%EB%8D%94%EB%A7%81

     

    2비트 = 4색
    4비트 = 16색
    8비트 256색

    8비트부터는 꽤 그럴 듯 하지만 색의 변화(그러데이션)가 부드럽지 않고 거칠다. (특히 녹색 부위)

    24비트는 색의 변화(그러데이션)가 부드럽다.

     

    예전에는 16비트를 하이 컬러 / 24 비트를 트루 컬러라고 했다. 알면 아재 ㅠ,.ㅠ

     

    추억 속 하이 컬러 ~!

     

     

    24비트 컬러 팔레트닷

     

    여담이지만
    여기서도 알 수 있는 인체의 비밀 하나~!
    균일하게 RGB를 혼합했음에도 불구하고
    녹색의 면적이 넓어 보이지 않는가? ^^

     

    필자의 생각으론
    진화론적으로 녹색을 구분할 일이 많았기 때문에 
    산, 들의 주된 배경인 식물의 녹색에서 물체를 구분하기 위해서..
    녹색에 대한 민감도가 높은 것 같긴 한데. 

    아님 말고...

     

    하이컬러 즉 16비트를 정의할 때
    5비트씩 RGB를 정의하고 남는 1비트는 투명으로 설정하기도 했고
    (녹색의 면적이 넓기 때문에) 녹색에 6비트를 주기도 했다. 

     

     

    24비트를 8비트로 변환해 보았다. 

    컬러 밴드가 생긴다. 

     

     

    비트가 커질수록 '없는 색이 생긴다'라고 보기 보단 

    '색의 단계가 촘촘해져서
    연속적인 색의 변화(그러데이션)가 있을 때 경계가 부드러워진다.'
    라고 이해하면 좋을 것 같다.

     

     

    1993년도 월간 마이크로 소프트웨어 中 

    24bit 트루 컬러 지원~!!!
    색상 표현으로부터의 무한한 자유~!!!

     

    요즘은 24비트 트루 컬러가 표준적으로 사용된다.
    (컴퓨터 사양이 떨어질 땐 16비트도 많이 사용되었다.)
    트루 컬러에서는 R, G, B가 24비트를 8비트씩 나누어 사용한다.
    8비트는 2의 8 제곱(=256)이니 R, G, B는 각각 256단계를 가진다.
    즉, 24비트 트루 컬러는 레드를 0~255까지, 그린을 0~255까지, 블루를 0~255까지 단계를 나눈 뒤
    이를 조합한 팔레트를 사용한다. 

     

    24비트에 투명도 8비트를 추가해서 32비트를 만들기도 한다.
    여러 장 그래픽을 겹치는 작업 등을 할 때 유용하다.
    인쇄나 사진 보정 등에 많이 쓰게 된다. 

     

    Deep color라고 해서 RGB에 30/36/48-bit를 쓰기도 한다. 
    24비트도 충분히 촘촘하기 때문에 더 많은 비트를 사용해도 시각적으로는 구분이 쉽지 않다.
    그런데 왜 이런 걸 쓰냐고?
    후보정(콘트라스트의 변화) 등의 작업을 할 때 자연스러운 그러데이션을 표현하기 위해 쓴다.

     

    그리고 인덱스드 컬러다이렉트 컬러라는 개념이 있는데...

     

    다이렉트 컬러는 위 24비트 컬러 팔레트처럼
    (보통 규정, 규격화된) 고정된 팔레트에서 바로 뽑아 쓰는 개념이고..

     

    인덱스드 컬러는 비트수가 모자랄 때 쓰던 방식인데 요즘엔 GIF 파일 외에는 볼 일이 거의 없다. 

    GIF 파일은 8비트 (2의 8승 = 256) 컬러만 사용할 수 있다.
    모든 컬러를 표현하기엔 턱없이 부족한 숫자다.
    이런 경우엔 256 칸의 팔레트에 필요한 색만 덜어서 쓰는 게 효율적이지 않은가?

    예를 들자면 (자연계의) 사진은 모든 색을 골고루 다 쓰는 게 아니라 주된 색이 있는 경우가 많다.
    산을 찍으면 녹색 위주로 찍히고.. 노란 꽃을 찍으면 노란색 위주로 찍힐 것이고..
    그럴 때 많이 쓰는 색을 위주로 뽑아서 팔레트를 설정해 놓고 쓰면 보기가 좋을 것이라는 것은 굳이 설명 안 해도....
    저 위의 256 컬러로도 저렇게 (사용한 비트에 비해) 그럴싸한 사진을 보여주는 게 이런 원리이다. 

    그래서 색인을 따로 뽑듯 따로 색을 추려 팔레트를 만든다는 개념.

     

     

    GIF / PNG

     

    색공간 이야기하다가 웬 그래픽 파일 포맷 이야기인가.. 

     

    GIF의 특징은 256 컬러(인덱스드 컬러) / 애니메이션 / 투명 / 비손실 압축 정도일 텐데...

     

    256 컬러는 트루 컬러로 업그레이드...

     

    애니메이션은 활용도가 떨어져 제외...
    (요즘은 제대로 된 동영상도 바로 웹에 올릴 수 있는 시대니까...
    라고 생각했는데 짤방이 다시 유행하는 건....)

     

    JPEG에서 지원하지 않는 투명 지원 @,.@

     

    비손실 압축... 용량이 어마 무시..

     

    이렇게 해서 나온 파일이 바로 PNG 파일이다. 이 또한 웹 표준 비트맵 그래픽 파일이다.

     

    본인은 단색 위주의 그러데이션이 없는 이미지. 예를 들면 문서 자료 캡처 등에는 PNG 파일을 사용한다.

    이런 특정한 경우에는 JPEG 파일에 비해 용량이 적거나 비슷하다.

    그리고 비손실 압축이라 여러 번 편집을 해도 깍두기가 없다. 

     

     

     

     

    2. YUV

     

    특징

     

    Y'UV의 첫 번째 특징은 밝기(휘도) 신호와 색차 신호를 분리했다는 점이다.

     

    Y는 밝기 / UV는 색차 (http://ko.wikipedia.org/wiki/%EC%83%89%EC%B0%A8) 이렇게 나뉜다.

     

    아래 링크를 따라가면 UV 평면을 볼 수도 있고

    Y, U, V로 분리한 사진을 볼 수도 있다. 

    http://en.wikipedia.org/wiki/YUV

     

    유래

     

    처음 접하면 난해한 개념이긴 하다. 하지만 이걸 왜 분리했을까를 알면 이해가 쉬워진다.

    인쇄에서 쓰는 CMYK가 '4색 기본 잉크를 얼마나 뿌릴까?'라는 계산에서 생겼다는 걸 이해하면 쉬워지듯.. 

    쓸데없이 밝기(휘도)와 색차를 구분한 것은 아니다. 

     

    Y'UV는 흑백 TV에서 유래한다. 

     

    1. 흑백 TV는 당연히 밝기(휘도, 흑백) 정보만 있었고, 컬러 정보는 없었다. 

    2. 그런데 컬러 TV로 넘어오면서, 기존 흑백 TV를 버릴 수 없으니, 호환성을 유지하면서 컬러 방송을 송출해야 했다.

    3. 호환성을 위해서는 기존 흑백 신호색차 신호를 추가한 신호체계가 필요했다. 그것이 바로 YUV다. 

    (NTSC에는 YIQ 였던가... 그런데 뭐 그 넘이 그 넘이다.)

    4. 흑백 TV는 이 중에서 흑백 신호만 받으면 된다. 

     

    그럼 UV는 어디에 있다가 갑자기 툭 튀어나온 걸까? 

     

    보색 이론, 보색 시스템(opponent color system)이라는 게 있다. 

    인간의 뇌는 색정보를 밝기, 빨강-초록, 노랑-파랑 이 3가지 요소에 의해 인지한다는 이론인데..

    이 이론은 상당히 합리적이다. 

     

    이 이론은 색각 이상(색맹)의 연구에서 출발하는데.. 

     

    색각 이상의 종류는 

    녹색과 붉은색을 못 구분하는 적록 색각 이상과 

    노란색과 파란색을 구분하지 못하는 청황 색각 이상

    완전히 색깔을 구분하지 못하는 전색맹과 모든 색이 탁하게 보이는 전색약으로 나뉜다.

    https://namu.wiki/w/%EC%83%89%EA%B0%81%20%EC%9D%B4%EC%83%81

     

    '적록 색각 이상'은  인체 내에서 '적록의 구분을 하는 기능적인 부분'이 고장이란 말이고... 

    여기서 인간의 시각 시스템에는 '적록을 구분하는 기능적인 부분'이 있다는 유추가 가능. 

    오호 이거슨~! (적록은 보색 관계)

     

    마찬가지로 청황을 구분하는 기능적인 부분이 있다는 결론... (청황은 보색 관계)

     

    그러므로 인간은 밝기 신호와 적록 신호, 청황 신호의 조합으로 색을 구분한다는 것... 

     

    여기서 나온 색공간이 CIELAB인데.. YUV 도 이와 거의 비슷하다고 한다. 

     

    YUV의 이론적 배경을 이해하면.. YUV 도 어렵진 않다. 

     

     

    서브 샘플링

     

    그리고 휘도와 색차를 분리하면서 장점이 하나 나오는데, 사람의 눈은 밝기에 대한 민감도가 색차 신호에 비해 높다. 
    이를 이용해서 명암에는 많은, 색차 값에는 적은 정보를 넣어서 효율성을 높일 수 있다.

     

    YUV 4:2:2를 영상계에선 표준(?)으로 생각하는 편인데 이 숫자의 의미는 다음과 같다.
    (원래는 픽셀 개념은 아니지만, 디지털로 영상을 다루니 편하게 픽셀로 생각하자.)

     

    • 4 : 수평 샘플링 단위, 4 픽셀을 기준으로 한다는 뜻.
    • 2 : 첫 번째 수평 픽셀 4개에 대한 크로마(U, V) 샘플링 수, 4픽셀에서 2번 샘플링을 하니 2개씩 묶는다고 생각하자.
    • 2 : 두 번째 수평 픽셀 4개에 대한 크로마(U, V) 샘플링 수 (옵션) 위 숫자와 같으면 생략 가능. 

     

    즉 가로 4 픽셀을 기준으로
    Y밝기 값은 4픽셀 모두에서 각각 뽑아내고,
    U값과 V값은 2픽셀씩 묶어서 뽑아낸다는 뜻이다. @,.@

     

    4:2:2 에는 보통 픽셀당 16비트를 할당한다.
    (트루 컬러가 24비트임에 비해 기본 8비트 까고 들어간닷. 2/3 용량~!)

     

    Y(밝기 값)에 8비트 (256단계) UV (색차 값)에 8비트가 들어간다. 
    픽셀당 U, V를 배정한다면 각각 4비트 (16 단계) 만 배정할 수 있지만.
    두 픽셀을 합치면 U에 8비트, V에 8비트가 배정할 수 있다는 것이 포인트...!

     

    거기에서 한 단계 더 나아가 4:1:1은 가로 4개 / 4:2:0은 가로, 세로 2*2개를 묶어서 UV값을 기록한다.
    즉 12비트를 사용한다. 색공간만 바꿨을 뿐인데.. 큰 고생 없이 반으로 데이터가 줄어듬... @,.@

     

    아날로그 인터레이스 방식 시절에는
    화면을 한 줄씩 건너뛰면서 쏘았기 때문에,
    다음 줄까지 동시에 처리하기가 쉽지 않았으니
    가로로 4개를 묶었을 것이고,

    디지털로 넘어오면서는
    가로 2 세로 2개 묶는 것이
    시각적으로 더 좋을 때가 많고,
    처리하기도 어렵지 않아서 
    그런 방식이 쉽게 보이고..

    또.. 디테일하게는 조금씩 다른 여러 가지 방식이 있는데..
    디테일한 것은 검색을 해보시란~! (http://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 이 문서에는 저도 찔끔 참여를 했군요.)

     

     

     

    서브 샘플링을 디코딩하는 과정을 보여줍니다. 

    서브 샘플링 구성을 한눈에..!!!

     

    제일 윗줄에 회색 박스가 휘도 신호죠?
    회색 흰색

     

    두 번째 줄이 서브 샘플링된 색차 신호죠? 

     

    4:1:1은 가로로 4 픽셀이 한 묶음으로 샘플링 (같은 색) 되어 있고..
    4:2:0은 가로 세로 2*2 픽셀이 한 묶음..
    4:2:2는 가로 2픽셀이 한 묶음..
    4:4:4는 서브 샘플링이 없죠? 픽셀 모두 개별적인 색차 신호를 가짐... 

     

    윗줄의 휘도, 두 번째 줄의 색차가 합쳐져서 세 번째 줄이 됩니다. ㅎㅎ

     

    (클릭해서 크게 보셔야....)

    총 7장의 사진이 보이는데.. 크로마 서브 샘플링을 설명하려고 만들어진 자료는 아니다 보니... 깍두기를 부드럽게 보정한 부분까지 포함되어 있다. 필요한 부분만 보자. Y'CbCr은 (https://ko.wikipedia.org/wiki/YCbCr)

    b, r에는 깍두기가 보이는가? 묶여있다(=같은 값을 가진다)는 증거.
    y에는 그런 거 없다~!

    4:2:2

     

    4:2:0

     

    좌측부터 설명하자면..

    1. 카메라에 4:2:x 저장된 사진이다.

    2. 휘도 정보만 뽑은 것.. 윤곽선이 선명.. 왜냐면 1픽셀마다 8비트의 데이터를 가짐..

    3~4. UV 정보를 뽑아서 흑백 처리한 것. 깍두기가 보인다. 4:2:2 데이터를 가진 위의 사진이 깍두기가 적다.

    5~6. 3~4 사진을 부드럽게 처리했다.. 블러 류의 처리를 한 듯..

    7. 2번의 휘도 정보와 5~6번의 부드럽게 처리한 색차 정보를 합친 것...

    원본 주소 : www.nattress.com/Chroma_Investigation/chromasampling.htm


    결론

    처음엔 휘도와 색차의 분리에서 시작되었지만, 디지털 시대에도 통하는 데이터 압축(? 절약)이란 장점까지 있다 보니 YUV 색공간은 컬러 TV 이후로 현재 HDTV까지 영상의 표준 색공간이 되었고 앞으로도 큰 변화는 없을 것 같다.. 

     

    심심해서 써보는 컴포지트 / S-Video / 컴포넌트 단자...

     

    아날로그 TV의 영상 단자를 보면 '컴포지트' < 'S-Video' < '컴포넌트'로 발전해 왔는데요. 

     

    컴포지트 단자는 보통 노란색 포노(RCA) 스타일의 단자죠? 이건 휘도(=Y)와 색차(=UV)를 한방에...

    http://ko.wikipedia.org/wiki/%EC%BB%B4%ED%8F%AC%EC%A7%80%ED%8A%B8_%EB%B9%84%EB%94%94%EC%98%A4

     

    S-Video는 보통 4핀으로 구성된 미니 DIN 단자인데요. 이건 휘도(=Y)와 색차(=UV)를 구분해서...

    http://ko.wikipedia.org/wiki/S_%EB%B9%84%EB%94%94%EC%98%A4

     

    컴포넌트 단자는 포노(RCA)가 3개 이건 Y, U, V (Y, Pb, Pr)를 모두 따로 전송하지요.. ㅎㅎㅎ

    http://ko.wikipedia.org/wiki/%EC%BB%B4%ED%8F%AC%EB%84%8C%ED%8A%B8_%EB%B9%84%EB%94%94%EC%98%A4

     

    이걸 한 장에 모은 그림~!

    http://www.pcmag.com/encyclopedia/term/40115/component-video

    반응형
Designed by Tistory.