2015年1月17日 星期六

01360955 魏智信 HW5

作業:YUV 色彩模型 & RGB 雙色模型

程式碼網址:
https://www.dropbox.com/s/tuzv4jrvhj2m8hw/ColorModel.cpp?dl=0

此次作業主要是做RGBtoYUV以及YUVtoRGB的色彩值轉換
為什麼要轉換成YUV呢?

Y = 亮度
UV = 彩度
如果想改變圖片色彩,使用RGB模型每會因為三種色彩資訊裡包含灰階而很容易修改到亮度。
因此才採用YUV模型,維持原本色彩的亮度Y,並修改想要的色彩值UV。

p.s. RGB灰階值 = R+G+B/3


















此圖為YUV模型色彩,{Y=128, U=0-255, V=0-255}並轉換為RGB輸出

下方為轉換公式:


[{ 1, -0.00093,  1.401687}, [ Y-0, [ R,
 { 1, -0.3437,  -0.71417 }, X U-128, = G,
 { 1,  1.77216,  0.00099 }] V-128 ] B ]


YUV轉換成RGB色彩值輸出值須介於0-255
故大於255則設為255、小於0則設為0


















此圖為選擇模型顏色轉換後結果

選色的方法:

TColor SelectedColor = this->ImageModelYUV->Picture->Bitmap->Canvas->Pixels[X][Y];
this->ImageSelected->Canvas->Brush->Color = SelectedColor;
this->ImageSelected->Canvas->FillRect(Rect(0,0,ImageSelected->Width,ImageSelected->Height));


到Bitmap->Canvas->Pixel[X][Y],Pixel回傳值為TColor,因此宣告一個TColor存放顏色
並填滿一個Image就可以知道選到什麼顏色了。

為了將圖形轉換成想要的圖片色彩又不失亮度的資訊

1.將圖片Pixel的RGB轉換成YUV => 可以得到Pixel的亮度Y(這個值是我們要保留的)
2.將選擇的色彩RGB轉換成YUV => 可以得到色彩的彩度UV,取代步驟1.的UV即可
3.將YUV( Y=步驟1.的Y, U=步驟2.的U, V=步驟2.的V )轉換成RGB,在輸出到Image元件就完成了。

上三個步驟去對圖片每個Pixel重複做,就可以只輸出單一色調了。


   { Y = 255, U = 0-255, V = 0-255 }                             { R = 0-255, G = 0-255, B =0 }















{ R = 0, G = 0-255, B = 0-255 }
                                                                                   { R = 0-255, G = 0, B =0-255 }



沒有留言:

張貼留言