테스팅 기기의 기능 중에 스냅샷 기능을 통해 파일을 생성하여 이를 YUV로 확인하는 작업을 진행했다.
몇 번 해보다 보니 조금?은 기계화가 되어 수월하게 했는데, 뭐가 뭔지는 몰라서 찾아보게 됐다.
YUV?
휘도(Y)와 청색 색차(U), 적색 색차(V) 정보로 색을 구성하는 방법
나도 마찬가지고, 보통은 RGB만을 알고 있다.
RGB는 색감의 다양성을 제공하지만 그만큼 용량이 커진다는 단점이 있다.
동영상을 RGB 그대로 재생한다면 영상의 용량은 매우 커질 것이며, 이는 치명적으로 다가올 수 있다.
RGB와 달리 위에서 말한 것처럼 YUV는 휘도(Y)와 색상신호 2개(U, V)로 표현하는데
Y 신호만 받게되면 흑백이 된다. 여러 번 복제한 VHS 테이프나 방송 상태가 좋지 못한 채널에서 흑백으로 보이는 것도 이 때문이다.
사전적 의미의 휘도(Luminance)는 특정 광원의 단위 면적당 밝기의 정도를 뜻하며, 쉽게 밝기라고 이해하면 된다.
휘도 신호는 Y신호(Luminance 신호) 성분이라고도 부른다.
" 색차(Chrominance, Chroma)는 각 RGB 삼색 정보와 휘도 정보(Y)와의 차이 값이다. 녹색 색차는 신호 진폭이 작기 때문에 송출 중 여러 잡음에게 위협될 수 있고 휘도 정보에서 두 가지 색차 정보로부터 얻을 수 있어 사용하지 않는다. "
라고 나무위키에 나와있다.
YUV 등장 배경
컬러 TV의 등장 당시, 대부분이 흑백 TV를 지니고 있었다.
컬러 방송을 RGB로 송출 시 흑백 TV로 보내기 어려우며, 기존 송출 인프라를 고치는 것은 문제가 많았기 때문에,
이 때 흑백 신호에 색차 신호를 추가한 것이 YUV이다.컬러 TV는 YUV을 모두 받고 컬러 화면을 표시하며, 흑백 TV는 Y 신호만 받고 흑백 화면을 표시한다. 그리고 인간의 시각은 밝기에 더욱 민감한 특성을 가지는데, 흑백 신호의 해상도는 그대로 두고 색상 신호의 해상도만 줄이면 더 많은 대역폭을 확보할 수 있는 장점도 있었다.
흑백 TV가 사라진 지금 YUV도 함께 사라질 줄 알았으나, 영상이나 사진 등의 압축에 유용하기에 여전히 사용되고 있다.
사람의 시세포가 명암과 색을 구분하는 시세포로 나뉘는데, 명암 대비만 맞춰준다면 색이 살짝 바래도 큰 차이를 느끼지 못하기 때문에 YUV를 통한 압축이 많이 사용되는 것이다.
YUV 방식
제일 많이 사용되는 방식은 크게 4가지가 있다.
4:4:4, 4:2:2, 4:1:1, 4:2:0 방식이다.
첫 방식인 4:4:4는 색차 신호가 줄지 않은 원본 영상으로 왜곡이 없기에 화질이 가장 좋지만 용량이 크다
두 번째인 4:2:2는 상대적으로 둔감한 색차 신호를 줄여 압축한다.
색차 신호의 가로 해상도가 반으로 줄어드나 용량과 화질에 대한 타협점이기에 제일 많이 쓰인다.
채도 높은 작은 것을 보는 것이 아닌 이상 잘 눈에 띄지 않는다.
4:1:1, 4:2:0 방식은 색차 신호를 더 줄여서 압축한다.
색차 신호의 가로 해상도가 쿼터로, 4:2:0은 색차 신호의 가로, 세로 해상도가 각각 절반으로 줄어든다.
용량이 가장 적지만 그만큼 왜곡이 심하기 때문에 화질 차이가 확연하게 나오는 편이다.
영상 코덱 뒤에 숫자가 붙어있으면 대부분이 크로마 서브 샘플링을 나타낸다.
크로마 서브 샘플링(Chroma Subsampling)?
: 색차를 조금 표본화한다는 의미로 픽셀 개수의 표본화 결과인 해상도를 줄이는 손실 압축 인코딩
여기서 해상도를 낮추는 건 색차 정보를 가진 픽셀들 뿐이며, 휘도 해상도는 그대로이다.
다양한 코덱에서 지원하며 수치 표현 시 Y:a:b로 하며, 알파 채널까지 포함할 경우 Y:a:b:α 까지 사용한다.
Y: 휘도 신호의 가로 샘플 수. 1개당 픽셀 하나에 해당 보통 기준치는 4(휘도는 압축하지 않음)
a: 색차(U, V) 신호의 첫 번째 행의 가로 샘플 개수
b: 색차(U, V) 신호의 두 번째 행의 가로 샘플 개수
α: (있으면) 알파값의 가로 샘플 개수
RGB <-> YUV 변환 공식은 다음과 같다.(나무위키서 복붙함)
출처 자료 : 나무위키
'책벌레와 벌레 그 사이 어딘가 > 개념쌓기' 카테고리의 다른 글
[개념쌓기] IDE? Code Editor? (0) | 2023.04.10 |
---|---|
[개념쌓기]GCC란? (0) | 2023.04.08 |
[개념쌓기] C & C++ & C# (0) | 2023.04.03 |
[개념쌓기] CORS 복습 (0) | 2023.01.20 |
[개념쌓기] final/ finally/ finalize() (0) | 2023.01.16 |
댓글