2013年12月26日 星期四

HW05

  這次的作業是寫有關色彩模型的程式,首先是RGB的色彩模型,其作法是先顯示RGB三個顏色中先各別取兩個顏色繪出圖形,並將第三個顏色的數值透過TrackBar來改變,而事實上這三個圖結合在一起是個立方體,其結構就如下圖所示
  其意義就是,三個象限軸個別是RGB,透過RGB三個數值的改變,從最小數值RGB(0,0,0)也就是黑色,一直到最大值RGB(255,255,255)也就是白色,所建構出來的色彩模型。
然後這是將背景panel的顏色改成選到的顏色。
接著這只是原圖
將原圖的RGB透過公式計算出YUV色彩模型的Y值,公式如下
Y = ( 66 * R + 129 * G + 25 * B + 128 ) >> 8 + 16
套用這個公式後即可求出Y值,並將原圖RGB的數值全改成Y值即可做出灰階圖形。
最後是有關YUV的色彩模型,左邊即是YUV的部分色彩模型(Y = 128時,YUV的色彩分布),跟RGB色彩模型一樣,YUV色彩模型也是一個立方體,比較特別的是YUV模型的中心點才是黑白灰的顏色。
  要繪製那個色彩模型比較特別,並不是直接將YUV的數值填入像素點內,而是要先透過公式轉換成RGB後才能填入像素點(因為C++Builder的色彩格式為RGB),轉換公式如下
R  = clip( 298 * ( Y - 16 )                               + 409 * ( V - 128 ) + 128 ) >> 8
G = clip( 298 * ( Y - 16 )  - 100 * ( U - 128 ) + 208 * ( V - 128 ) + 128 ) >> 8
B = clip( 298 * ( Y - 16 ) + 516 * ( U - 128 )                                + 128 ) >> 8
而右邊的圖也是將已知的YUV數值(Y數值為原灰階圖+TrackBar數值=>若範圍設定成-128~128,UV可透過MouseDown事件得到的XY數值決定)套入上示公式求出個像素點的RGB數值。
  這次作業只講了RGB和YUV兩個色彩模型,但其實還有一些其他的色彩模型,例如:CMYK、Lab……等,而這些色彩模型都有其用途,像是RGB用於電子產品的螢幕、攝影機所存取的影像多為YUV格式、CMYK(色料三原色,C為Cyan即青色,M為Magenta即洋紅色,Y為Yellow即黃色,K則是黑色會訂為K是為了避免與Blue的B重複導致混淆)則用於列印影像、而Lab則是最接近人眼所視色彩範圍的色彩模型……等。

沒有留言:

張貼留言