顯示具有 2011hw01 標籤的文章。 顯示所有文章
顯示具有 2011hw01 標籤的文章。 顯示所有文章

2011年10月30日 星期日

Hw1

一開始是讀檔、圖片資訊 (資訊不知要標什嚜,就只先放圖片長跟寬)


還有負片處理 (看起來真有點恐怖)


然後是色彩的直方圖

讀取圖檔每色階的值,丟進陣列後
再畫圖顯現出來


直方圖的色彩累計

累計部分,是一開始處理統計時,同時累加好放進另一陣列
畫圖時再將陣列交換

均化處理部分,最後還是沒寫出來,雖然聽過幾個禮拜的講解,
不過真要轉成程式碼時,還是卡住不知如何下手,要找機會請教同學...

心得:

雖然畫直方圖使用的演算法不算難,不過不熟習一沒弄好還是會混亂

只是幾個小錯誤,像是算式範圍、迴圈上限設錯等,
都要DeBug 好一段時間才發現錯誤點...

均化部分,上課自己以為好像聽懂了原理,不過等要轉化成演算法輸出時,
腦袋就打結然後一片矇矓了...

原本想靠自力寫出來,不過經過幾個小時無意義嘗試後,
成果還是一片空白,還真有不少地方該檢討...


題外話: 不知是家裡與學校BCB版本問題,還是存檔錯誤,程式完全打不開...


弄半天都搞不定,最後只好只好整個重開重寫...

2011年10月28日 星期五

HW01-直方圖均化

本次作業是利用BCB, 將一張對比不明顯的圖, 將其方圖以及直方圖均化之後的結果顯示出來。

原圖:


原直方圖:

均化後:

均化後的直方圖:


心得與討論:
其實這次的程式碼並不是很難, 只要懂他的原理, 從直方圖統計, 累積直方圖統計, 產生色彩對照表到最後的色彩置換, 按部就班的來, 再加上老師課堂上的講解, 基本上是沒有太大的問題的。但是自己動手做又是另外一回事, 雖然許多問題都自己慢慢解決了, 可是還是卡在一個問題, 卡了不少時間, 最後還是老師幫忙找出來的, 就是Autosize要改成true, 不然你讀取大圖片的時候, 超出它的範圍它就會沒辦法讀取, 看許多同學的作業, 也有不少人卡在這個問題上面, 所以小細節方面還是要多多注意的。
這次的作業真的不難, 但是在之前上課的時候好像晚到了, 最重要的部分就沒聽到, 有點跟不上, 後來老師重複講了兩三次之後, 才慢慢的跟上來, 但是, 跟上來之後, 新教的又有點吃不消, 所以, 就像老師所說的, 不能遲到也不能翹課, 否則後面造成的惡性循換就是-->死當。

Homework 1: 直方圖顯示與直方圖均化處理

本次程式基本介面






Part a. 用 C++ Builder 將一張影像的直方圖與其相關基本訊息顯示出來。

pic1 關渡河岸 傍晚景色






pic2 室內人像照








Part b. 用 C++ Builder 將一張對比不明顯的影像用直方圖均化處理後, 重新顯示出來。

pic1

處理前


處理後



pic2

處理前


處理後





Part c. 心得與討論

  還記得第一堂課有探討過 "照片跟影像有何不同" 的題目,聽完老師的說明後才了解到,絕大部分是跟解析度很有關係,在IPC這堂課之中,未來會學習到很多影像處理程式撰寫的技巧,這些程式都可以讓我們將相片改變成自己所想要的最佳化效果再將它儲存起來使用。

  在這次的作業之中,老師引導大家的想法其實並不是太難,上課聽講時也都還跟得上,但或許是在演算法方面並沒有那麼在行,也可能是太久沒有使用BCB軟體撰寫程式,這次作業的完成時間才會這麼緩慢,同時也帶有許多疑惑,但幸好有把程式寫出來,雖然這應該是滿基本且不難的程式,可是在這次的程式作業之中仍然還是有學到東西。

  直方圖部分內,我將圖片分成兩種顯示模式,一種是三個顏色各自分開,另一種則是三個顏色和在一起。在直方圖的程式碼中,利用兩個for迴圈加上ScanLine去畫出直方圖。兩張不同的圖片,可清楚的看出色彩值的不同。

  而均化程式部分,利用累積統計圖(cdf)以及產生新舊色彩對照表,再將周圍的色彩平均化之後,以ScanLine的方式將舊色彩值換成新的色彩值,我用了許多圖片測試均化的效果,最後選定這兩張圖片放在部落格上,以風景照這張而言,均化程式之後,可以看出較為明亮的效果,將原本已經是利用最簡單的方法在傍晚拍出的照片,改成一張像是利用相機特殊效果拍出的圖片。而人像圖則是非常讓我失望,原本以為即使均化之後的效果也會跟風景照一樣不錯,結果過於明亮的效果,反而讓這張照片有過曝的感覺,雖然如此,但均化程式可以讓人臉變得比較清晰這一點卻是一個不錯的要素。

  這是IPC課程的第一個作業,在演算法與影像處理之中,我還是有很多不會的部分,但有鑒於之前數位媒體導論上課時學到了不少,所以接下來的課程我也會盡力讓我的演算法變好,思考程式碼能再清楚一點,讓之後的作業能夠準時交出並完整真正的理解程式。

2011年10月21日 星期五

HW1





這次的作業是做直方圖等化(Histogram Equalization),Histogram Equalization為一種使用統計方法的影像處理程式設計,它的功能為將統計直方圖的色彩分布平均的打散在直方圖裡,也就是說,讓一張圖的直方圖分布均勻化.









執行均化前,圖片偏暗,看不清楚照片主體




執行均化前的RGB分佈圖




執行均化之後,圖片變比較亮,圖片的主體呈現出來了




執行均化後的RGB分佈圖,明顯比較均勻分佈







心得:

從直方圖的變化可以看出均化效果
可以讓較暗的照片均化後變得清楚一點。
可使圖片的顏色感覺更相近一些,讓亮度變較亮,
可以對照片光線不足進行修補
這次的作業一開始對我來說滿困難的,因為本來就對程式不太行
後來就慢慢研究上課的筆記還有到網路蒐集資料,
看看別人是如何寫Histogram Equalization之後才慢慢了解






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:直方圖均化
【均化前】

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

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

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






Hw01

(a)

(b)

(c)

心得:

這次作業老師上課講解過演算法後,感覺做起來有想法不會卡卡的,
所以問題比較不多,上面的圖就是程式實作起來的情形,
首先(a)圖的原圖整體上比較暗,經過均化處理,有明顯亮度的提升,
而(b)圖則是找來亮度比較高的圖作差別,
也是均化後就變得比較暗了,最後的(c)圖就是均化完覺得對比做出不錯效果的圖,
老師上課有稍微提到也可以把原圖先作成灰階以後做均化,所以程式有多做一個把圖片轉灰階的功能,不過有時候程式form再拉物件配置時會有拉不動的狀況,不知道是什麼原因,算是個不影響結果的小問題吧。

作業1

其實在均化之前都不算太難
上課有注意聽回家有複習都可以做出來
但是均化可真是傷透腦筋
雖然到最後做了出來 不過該檢討自己的程式能力還不夠!


上面是版面設計


然後我也因為摸不清mousemove的指令

跑去下面這個網站看了這個東西
http://www.programmer-club.com/showSameTitleN/cb/14165.html

他這邊有寫取座標
void __fastcall TfrmMain::Timer1Timer(TObject *Sender)
{
TPoint p;
p.x = Mouse->CursorPos.x;
p.y = Mouse->CursorPos.y;
this->Caption = IntToStr(p.x)+':'+IntToStr(p.y);
}

不過還沒寫出來



















上面是原圖


















上面是均化過的

















然後這張是全部呈現



這張是彩色均化

其餘功能我想如果寫出來再補上吧....

作業1給我的感觸很深
身為專研生但是做得蠻零落的
不是很好~
只能說基礎打不好遇到問題都不太好解決~
目前各方面都在加強中了=_=


關於作業1也遇到了不少小問題

同時讀取兩張圖片之後關於執行按鈕的問題
這個小問題也困擾了不少時間
不過最後還是解決了

另外一個問題是圖片
真的好難找到一張適合的
而且我的拍照技術........很差
最後決定的照片我也覺得不是很好....
不過勉強還算可以吧=_=

最後我想分享我的一些想法

雖然作業對我很難
不過我還是嚐試著去想演算法
像我上面貼的XY座標定位
我就想了1星期
然後用兩天的時間去實做
做不出來還偷偷問了熊大一些些小問題((
但是覺得這整個過程很值得

完畢↑

HW01 直方圖均化處理


直方圖均化是什麼?

通常用於增加圖像的對比度

尤其是當圖像對比度的數據相當接近的時候,

使用這種方法可以讓影像的亮度有更好的表現。



什麼時候使用直方圖均化較佳?

對於影像背景和前景過於明亮或者是太暗的時候,

這種方法非常的有用,

還有曝光過度或是曝光不足的照片,

其效果也是不錯的。



程式撰寫過程

在用BCB撰寫直方圖均化的過程中並沒有太大的問題,

老師在課堂上講得很清楚,

直方圖在先前的課堂上已經都做得出來了,

只要再加上統計、換算成百分比、最後轉置

就大功告成了。

比較花時間的部分,大概就是尋找適合做均化處理的圖吧!


由於專研方向的關係,暑假有研究過OpenCV一陣子,

我知道OpenCV裡有內建專屬直方圖均化處理的函數

稍微查詢一下資料就可以找到,

因此,我除了用BCB、還使用了OpenCV實做了這次的作業,

藉此觀察使用BCBOpenCV做直方圖均化處理有何差異,

在以下程式執行的部分,將會有兩者輸出結果的比較。




程式執行結果

首先,我因為好奇「失焦」的圖像均化之後效果會變得如何,

因此找了一張嚴重失焦的影像做處理(如下圖),




(BCB直方圖均化-失焦圖處理)



(OpenCV直方圖均化-失焦圖處理)


我發覺均化對於失焦的圖而言並沒有太大的幫助


如圖所見,其差異性非常的不顯著


除此之外,其實BCBOpenCV處理過後的效果也是大同小異呢!



接下來,我又試了一張建築物的「夜景」圖,


但或許是該圖像本身對比度並不低,


導致均化後效果極差


甚至比原圖還要糟(如下圖),




(BCB直方圖均化-夜景_建築)



(OpenCV直方圖均化-夜景_建築)


我還是不死心,又再找了其他「夜景」的圖像,

之後終於試出了一張我認為成功的圖像(如下圖),




(BCB直方圖均化-夜景_橋)


(OpenCV直方圖均化-夜景-橋)


原本昏暗的圖像,經過均化之後變得很明亮


雖然似乎失去了那份美感,但是圖像更加清晰


橋上的人變得更為顯眼,


讓我感到神奇的是,這種均化的過程,


似乎是把橋上的燈點綴得更加明亮,


有種變魔術的感覺!




心得感想


還蠻有趣的,寫完程式後找了好多圖片丟進程式裡面執行,


很期待結果會是怎樣,經過那麼多次的嘗試,


我漸漸抓到訣竅,哪些圖像適合均化、哪些不適合


學會均化之後,若自己或是身旁的朋友有對比度不佳的照片,


或許我能夠幫他加以優化喔! 是個還蠻不錯的技術~


而且阿,我覺得在影像處理這堂課跟著老師的腳步前進,


感覺大家都可以自己寫出個小小photoshop出唷!