2011年12月22日 星期四

Hw3

這次作業分成四個部分 , RGB色彩模型、YUV色彩模型、YUV單一色調轉換工具、還有HSI色彩模型

RGB色彩模型

GB模型(R=0)

GB模型(R=128)

GB模型(R=255)

RB(G=0)

RB(G=128)

RB(G=255)

RG(B=0)

RG(B=128)

RG(B=255)

RGB色彩模型又分成GBRGRB這三個 , 這部分比較簡單 , GB只要給定G & B的值 , 並作一個可調的變數給R , 就做出來了 , RGRBGB模型


YUV色彩模型

YUV(Y=128)

YUV(Y=0)

YUV(Y=255)

YUV色彩模型就稍微多花了一點時間 , 雖然有RGB to YUV & YUV to RGB的轉換公式 , 但我一直以為要先從RGB to YUV 再從YUV to RGB , 我卡在一開始的RGB值我要怎麼給? 原始的RGB圖要怎麼畫? 才有辦法從RGB to YUV to RGB , 會是YUV的色彩模型 , 上網查了很多的資料 , 可是都只查到YUV & RGB的轉換公式 , 後來自己試了半天 , 才發現原來不是從RGB to YUV to RGB , 一開始給定Y , UV值分別由左至右、由小至大 , 最後再把YUV的值轉換至RGB就可以畫出來了


YUV單一色調轉換工具

Gray

Green

Blue

Purple

Orange

YUV色彩模型會畫之後 , 這個部分就比較簡單了 , 首先把一張照片轉為灰階影像(RGBtoY的公式) , 接著就是在Image上發生MouseDown之後 , 把該點座標的RGB值轉為UV , 再套用RGBtoYUV的公式 , 把整張影像的RGB重新給值就完成了


HSI色彩模型

HSI(I=0.5)

HSI(I=0.8)

HSI(I=0.2)

HSI是我做最久的一個部分 , 碰到了許多問題 , 首先H的計算 , atan的值 , 在第三象限一直會錯 , 畫出來的圖形不會是3120度角的扇形 , 等到第三象限的H值修改過後 , 雖然可以成功畫出3120度角的扇形 , 但是整個HSI的圖形還是會錯 , 後來我才發現 , 雖然成功畫出3個扇形 , 但是第二 & 第四象限的角度是有問題的 , 查了許多資料 , 才終於修正H的部分(可以成功畫出0~6060~9090~120120~180180~210210~270270~300300~360的扇形)

接著是S的計算 , 起初因為我畫的圓的半徑為100 , S我就直接把值丟進去算了 , (後來才注意到S的範圍只有在0~1之間 , 因此要對S做調整 , S = V/100 (V是任意色點到中心點的向量長度) , 但結果還是錯的

H的角度計算我確定沒錯 , I值我先固定給0.5 , 但是畫出來的圖形卻是錯的 , 所以我一直以為問題出在S上面 , 不斷的對S做調整 , 還是畫不出正確的圖形 , 網路上HSI的相關資料也很少 , 寫的內容也跟課本上差不多 , 幾乎都是RGB to HSI HSI to RGB的相關公式 , 後來直接去找HSI to RGB的相關程式碼來看 , 但問題還是沒有解決

問了老師才知道 , 原來我的S計算沒有錯 , 問題是出在 , 課本上的HSI to RGB轉換公式裡面所有的角度要轉換成淨量值 , 60=PI/3 , 120=PI*2/3 , 而我是直接把角度丟到公式裡面去計算 , 所以又對所有的角度做了修改 , 把所有的角度修改成淨量值 , 老師也幫我再把象限判斷的地方也做了些修改 , 最後圖形終於畫出來了

最後雖然HSI圖形畫出來了 , 但是還是覺得圖形有點怪怪的 , 圖形中約60度(橘黃色)、210度(青色)、300度(紫色)的地方 , 顏色會會不清楚 , 可是網路上看到的HSI-Color-Model卻不會有這種問題

Homemade

Example

2 則留言:

  1. 最後的問題, 也許是資料形態轉換時, 有些截斷誤差(truncation error)產生, 這一部分可能還需要仔細檢查程式實作的細節!

    回覆刪除
  2. 另外一種可能性是我們的程式是直接用 clip 的方式來處理RGB超過0~1的範圍, 也許可以嘗試用等比例縮小的方式來處理。

    回覆刪除