본문 바로가기
컴퓨터

RGB YUV 변환 공식

by Begi 2021. 10. 30.
반응형

RGB를 YUV로 변환하는 공식은 다음과 같다.

    Y = (0.257 * R) + (0.504 * G) + (0.098 * B) + 16

    Cr = V = (0.439 * R) - (0.368 * G) - (0.071 * B) + 128

    Cb = U = -(0.148 * R) - (0.291 * G) + (0.439 * B) + 128

 

YUV를 RGB로 변환하는 공식은 다음과 같다.

    B = 1.164(Y - 16) + 2.018(U - 128)

    G = 1.164(Y - 16) - 0.813(V - 128) - 0.391(U - 128)

    R = 1.164(Y - 16) + 1.596(V - 128)

 

위 식에서 출력값은 0-255가 되도록 해야 한다.

 

RGB-YUV 변환식은 여러 종류가 있다.

 

정수를 사용한 RGB-YUV 변환 코드는 다음과 같다.

 

#define CLIP(X) ( (X) > 255 ? 255 : (X) < 0 ? 0 : X)

// RGB -> YUV
#define RGB2Y(R, G, B) CLIP(( (  66 * (R) + 129 * (G) +  25 * (B) + 128) >> 8) +  16)
#define RGB2U(R, G, B) CLIP(( ( -38 * (R) -  74 * (G) + 112 * (B) + 128) >> 8) + 128)
#define RGB2V(R, G, B) CLIP(( ( 112 * (R) -  94 * (G) -  18 * (B) + 128) >> 8) + 128)

// YUV -> RGB
#define C(Y) ( (Y) - 16  )
#define D(U) ( (U) - 128 )
#define E(V) ( (V) - 128 )

#define YUV2R(Y, U, V) CLIP(( 298 * C(Y)              + 409 * E(V) + 128) >> 8)
#define YUV2G(Y, U, V) CLIP(( 298 * C(Y) - 100 * D(U) - 208 * E(V) + 128) >> 8)
#define YUV2B(Y, U, V) CLIP(( 298 * C(Y) + 516 * D(U)              + 128) >> 8)

// RGB -> YCbCr
#define CRGB2Y(R, G, B) CLIP((19595 * R + 38470 * G + 7471 * B ) >> 16)
#define CRGB2Cb(R, G, B) CLIP((36962 * (B - CLIP((19595 * R + 38470 * G + 7471 * B ) >> 16) ) >> 16) + 128)
#define CRGB2Cr(R, G, B) CLIP((46727 * (R - CLIP((19595 * R + 38470 * G + 7471 * B ) >> 16) ) >> 16) + 128)

// YCbCr -> RGB
#define CYCbCr2R(Y, Cb, Cr) CLIP( Y + ( 91881 * Cr >> 16 ) - 179 )
#define CYCbCr2G(Y, Cb, Cr) CLIP( Y - (( 22544 * Cb + 46793 * Cr ) >> 16) + 135)
#define CYCbCr2B(Y, Cb, Cr) CLIP( Y + (116129 * Cb >> 16 ) - 226 )

 

반응형

'컴퓨터' 카테고리의 다른 글

아이콘 편집기 무료  (0) 2021.12.15
윈도우 DSP, COEM, OEM, FPP  (0) 2021.12.12
인간의 색 인식 민감도  (0) 2021.10.30
컴퓨터 표시 컬러 종류  (0) 2021.10.30
LZ4 압축 알고리즘  (0) 2021.10.28

댓글