2014年11月5日 星期三

levels and Curve Adjustment

HW3:levels and Curve Adjustment

這次作業是levels and Curve調整
和上一個作業一樣需要先讀入檔案
但是比上次多了一個Scrollbox的元件
這個元件可以將圖像裝在一個固定大小的box內
可以較好的控制版面的大小


levels 是可以通過在右邊的方框內輸入數值
來調整input、output的最大、最小值。
輸入的方框用到Edit元件
iInputMin = StrToIntDef(edInputMin->Text,0);
用這行指令讀取Edit元件中的數值
StrToIntDef()函數是用來將字串轉成整數的
逗號後面的0為預設值


上方圖像會隨著Edit元件內的數值的改變而改變
iOutput=iOutputMin+(iInput-iInputMin)∗( iOutputMax-iOutputMin)/(iInputMax-iInputMin)
這裡用到了查表法
利用公式建立一個 levelstable[] 
將0-255的色階值通過公式對應的數值存入表中
實際進行影像處理時,只要透過色彩值做為索引值,
直接查出所對應的輸出值,不需要進行實際的運算,
就可以快速完成整張影像的轉換。
按下apply鍵后可以得到處理后的影像


Curve的部分可以利用ImageMouseDown 這個事件
來取得滑鼠在圖像上的坐標
利用(0,0) (255,255) 和滑鼠的點,三個點可以確定一個
二次函數
y=f(x)=(T-S)/(S-255S) x2+(1-255 (T-S)/(S-255S))x
其中(S,T)為鼠標的橫縱坐標
同樣利用查表法,可以建立一個Curvetable[ ] 
來存放轉換后的色階的數值


要注意當iCurveTable的值大於255
或小於0的時候必須將值強制設定為 0 或 255
如此影像才不會出現亮部突然轉換成暗部,
或暗部突然轉換成亮部的特殊情形
if (iCurveTable[i] > 255)   iCurveTable[i] = 255;
if (iCurveTable[i] < 0)   iCurveTable[i] = 0;


最後用到SavePictureDialog元件
Image4->Picture->SaveToFile(SavePictureDialog1->FileName);
可以將檔案存到想保存的地方

這次作業讓我對用bcb與使用者互動更加了解,
通過元件的event可以完成與使用者簡單的互動
同時SavePictureDialog元件的加入,
可以讓我保存下影像處理的結果。





沒有留言:

張貼留言