2016年12月24日 星期六

05362640 周芸HW03


LevelCurves

未處理過的圖像如果該圖元本身存儲的是某一個顏色值則顯示出來的顏色也是依舊不做改變也就是input=output


Level


將該圖像中的線當作是直線用函數的表示方法就是y=x

對輸入值的範圍和輸出的值進行修改新的直線y=kx+b

K=(OutPutMax-OutPutMin)/(InputMax-InputMin)
b=outputMin-k*inputMin;

通過上一章節的直方圖我們可以知道一張圖片的顏色值的分佈情況將集中的顏色範圍做出新的輸入值範圍:

圖片的顏色多了一些白濛濛的感覺直方圖的顏色分佈也沒有之前那麼的集中了

如果把其變成把0-255轉為255-0的輸出時照片就會變為底片的形式顯現而之前的直方圖也會對稱的反轉過去


這裡需要克服的問題是因為Edit控制項輸入的是字串需要讓輸入的值是數位因此需要進行設定
按兩下事件中的OnKeyPress

void __fastcall TForm1::Edit1KeyPress(TObject *Sender, System::WideChar &Key)
{
         if(Key<48||Key>57)Key=0;//0-9ASCII碼值範圍內有效
}
此外需要將Edit中的值轉為INT值進行運算
  inputMin=StrToInt(Edit1->Text);
         inputMax=StrToInt(Edit2->Text);
         outputMin=StrToInt(Edit3->Text);
         outputMax=StrToInt(Edit4->Text);

Curves

CurvesLevel略有不同PhotoshopCurves可以讓用戶確定14個點然後用光滑的曲線進行連接我們這裡簡化為用戶確定一個點(ppx,ppy)然後用一元二次函數的計算方式確定
Y=ax^2+bx+c
因為使用者確定了一個點而且曲線固定通過00)(255255兩個點三個點足以畫出該曲線



點擊Curves按鈕按一下refresh後可以得到下列圖像

如果滑鼠按一下在左上角時圖片會顯得白而亮一些直方圖也會有一些分散而不像之前那樣集中,因為每一個顏色的輸出都比之前的顏色數值更大,所以更加接近於白色。


如果滑鼠按一下在右上角時圖片會顯得灰一些偏向照片底色直方圖也會更加集中在一側,因為每一個顏色的輸出都比之前的顏色數值更小,所以更加接近於黑色,所以偏灰暗



這裡需要處理的問題是如何讓軟體知道滑鼠點擊位置並將座標返回顯現與螢幕中

Image的事件中按兩下OnMouseDown事件編寫程式:


      

沒有留言:

張貼留言