2011年10月21日 星期五

HW1

這次選修老師的影像處理課程,雖然老師是使用BCB進行教學,但是因為我對於C#比較熟練,因此作業的形式我都以C#來製作。

目前程式的外觀
【基本視窗】
第一次使用MDI的模式來撰寫程式,以父容器的方式來包覆子程式的呈現方式以前沒有做過,因此這次這樣製作感覺非常新鮮,也稍微做了一些美化,看起來比較專業一些。

【開啟圖片】
程式一次可以載入多張圖片,這是很直覺也很基礎的功能,但要考慮到當執行指令時,到底是要對哪個子視窗執行命令,則必須做個紀錄的動作,不然程式不知道你到底要對哪個視窗下指令。因此我寫了一個全域變數來存放目前正在執行的視窗。

功能介紹
目前一共寫了以下幾種功能可以使用:
1.開檔
2.存檔
3.負片(指標)
4.負片(非指標)
5.灰階(指標)
6.咖瑪值設定
7.直方圖
8.直方圖均化

負片:
【負片後(左圖)】
指標版:使用指標直接對記憶體進行修改,速度飛快,執行時間0.01秒(這個方法類似於老師BCB所使用的方法)
非指標版:使用Bitmap的GetPixel(x,y)以及SetPixel(x,y,Color)來進行顏色的存取,速度極慢,執行時間1.3秒。

灰階:
【灰階後(右圖)】
將彩色的圖片轉為灰階,使用指標直接將RGB顏色相加後除3再將所得值放回記憶體中即完成。記得將RGB三種顏色都要設為所得值。

咖瑪:
【咖瑪預覽視窗】
當設定值大於1~20間時,圖片會變暗,中間的調整棒可以左右移動來比較。值得注意的地方是當使用者初次輸入1.2時,右邊的預覽圖即呈現1.2的結果。但是若是此時使用者再輸入1.3時,圖片應該以最原始的原圖來設定咖瑪而不是目前預覽的這張,所以不能直接對預覽圖片進行修改。

【左右調整預覽框來進行比較】
若是設定值介於0.001~1之間,會變得比較亮。

【調整咖瑪值後】
按下確定鈕後才對子視窗內的圖片進行修改

復原:
【復原結果】
任何動作執行不滿意時都可以透過復原來回復盛上一個畫面,圖示為將調整後的咖瑪復原後還原成執行調整咖瑪前的圖。

作業重點:直方圖
【直方圖呈現】
就呈現圖片的直方圖。利用DrawLine繪圖的方式來製作,需要注意的是比例縮放的問題,為了避免直方圖超出繪製框或是縮得太小,必須先計算最長的那根,把它當作頂,其他的就按照比例縮小,就不會超出框框了。

作業重點2:直方圖均化
【均化前】

【均化後(網頁為老師往置放的結果,一樣)】

直方圖均化的部分因為老師上這堂課的時候我有事情回家一趟缺席因此沒有聽到,再下一堂課聽老師再講解一次還是聽不太懂。網路上關於直方圖均化的介紹及資料也不多,因此這部分其實我一直沒有搞懂,程式碼參考網路別人的演算法,程式碼不長,我想若有時間我會再仔細研究深入了解。

以下附上部分程式碼畫面:






沒有留言:

張貼留言