크로마 서브샘플링

**크로마 서브샘플링**(Chroma subsampling)은 명도 정보에 비해 색차 정보를 줄여서 영상을 인코딩하는 방식을 말한다. 이 방식은 대부분의 비디오 부호화 방식과 JPEG 인코딩에서 사용된다.
## 이론
사람의 눈은 밝기 변화를 느끼는 간상세포가 9천만 개 이상이 존재하는데 비하여 색상을 인식하는 원추세포는 약 600만 개정도에 불과하다. 따라서, 사람의 시각은 밝기의 변화에 비하여 색상의 변화에는 둔감하다는 특성을 보이게 된다. 이에 따라 많은 영상 시스템은 밝기 정보와 색상의 정보를 분리하여 별도로 부호화 하도록 하여 필요에 따라 압축 효율을 높이도록 한다. 이 때, 밝기 정보는 루마 컴포넌트, 색상에서 명도를 제외한 정보를 색차 컴포넌트라고 한다. 명도-색차 정보를 사용하는 대표적인 색공간 표현법으로는 Y'CbCr이 있다. 원래의 영상 정보를 (4:4:4) R'G'B'로 표현하는 것과 비교하면, 4:2:2 Y'CbCr의 경우 2/3, 4:2:0 Y'CbCr의 경우는 절반만을 필요로 하기 때문에, 용량을 크게 절약할 수 있다. 이러한 감소는 상대적으로 사람이 잘 느끼지 못한다.
## 서브샘플링의 동작 원리
인간의 시각 계통이 루미넌스(밝기차)보다 색의 움직임과 자리 이동에 덜 민감하기 때문에isbn =0-8109-0406-3 대역폭은 색의 자세한 부분보다 밝기의 부분을 더 많이 저장함으로써 최적화할 수 있다. 일반적인 시차에서 낮은 레이트에서 색의 자세한 부분을 샘플링함으로써 입는 손실은 눈에 띄지 않는 정도이다. 비디오 시스템에서 색차 컴포넌트를 사용하면서 이를 달성할 수 있다. 신호는 루마 (Y') 컴포넌트와 두 개의 색차 컴포넌트(크로마)로 나뉜다.
#### 크로마 업샘플링 오류
크로마 업샘플링은 루마, 크로마 컴포넌트가, 선형 RGB 컴포넌트(tristimulus)가 아닌 감마 보정(tristimulus) R'G'B' 컴포넌트의 총합으로 형성된다는 색의 과학에서 비롯한다. 그러므로 루미넌스와 색의 세세한 부분은 서로 완전히 독립적이지 않게 된다. 루마와 크로마 컴포넌트 사이의 루미넌스와 색 정보에는 약간의 "오류"가 있다. 이 오류는 매우 채도가 높은 색에서 가장 크며 (크로마 서브샘플링이 적용된) 테스트 패턴에서 빨간색과 녹색 부분에 어느 정도 눈에 띈다. 이러한 공학의 어림 계산을 통해 (감마 보정과 총합 사이의 명령어 순서를 거꾸로 함으로써) 색 서브샘플링을 훨씬 더 쉽게 추가할 수 있게 도와 준다.
#### 업샘플링의 전후

색 서브샘플링을 거치지 않은 원본. 2배 확대.
색 서브샘플링을 거친 뒤의 영상 (소니 베가스 DV 코덱으로 압축되었으며 박스 필터링이 적용되어 있다.)
## 샘플링 시스템과 비율
서브샘플링 방식은 보통 세 개의 비율 (이를테면 4:2:2, J:a:b)로 표현할 수 있지만 네 개의 비율 (이를테면 4:2:2:4, J:a:b:Alpha)로 표현하기도 한다. 순서대로 각각 다음을 뜻한다: * **J** 수평 샘플링 기준 단위 (원래 NTSC 방송 시스템 기준으로 3.579 MHz의 배수). 일반적으로 4개가 쓰인다. * **a** J샘플 중 첫번째 행의 크로마(Cb,Cr) 샘플링 수 * **b** J샘플에서 첫번째 행과 두번째 행의 크로마(Cb,Cr) 샘플이 변경된 수 * **Alpha(알파)**는 수평값 (처음 숫자와 상대적)이다. 알파 컴포넌트가 존재하지 않으면 생략할 수 있다. **4:2:2** 4X2픽셀의 영역에 대해 첫 번째 열 4픽셀의 루마(Y') 4개에 대해 크로마 2개(a=2; (Cb,Cr)1, (Cb,Cr)2), 두 번째 열 4픽셀의 루마(Y')4개에 대해 크로마 2개(b=2;(Cb,Cr)3, (Cb,Cr)4) **4:2:0** 4X2픽셀의 영역에 대해 첫 번째 열 4픽셀의 루마(Y') 4개에 대해 크로마 2개(a=2; (Cb,Cr)1, (Cb,Cr)2), 두 번째 열 4픽셀의 루마(Y')4개에 대해 크로마 0개(b=0)(a의 크로마 값을 이용) 서로 다른 크로마 서브샘플링 방식을 설명하는 그림은 이 링크 url=https://web.archive.org/web/20210224092542/http://lea.hamradio.si/~s51kq/subsample.gif를 통해 확인할 수 있다. (출처: "Basics of Video": https://web.archive.org/web/20080915101832/http://lea.hamradio.si/~s51kq/V-BAS.HTM) 4:4:4(또는 4:4:4:4)에 상대적인 요구 대역값을 계산하려면 모든 값을 더해 그 결과값을 12로 나누어야 한다. (알파값이 존재하면 16으로 나눈다.) {|border="0" cellspacing="0" | |colspan="4" align="center"|**4:1:1**|| |rowspan="11"| |colspan="4" align="center"|**4:2:0**|| |rowspan="11"| |colspan="4" align="center"|**4:2:2**|| |rowspan="11"| |colspan="4" align="center"|**4:4:4**|| |- |rowspan="2" align="center"|**Y'CrCb** |bgcolor="#6666cc"| ||bgcolor="#666699"| ||bgcolor="#6666cc"| ||bgcolor="#666699"| || |bgcolor="#6666cc"| ||bgcolor="#666699"| ||bgcolor="#66cc66"| ||bgcolor="#669966"| || |bgcolor="#6666cc"| ||bgcolor="#666699"| ||bgcolor="#66cc66"| ||bgcolor="#669966"| || |bgcolor="#6666cc"| ||bgcolor="#669999"| ||bgcolor="#66cc66"| ||bgcolor="#666666"| || |- |bgcolor="#996699"| ||bgcolor="#cc66cc"| ||bgcolor="#996699"| ||bgcolor="#cc66cc"| || |bgcolor="#666699"| ||bgcolor="#6666cc"| ||bgcolor="#669966"| ||bgcolor="#66cc66"| || |bgcolor="#996699"| ||bgcolor="#cc66cc"| ||bgcolor="#999966"| ||bgcolor="#cccc66"| || |bgcolor="#996699"| ||bgcolor="#cccccc"| ||bgcolor="#999966"| ||bgcolor="#cc6666"| || |- | |colspan="4" align="center"|**=**|| |colspan="4" align="center"|**=**|| |colspan="4" align="center"|**=**|| |colspan="4" align="center"|**=**|| |- |rowspan="2" align="center"|**Y' ** |bgcolor="#cccccc"| ||bgcolor="#999999"| ||bgcolor="#cccccc"| ||bgcolor="#999999"| || |bgcolor="#cccccc"| ||bgcolor="#999999"| ||bgcolor="#cccccc"| ||bgcolor="#999999"| || |bgcolor="#cccccc"| ||bgcolor="#999999"| ||bgcolor="#cccccc"| ||bgcolor="#999999"| || |bgcolor="#cccccc"| ||bgcolor="#999999"| ||bgcolor="#cccccc"| ||bgcolor="#999999"| || |- |bgcolor="#999999"| ||bgcolor="#cccccc"| ||bgcolor="#999999"| ||bgcolor="#cccccc"| || |bgcolor="#999999"| ||bgcolor="#cccccc"| ||bgcolor="#999999"| ||bgcolor="#cccccc"| || |bgcolor="#999999"| ||bgcolor="#cccccc"| ||bgcolor="#999999"| ||bgcolor="#cccccc"| || |bgcolor="#999999"| ||bgcolor="#cccccc"| ||bgcolor="#999999"| ||bgcolor="#cccccc"| || |- | |colspan="4" align="center"|**+**|| |colspan="4" align="center"|**+**|| |colspan="4" align="center"|**+**|| |colspan="4" align="center"|**+**|| |- | |align="center"|1||align="center"|2||align="center"|3||align="center"|4|| nowrap="nowrap" | J = 4 |align="center"|1||align="center"|2||align="center"|3||align="center"|4|| nowrap="nowrap" | J = 4 |align="center"|1||align="center"|2||align="center"|3||align="center"|4|| nowrap="nowrap" | J = 4 |align="center"|1||align="center"|2||align="center"|3||align="center"|4|| nowrap="nowrap" | J = 4 |- |rowspan="2" align="center"|**(Cr, Cb)** |colspan="4" bgcolor="#6666ff" align="center"|**1**|| nowrap="nowrap" | a = **1** |colspan="2" bgcolor="#6666ff" align="center"|**1**||colspan="2" bgcolor="#66ff66" align="center"|**2**|| nowrap="nowrap" | a = **2** |colspan="2" bgcolor="#6666ff" align="center"|**1**||colspan="2" bgcolor="#66ff66" align="center"|**2**|| nowrap="nowrap" | a = **2** |bgcolor="#6666ff" align="center"|**1**||bgcolor="#66ffff" align="center"|**2**||bgcolor="#66ff66" align="center"|**3**||bgcolor="#999999" align="center"|**4**|| nowrap="nowrap" | a = **4** |- |colspan="4" bgcolor="#ff66ff" align="center"|*1*|| nowrap="nowrap" | b = *1* |colspan="2" bgcolor="#6666ff" | ||colspan="2" bgcolor="#66ff66" | || nowrap="nowrap" | b = *0* |colspan="2" bgcolor="#ff66ff" align="center"|*1*||colspan="2" bgcolor="#ffff66" align="center"|*2*|| nowrap="nowrap" | b = *2* |bgcolor="#ff66ff" align="center"|*1*||bgcolor="#ffffff" align="center"|*2*||bgcolor="#ffff66" align="center"|*3*||bgcolor="#ff6666" align="center"|*4*|| nowrap="nowrap" | b = *4* |- | |colspan="5" align="center"|¼ 수평 해상도,
완전한 수직 해상도 |colspan="5" align="center"|½ 수평 해상도,
½ 수직 해상도 |colspan="5" align="center"|½ 수평 해상도,
완전한 수직 해상도 |colspan="5" align="center"|완전한 수평 해상도,
완전한 수직 해상도 |} 매핑의 예는 이론적이며 그림으로 설명해 둔 것뿐이다. 이 그림은 에일리어싱을 막기 위한 크로마 필터링에 대해 어떠한 설명도 하지 않고 있다.
# 서브샘플링의 종류

## 8:4:4 Y'CbCr
두 개의 크로마, Cb Cr 컴포넌트는 같은 샘플 속도를 가지고 있다. 루미넌스는 크로마 컴포넌트보다 두 배 정도의 해상도를 가지고 있다. 이러한 방식은 하이엔드 필름 스캐너, 데이터사인, 텔레시네, 컬러 그레이딩(color gading)에 가끔 쓰인다. NTSC에서 이 방식은 10 MHz 정도의 루마와 5 MHz 정도의 크로마 해상도를 가지고 있다. (세 개 모두 5MHz의 해상도를 가지고 있는 4:4:4와 비교됨) 이러한 대역을 전달하려면 두 개의 링크 (컴포넌트)가 필요하다. 이러한 링크들은 링크 A, 링크 B라고 부른다. 각 링크는 4:2:2 신호를 전달하며 합해서 8:4:4를 만들어 낸다. 다운 샘플 변환기는 나중에 8:4:4를 4:4:4나 4:2:2로 변환한다.
## 4:4:4 Y'CbCr
세 개의 Y'CbCr 컴포넌트 모두 같은 샘플 속도를 갖는다. 이러한 방식은 하이엔드 필름 스캐너와 영화 후반 작업에 사용된다. 이러한 대역을 전달하려면 두 개의 링크 (연결)가 일반적으로 필요하다.: 링크 A는 4:2:2 신호를 전달하고 링크 B는 0:2:2를 전달하여 모두 합해 4:4:4를 만들어 낸다.
## 4:4:4 R'G'B' (서브샘플링 없음)
"4:4:4"가 크로마 서브샘플링을 아예 하지 않는 RGB 색 공간을 가리킬 수도 있음을 명심해라. HDCAM SR과 같은 포맷은 듀얼 링크 HD-SDI를 통해 4:4:4 R'G'B'를 기록할 수 있다.
## 4:2:2
두 개의 크로마 컴포넌트는 루마 샘플 속도의 절반으로 샘플링된다.: 수평 크로마 해상도는 절반이 된다. 이로써 영상 신호의 대역이 3분의 1만큼 줄어들지만 "시각적으로 거의 무손실이다". 수많은 하이엔드 디지털 비디오 포맷과 인터페이스는 다음과 같은 방식을 사용한다: * 디지털 베타캠 * DVCPRO50, DVCPRO HD * 디지털-S
## 4:2:1
이 방식이 기술적으로 정의되어 있지만 이러한 샘플링 방식을 사용하는 소프트웨어나 하드웨어는 많지 않다. **Cb**의 수평 해상도는 **Cr**의 수평 해상도보다 두 배나 낮다.(또 **Y**의 수평 해상도보다 4배나 낮다) 이는 사람의 눈이 빨간색보다 파란색에 덜 민감하다는 사실에서 비롯한다.
## 4:1:1
4:1:1 크로마 서브샘플링에서 수평 색 해상도는 4등분된다. 대역은 크로마 서브샘플링을 하지 않은 것에서 절반이 된다. 전문가 그룹에 따르면, DV의 4:1:1 크로마 서브샘플링은 처음에 방송 품질을 염두에 두지 않고 일반 소비자를 지향한 것이라고 언급하고 있다 현재 DV 기반의 포맷 (4:1:1 크로마 서브샘플링을 사용하는)은 전자 뉴스 수집 등에 전문적으로 사용된다. 4:1:1 크로마 서브샘플링을 사용하는 포맷은 이를테면 다음과 같다: * DVCPRO (NTSC와 PAL) * NTSC DV, DVCAM * D-7
## 4:2:0
이 방식은 다음의 분야에서 찾을 수 있다: * DVD 등에서 사용되는 MPEG-2를 비롯한 모든 버전의 MPEG (다만 일부 MPEG-4 프로파일은 4:4:4와 같은 고품질의 샘플링 방식을 사용할 수 있다) * PAL DV, DVCAM * HDV * 가장 일반적인 JPEG/JFIF, H.261, MJPEG 기능 * VC-1 Cb, Cr은 각각 수평, 수직으로 2의 배수로 서브샘플링된다. Cb, Cr은 효과적으로 영상줄 사이의 가운데에 수직으로 놓인다. 세 가지 종류의 4:2:0 방식이 있으며 서로가 다른 수평, 수직 구획을 갖는다. * MPEG-2에서 Cb, Cr은 모두 수평으로 구획을 갖는다. * JPEG/JFIF, H.261, MPEG-1에서 Cb, Cr은 서로 엇갈리며 자리가 잡힌다. * 4:2:0 DV에서 Cb, Cr은 줄마다 서로 교체한다. PAL, SECAM 색 시스템은 특히 이러한 종류의 데이터 감소에 잘 어울린다. PAL에 해당하는 대부분의 디지털 영상 포맷은 4:1:1 크로마 서브샘플링을 사용하는 DVCPRO25를 제외하고 4:2:0 크로마 서브샘플링을 사용한다. 이 방식은 4:2:0과 비슷하며 크로마 서브샘플링이 없는 것과 비교하여 대역이 절반으로 줄어들어 있다. 비월 주사 방식을 사용할 경우 4:2:0 크로마 서브샘플링을 거치면 순차 주사 방식과 같은 방식으로 추가할 경우 움직이는 장면에서 깨지는 부분이 일어날 수 있다. 루마 샘플은 별도의 시간 간격에서 비롯하지만 크로마 샘플은 시간 간격 두 곳에서 비롯한다. MPEG-2 표준은 4:2:0이 각 필드에 적용됨으로써(한 번에 두 개의 필드에 적용되는 것은 아님) 비월 주사 방식의 샘플링 방식의 대안을 제공한다. 이로써 움직이는 장면에서 화소가 깨지는 문제가 해결된다.
원본. *이 그림은 하나의 필드를 보여 주고 있다. 움직이는 글자에는 약간의 모션 블러가 적용되어 있다.
4:2:0 **비월 주사** 샘플링은 움직이는 비월 주사 형태가 적용되어 있다. 크로마가 움직이는 문자를 따라다니는 것을 알 수 있다. *이 그림은 하나의 필드를 보여 주고 있다.
4:2:0 **순차 주사** 샘플링은 움직이는 순차 주사 형태가 적용되어 있다. *이 그림은 하나의 필드를 보여 주고 있다. 그러나 4:2:0 순차 주사 방식에서 크로마의 수직 해상도는 거의 절반이 된다. 왜냐하면 크로마 샘플은 2X2 대신 세로 4에 가로 2의 샘플을 효과적으로 묘사하기 때문이다. 또, 두 개의 필드 사이의 공간이 제거되면서 벌집과 같은 크로마 아티펙트(깨짐) 현상을 보일 수 있다.
원본 스틸 이미지.
4:2:0 **비월 주사** 샘플링이 스틸 이미지에 적용되어 있다. 두 개의 필드를 보여 주고 있다.
4:2:0 **순차 주사** 샘플링이 스틸 이미지에 적용되어 있다. 두 개의 필드를 보여 주고 있다.
## 4:1:0
일부 코덱이 이 비율을 지원하고 있지만 널리 쓰이지는 않는다. 8비트 양자화와 더불어 이 포맷을 사용한 압축되지 않은 영상은 매크로픽셀(4x2 픽셀)마다 10 바이트를 사용한다. 이는 딜레이 라인 디코더로 디코딩된 PAL I 신호의 색차 대역과 같으며 NTSC보다 월등하다. 일부 영상 코덱은 4:1:0.5나 4:1:0.25로 동작하는 옵션을 가지고 있어서 너무 많은 대역을 사용하지 않아도 VHS 품질 이상의 화질을 허용한다.
## 3:1:1
소니사가 개발한 HD캠의 HD 레코더에 사용되는 비율이다. (HDCAM SR에서는 아님) 수평 크기에서 루마는 수직으로 풀HD 샘플링 레이트의 3/4로 샘플링된다. (1920 대신 1440) 크로마는 한 줄에 480개의 샘플(루마 샘플링 레이트의 3분의 1)로 샘플링된다. 수직 크기로 루마와 크로마 둘 다 풀 HD 샘플링 레이트 (수직으로 1080개의 샘플)로 샘플링된다.
# 용어 설명
Y'UV라는 용어는 아날로그 인코딩 방식을 가리키지만 Y'CbCr은 디지털 인코딩 방식을 가리킨다. 두 방식의 차이점은 크로마 컴포넌트 (U, V, Cb, Cr)에 대한 크기값이 다르다는 점이다. 그러나 YUV라는 용어는 Y'CbCr 인코딩으로 (잘못) 사용되기도 한다. 그러므로 "4:2:2 YUV"와 같은 용어는 아날로그 인코딩에서 4:x:X와 같은 것이 없다는 단순한 이유 때문에 언제나 4:2:2 Y'CbCr을 가리킨다. 루미넌스라는 용어와 기호 Y는 기호 Y'를 가진 루마로 (잘못) 불린다. 영상 공학의 루마 (Y')는 색의 과학의 루미넌스 (Y)에서 비롯한 것(CIE에서 정의)임을 잊지 마라. 루마는 감마 보정의 RGB 컴포넌트 합으로 형성된다. 루미넌스는 선형(linear, tristimulus) RGB 콤퍼넌트의 합으로 형성된다. 현실적으로 CIE 기호 Y는 루마로 잘못 불린다. 1993년에 SMPTE는 이 두 용어를 명확하게 구분해 둔 Engineering Guideline EG 28을 채용하였다. 주된 기호 '는 감마 보정을 가리키는 데 사용된다.
# 각주 및 참고 문헌
각주 * Poynton, Charles. "YUV and *luminance* considered harmful: A plea for precise terminology in video"[http://www.poynton.com/papers/YUV_and_luminance_harmful.html * Poynton, Charles. "Digital Video and HDTV: Algorithms and Interfaces." USA: Morgan Kaufmann Publishers, 2003. 압축 방식 위키데이터 속성 추적 분류:영상 기술 분류:화상 압축