태터데스크 관리자

도움말
닫기
적용하기   첫페이지 만들기

태터데스크 메시지

저장하였습니다.

롸이언의 인생이야기 @ Innovate yourself ™


RGB to YUV 색공간 변경 색보정

2008/12/19 18:21

복사 http://blog.naver.com/laizenti/40058994588

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과 같은 이상적인 화면을 얻을 수도 있을 겁니다.

크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by 롸이언
공부 이야기/컴퓨터 몽땅 l 2009/10/16 09:55
1 2 3 4 5 6  ... 82 

카테고리

꼭대기 (82)
롸이언 이야기 (7)
가족 이야기 (0)
친구 이야기 (1)
공부 이야기 (51)
취미 이야기 (17)
노래 이야기 (1)

달력

«   2010/03   »
  1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31      
Statistics Graph
tistory!get rss Tistory Tistory 가입하기! DNS Powered by DNSEver.com