|
RGB to YUV 색공간 변경
2008/12/19 18:21
|
RGB에서 YUV로, YUV에서 RGB로 변환할 때 어떤 문제가 발생하는지 수식화 해봤습니다.
변환 공식은 아래 공식을 이용했고(ITU-R BT.601), 8bit 색 깊이로 계산하였습니다.
RGB to YUV Conversion
Y = (0.257 * R) + (0.504 * G) + (0.098 * B) + 16
U(Cb) = -(0.148 * R) - (0.291 * G) + (0.439 * B) + 128
V(Cr) = (0.439 * R) - (0.368 * G) - (0.071 * B) + 128
YUV to RGB Conversion
R = 1.164(Y - 16) + 1.596(V - 128)
G = 1.164(Y - 16) - 0.813(V - 128) - 0.391(U - 128)
B = 1.164(Y - 16) + 2.018(U - 128)
표1> 이론상 가장 이상적인 색 변환표입니다. RGB - YUV - RGB 변환이 완벽하게 이루어집니다.
|
R |
G |
B |
|
Y |
U |
V |
|
R |
G |
B | |
|
Black |
0 |
0 |
0 |
|
16 |
128 |
128 |
|
0 |
0 |
0 |
|
White |
255 |
255 |
255 |
|
235 |
128 |
128 |
|
255 |
255 |
255 |
|
Yellow |
255 |
255 |
0 |
|
210 |
16 |
146 |
|
255 |
255 |
0 |
|
Cyan |
0 |
255 |
255 |
|
170 |
166 |
16 |
|
0 |
255 |
255 |
|
Green |
0 |
255 |
0 |
|
145 |
54 |
34 |
|
0 |
255 |
0 |
|
Magenta |
255 |
0 |
255 |
|
107 |
202 |
222 |
|
255 |
0 |
255 |
|
Red |
255 |
0 |
0 |
|
82 |
90 |
240 |
|
255 |
0 |
0 |
|
Blue |
0 |
0 |
255 |
41 |
240 |
110 |
|
0 |
0 |
255 |
표2> 위의 이상적인 변환 표를 만들기 위해서는 아래와 같이 소숫점에 대한 정보를 계속 가지고 있어야 합니다.
|
R |
G |
B |
|
Y |
U |
V |
|
R |
G |
B | |
|
Black |
0 |
0 |
0 |
|
16 |
128 |
128 |
|
0 |
0 |
0 |
|
White |
255 |
255 |
255 |
|
235.045 |
128 |
128 |
|
254.968 |
254.968 |
254.968 |
|
Yellow |
255 |
255 |
0 |
|
210.055 |
16.055 |
146.105 |
|
254.776 |
254.931 |
-0.025 |
|
Cyan |
0 |
255 |
255 |
|
169.51 |
165.74 |
16.055 |
|
0.02142 |
254.941 |
254.845 |
|
Green |
0 |
255 |
0 |
|
144.52 |
53.795 |
34.16 |
|
-0.1714 |
254.903 |
-0.1484 |
|
Magenta |
255 |
0 |
255 |
|
106.525 |
202.21 |
221.84 |
|
255.14 |
0.06502 |
255.117 |
|
Red |
255 |
0 |
0 |
|
81.535 |
90.26 |
239.945 |
|
254.947 |
0.0278 |
0.12342 |
|
Blue |
0 |
0 |
255 |
|
40.99 |
239.95 |
109.895 |
|
0.19278 |
0.03723 |
254.993 |
표3> 다음 예는, 소숫점을 반올림 처리하고 그 결과로 다시 변환한 표입니다. 최종 RGB로 변환한 결과에서 +1씩 오차값이 발생합니다.
|
R |
G |
B |
|
Y |
U |
V |
|
R |
G |
B | |
|
Black |
0 |
0 |
0 |
|
16 |
128 |
128 |
|
0 |
0 |
0 |
|
White |
255 |
255 |
255 |
|
235 |
128 |
128 |
|
255 |
255 |
255 |
|
Yellow |
255 |
255 |
0 |
|
210 |
16 |
146 |
|
255 |
255 |
0 |
|
Cyan |
0 |
255 |
255 |
|
170 |
166 |
16 |
|
1 |
255 |
256 |
|
Green |
0 |
255 |
0 |
|
145 |
54 |
34 |
|
0 |
256 |
1 |
|
Magenta |
255 |
0 |
255 |
|
107 |
202 |
222 |
|
256 |
1 |
255 |
|
Red |
255 |
0 |
0 |
|
82 |
90 |
240 |
|
256 |
1 |
0 |
|
Blue |
0 |
0 |
255 |
|
41 |
240 |
110 |
|
0 |
0 |
255 |
표4> 아래 예는, 소숫점 없이 YUV에서 RGB로 변환하고, 다시 YUV로 변환한 결과입니다.
이것은 통상 캠코더(YUV)에서 NLE(RGB)를 거처 최종 동영상 파일을 인코딩(YUV) 했을때를 가상해본 시나리오입니다.
Magenta 변환시 최종 YUV에서 오차가 발생합니다.
|
Y |
U |
V |
|
R |
G |
B |
|
Y |
U |
V | |
|
Black |
16 |
128 |
128 |
|
0 |
0 |
0 |
|
16 |
128 |
128 |
|
White |
235 |
128 |
128 |
|
255 |
255 |
255 |
|
235 |
128 |
128 |
|
Yellow |
210 |
16 |
146 |
|
255 |
255 |
0 |
|
210 |
16 |
146 |
|
Cyan |
170 |
166 |
16 |
|
1 |
255 |
255 |
|
170 |
166 |
16 |
|
Green |
145 |
54 |
34 |
|
0 |
255 |
1 |
|
145 |
54 |
34 |
|
Magenta |
107 |
202 |
222 |
|
255 |
1 |
255 |
|
107 |
202 |
221 |
|
Red |
82 |
90 |
240 |
|
255 |
1 |
0 |
|
82 |
90 |
240 |
|
Blue |
41 |
240 |
110 |
|
0 |
0 |
255 |
|
41 |
240 |
110 |
결론
캠코더는 CCD/COMS에서 빛을 받아 전기적 신호로 변환할 때는 RGB 신호를 사용합니다. 쉬운 예로 3CCD 캠코더는 프리즘을 통해 RGB 3개의 CCD에 각각 신호를 분리해서 받습니다. 이 신호는 채널당 10~14bit 까지 처리합니다. 이후 DSP를 통해 감마와 화이트발란스 등을 잡고, 최종 테잎이나 메모리에 저장할 때는 YUV 신호로 저장합니다. 이렇게 저장할 때까지만 해도 색공간의 오차는 거의(?) 발생하지 않는다고 볼 수도 있습니다. 그러나, 이렇게 캠코더에서 저장된 YUV 동영상 파일(대부분의 동영상 파일들이 YUV를 사용하고 있음)을 YUV 색공간을 사용하는 편집 프로그램이 아닌, RGB 색공간을 사용하는 편집 프로그램 (예로, 애프터이팩트, 컴버스쳔 등)으로 작업하여 다시 YUV 코덱으로 저장하게 되면 바로 위와 같은 문제가 발생할 가능성이 있다는 것입니다.
이 쯤에서 고민해봐야 할 것은 RGB 색공간을 사용하는 NLE에서 색공간을 변환시킬 때, 소숫점 정보를 끝까지 가지고 가는지, 아니면 변환 후 버리게 되는지가 관건이 될겁니다. 소숫점 정보를 끝까지 가지고 간다면 맨 처음 보였던 표1과 같은 이상적인 화면을 얻을 수도 있을 겁니다.
[출처] RGB to YUV 색공간 변경|작성자 으랏차
'공부 이야기 > 컴퓨터 몽땅' 카테고리의 다른 글
| RGB to YUV 색공간 변경 (0) | 2009/10/16 |
|---|---|
| wav 파일로 녹음하기 (0) | 2009/08/04 |
| Javascript 팁 (0) | 2009/07/14 |
| How do I get a list of network interfaces and their IP and MAC addresses? (0) | 2009/01/19 |
| 컴퓨터끼리 네트웍속도 측정툴 Iperf (1) | 2008/11/28 |
| *윈도우 XP 정품인증 받기* (1) | 2008/10/20 |


이올린에 북마크하기


