2015年1月8日 星期四

Color Models

HW5:Color Models

這次作業是畫RGB和YUV色彩模型以及將圖片改成單顏色的圖像
在畫RGB色彩模型的時候我是想用ScanLine的方法
直接圖像的每一個像素點的顏色做修改
因為之前的作業都是先讀一個圖檔,再讀取圖檔
的像素點的顏色做修改。所以如何不用先讀取圖檔就可以使用Bitmap
就成為了關鍵。
經過老師的指導和上網查詢后
我發現下面這個指令可以準備好一個空白的bitmap供修改

Graphics::TBitmap *TheBitmap;
TheBitmap = new Graphics::TBitmap();
TheBitmap->Height = 256;
TheBitmap->Width = 256;
Image3->Picture->Bitmap = TheBitmap;
Image3->Picture->Bitmap->PixelFormat = pf24bit;

有了這個空白的bitmap后就只要使用ScanLine將每一行
的RGB的值根據模型逐漸增加就行了
結果如下:


以第一個模型為例,X軸為BLue,Y軸為Green,TrackBar為Red.
所以第一個模型就表示在R為TrackBar->Position的值的時候
BG用不同程度相加,所呈現出來的不同平面。

YUV 色彩模型與 RGB 色彩模型相同, 也是用三個量來描述顏色, 
分別用 Y 代表亮度 (luminance), U、V 代表彩度(chrominance )
由於BCB中bitmap是用RGB表示顏色,所以如何將YUV色彩轉換
成RGB色彩成為了關鍵


在聽了老師上課的講解和看了投影片后得知套用上面這個
矩陣轉換公式可以實現。


通過TrackBar調整亮度可以得到不同的VU平面

接下來就是通過讀檔將原始圖像show在YUV模型的右邊


接著將圖像處理成灰階
(將每個像素點的RGB替換成RGB的平均數即可)


在寫程式的過程中,我認為將YUV的顏色替換RGB的顏色
是這個程式較為困難的部分

經過多次試驗和上網查詢資料后
我發現將RGB轉成YUV的重點就在Y的值
Y = ( ( 66 * R + 129 * G + 25 * B + 128) >> 8) + 16 
我們要先利用上面這個公式計算出這張影像的亮度
然後在用這個Y去計算
C = Y - 16 
D = U - 128 
E = V – 128
R = clip(( 298 * C + 409 * E + 128) >> 8) 
G = clip(( 298 * C - 100 * D - 208 * E + 128) >> 8) 
B = clip(( 298 * C + 516 * D + 128) >> 8)
                               下面就是轉後后的結果


總結:
經過一個學期的學習,做了幾個影像處理的作業,正如老師所說
感覺就像在做一個簡易版的photoshop
每次寫出作業能將影像做一些修改就很有成就感
感謝老師這學期的指導,讓我對影像處理
有了一些基本的了解,也對影像處理更加有興趣!






沒有留言:

張貼留言