· KLDP.org · KLDP.net · KLDP Wiki · KLDP BBS ·
»ö»óº¯È¯

»ö»óº¯È¯

  • ÀÛ¼ºÀÚ
    Á¶ÀçÇõ (Mminzkn@minzkn.com)

  • °íÄ£°úÁ¤
    2004³â 12¿ù 4ÀÏ : óÀ½¾¸

YCbCr ¿Í RGB°£ÀÇ ±Ù»çÄ¡ ºñÀ²°ø½Ä (º¸Á¤ÇÏÁö ¾ÊÀº °ø½Ä)

Y = krR + kgG + kbB
Cr = R - Y
Cg = G - Y
Cb = B - Y


YCbCr ¿Í RGB°£ÀÇ ºñÀ²»ó¼ö°ø½Ä

1 = kb + kr + kg
kr = 0.299
kg = 0.587
kb = 0.114

Y = krR + (1 - kb - kr)G + kbB
Cb = 0.5(B - Y)/(1 - kb)
Cr = 0.5(R - Y)/(1 - kr)

R = Y + (1 - kr)Cr/0.5
G = Y - 2kb(1 - kb)Cb/(1 - kb - kr) - 2kr(1 - kr)Cr/(1 - kb - kr)
B = Y + (1 - kb)Cb/0.5


YCbCr ¿Í RGB °£ÀÇ kb,kr,kg ºñÀ²»ó¼ö Àû¿ëÈÄ Á¤¸®µÈ °ø½Ä

Y = 0.299R + 0.587G + 0.114B
Cb = 0.564(B - Y)
Cr = 0.713(R - Y)

R = Y + 1.402Cr
G = Y - 0.344Cb - 0.714Cr
B = Y + 1.772Cb


YCbCr ¿Í RGB°£ÀÇ º¯È¯ °ø½ÄÀ» "8:8:8" Æ÷¸Ë¿¡ ´ëÇÏ¿© ÃÖÀûÈ­ÇÑ °ø½Ä

Y = 0.299R + 0.587G + 0.114B = 77R/256 + 150G/256 + 29B/256
Cb = -0.16874R - 0.33126Green + 0.5B = -(44R/256) - 87G/256 + 131B/256 +128
Cr = 0.5R - 0.41869G - 0.08131B = 131R/256 - 110G/256 + 21B/256 +128

R = Y + 1.402Cr = s_Y + (359Cr - 128)/256
G = Y - 0.34414Cb - 0.71414Cr = Y - (88Cb - 128)/256 - (183Cr - 128)/256
B = Y + 1.772Cb = s_Y + (454Cb - 128)/256


RGB(8:8:8) to YUV(YCbCr, 8:8:8)

°ø½Ä
Y  =  0.29900Red + 0.58700Green + 0.11400Blue =   ( 77Red/256) + (150Green/256) + ( 29Blue/256)
Cb = -0.16874Red - 0.33126Green + 0.50000Blue = - ( 44Red/256) - ( 87Green/256) + (131Blue/256) {+128}
Cr =  0.50000Red - 0.41869Green - 0.08131Blue =   (131Red/256) - (110Green/256) + ( 21Blue/256) {+128}

±¸Çö
void RGB_YCbCr(int s_Red, int s_Green, int s_Blue, int *s_Y, int *s_Cb, int *s_Cr)
{ /* º¯È¯°úÁ¤¿¡¼­ »ö°¨ ¼Õ½ÇÀÌ ¾à 5% ±îÁö ¹ß»ý */
 s_Red &= 0xff, s_Green &= 0xff, s_Blue  &= 0xff;
 *s_Y  = (int)(  ((19595 * s_Red) >> 16) + ((38470 * s_Green) >> 16) + ((7471  * s_Blue) >> 16)       );
 *s_Cb = (int)( -((11059 * s_Red) >> 16) - ((21709 * s_Green) >> 16) + ((32768 * s_Blue) >> 16) + 128 );
 *s_Cr = (int)(  ((32768 * s_Red) >> 16) - ((27439 * s_Green) >> 16) - ((5329  * s_Blue) >> 16) + 128 );
 *s_Y  = (int)(  (*s_Y  > 0) ? *s_Y  : 0);  *s_Y  = (int)((*s_Y  < 255) ? *s_Y  : 255        );
 *s_Cb = (int)(  (*s_Cb > 0) ? *s_Cb : 0);  *s_Cb = (int)((*s_Cb < 255) ? *s_Cb : 255        );
 *s_Cr = (int)(  (*s_Cr > 0) ? *s_Cr : 0);  *s_Cr = (int)((*s_Cr < 255) ? *s_Cr : 255        );
}


YUV(YCbCr, 8:8:8) to RGB(8:8:8)

°ø½Ä
Red   = 1.00000Y + 1.40200Cr             = s_Y + (359s_Cr{-128}/256)   
Green = 1.00000Y - 0.34414Cb - 0.71414Cr = s_Y - ( 88s_Cb{-128}/256) - (183s_Cr{-128}/256)
Blue  = 1.00000Y + 1.77200Cb             = s_Y + (454s_Cb{-128}/256)

±¸Çö
void YCbCr_RGB(int s_Y, int s_Cb, int s_Cr, int *s_Red, int *s_Green, int *s_Blue)
{ /* º¯È¯°úÁ¤¿¡¼­ »ö°¨ ¼Õ½ÇÀÌ ¾à 5% ±îÁö ¹ß»ý */
 s_Y &= 0xff, s_Cb &= 0xff, s_Cr &= 0xff;
 s_Cb -= 128;
 s_Cr -= 128;
 *(s_Red)   = (int)( s_Y + ((91881 *s_Cr)/65536) );
 *(s_Green) = (int)( s_Y - ((22554 *s_Cb)/65536) - ((46802*s_Cr)/65536) );
 *(s_Blue)  = (int)( s_Y + ((116130*s_Cb)/65536) );
}


½ÇÁ¦ ±¸Çö ¿¹Á¦¼Ò½º

ÇÊÀÚÀÇ Color º¯È¯ library °ø°³ÇÁ·ÎÁ§Æ® : [http]http://bbs.minzkn.com/viewtopic.php?t=478[]

ID
Password
Join
You will be singled out for promotion in your work.


sponsored by andamiro
sponsored by cdnetworks
sponsored by HP

Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2008-06-25 16:01:01
Processing time 0.0046 sec