2014年11月7日 星期五

資工三乙 01360602 朱祐震 HW03

調整色階&調整曲線

原始圖

色階調整頁面

調整曲線頁面

輸出結果


這一次新加的主要元件有
輸入用的Edit
色階調整用的TrackBar
另外就是可以直接在曲線圖上直接點的image的OnMouseDown


調整色階部分
以下為主要程式碼


if(bPtrImageRow[3*i+k]>iInputMax)
     bPtrNewImageRow[3*i+k] = iOutputMax;
else if(bPtrImageRow[3*i+k]<iInputMin)
     bPtrNewImageRow[3*i+k] = iOutputMin;
else
     bPtrNewImageRow[3*i+k] = iOutputMin + (bPtrImageRow[3*i+k]-iInputMin)*((iOutputMax-iOutputMin)/(iInputMax-iInputMin));

將比大於iInputMax變為 iOutputMax
將比小於iInputMin變為iOutputMin
然後介於iInputMax與iInputMin中間的值則是帶入公式中取得
當時應該要先把圖畫出來
然後使用查表法
在大張圖上應該會比較快


調整曲線部分
以下為主要程式
iA = (iT - iS)/((iS*iS) - 255*iS);
iB = 1-255*iA;
for(i=0;i<256;i++)
     {
     iCurveTable[i]= iA*i*i + iB*i;
     if(iCurveTable[i]>255)
          iCurveTable[i]=255;
     if(iCurveTable[i]<0)
          iCurveTable[i]=0;
     }


我開了一個iCurveTable的陣列主要是用來建表用的
在處理時方便程式可以直接查詢每個顏色所要改變的相對應顏色
bPtrNewImageRow[3*i+k] = iCurveTable[bPtrImageRow[3*i+k]];
這條主要是用來讓程式來查詢對應顏色來調整圖片


這次的作業最難的部分
第一個就是將公式算出
如果叫我憑空想的話大概會花上不少時間
不否認公式還沒出來時
想了半天都想不出來要怎寫


第二就是將曲線畫出來 
基本上這次做得調整色階&調整曲線
如果都是建表畫出的話
你大概就完成90%了
剩下就是對應顏色將其修改即可


程式的簡單步驟
匯入圖&各個參數->建表->將表畫出->將圖中的資訊照表對應處理->匯出處理後的圖


在製作過程中請各位別把0跟255的值搞反唷
小弟當時製作時將他搞反
以至於測試時各種負片效果阿~~~~~
另一個就是電腦的y軸與我們使用的是相反的
也是要注意的一點


中間過程中
與其他人討論
找google元件的使用方式
各種耍阿呆
慢慢地龜出東西來
最後做出來
還蠻高興地*ˊˇˋ*
這次最主要的
不只是調整色階&調整曲線
還有一個就是查表法
不僅可以讓程式跑外
在思考上也比較好理解
對於我來說是一個頗好的東西

沒有留言:

張貼留言