· 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
A man who turns green has eschewed protein.


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.0015 sec