2010年12月22日 星期三

HW2

這次的作業呢,是顯示一張影像的直方圖,並將影像做均化處理。
結果展示:
















因為我做的是灰階影像,要先把彩色轉灰階。

而在轉換的過程中順便用一個變數(lines[255])統計在這張圖中
"某灰階色彩值總共出現幾次"
例如:灰階色彩值為100的出現30次、255的出現0次...等










有了lines之後我們就可以畫出直方圖了!






其中*0.2是為了別讓直方圖畫超過image,可以用變數讓使用者自行調整比例。

畫完直方圖後開始均化處理

我宣告了一個變數lineSum[255],用來存lines的累加值
lineSum[i] = lineSum[i-1] + lines[i];
就是"累計色彩值的出現次數"
例如:
lineSum[1] = lineSum[0]+色彩值1的出現次數
lineSum[2] = lineSum[1]+色彩值2的出現次數
lineSum[3] = lineSum[2]+色彩值3的出現次數...

然後再用變數P[i]存放lineSum[i]/影像大小(長*寬)
其中lineSum[i]/影像大小 就是"累計到目前為止所佔的比例"

最後新的灰階色彩值就等於P[舊的灰階色彩值]*255
讓原本色彩範圍小的影像均化成色彩範圍0~255大的影像
可以使得色彩更加分明,看得更清楚。

Gary = P[Gary]*255;


做完灰階影像直方和均化後
要做彩色影像就比較容易了
比較直覺的想法就是宣告三個不同的lines[255]分別統計RGB值
lineSum[255]、P[255]也宣告為不同的三個
接著再印出每一像素點的RGB值就好
直方圖也分別印那三個lines[255]

心得:在這次的作業中,因為當初聽老師課堂上的講解沒有很明白、想通
然後作業也比較晚開始寫,記憶變的更模糊的情況下寫起作業來就容易卡住
當初我就是照著自己的想法下去寫,直方圖以前都還沒甚麼問題
但做到均化的部分就開始有問題了,我只想著要把直方圖轉成均化後的樣子
卻忘了影像才是主角....0_0
寫了半天也寫不出個所以然

好在在下次上課時我向老師提出一些問題後開始有了頭緒
統計"某灰階色彩值總共出現幾次"並把值印出
接著"累計色彩值的出現次數"並把值印出...一步一步來
在老師的指導下和不停的嘗試錯誤終於把程式寫出來了
發現程式碼比想像中簡單而且短非常多
只是有些地方腦筋沒辦法馬上轉過來
像是Gary = P[Gary]*255這行就想了好久
儘管如此,經過這次的練習讓我收穫不少 。

沒有留言:

張貼留言