2012年11月14日 星期三

96360210 黃彥羲 HW2


因為filtering必須要用到前一行的ScanLine,所以用另一個image來儲存,來避免計算時用到已修改的數值。但是當想對同一張圖多次Smooth時,必須Smooth->儲存->讀取->Smooth....重複動作,相當得很麻煩。若把計算結果暫存到一個陣列,等全圖都計算完畢後,一次更改記憶體內容,就可以解決這個問題,但是相對的處理速度會比較慢。以下為課本上的1/9算法。


原圖


Smooth 1次

Smooth 第2~10次
 事實上第2~10次的結果肉眼看不出差別,但卻比第一次更平滑。

在知道銳化公式後,Laplacian的算法根本就是把Smooth的各項更改係數而已(這裡計算8方向)。再把bPtrImage2[j*3+k] = bPtrImage[j*3+k]+c*iLaplacian。

只是當計算的該點與其周圍八點落差嚴重時,Laplacian會變的很大,很容易超過0~255,會變得像下圖所示。根據常數c=1或-1,圖會有些不同。


銳化 c=1


銳化 c=-1
因此需要將超出範圍的設為極值,圖片才會變得正常。

c=1

c=-1


中值濾波器比前兩個稍微麻煩點。因為只要中值,所以就不排序,直接找5次最大值。
前面連續4次,每次找到最大值就改為0,即下一次該值不會再是最大值,而第5次的最大值就是中值。



一次胡椒

一次胡椒過濾

二次胡椒

二次胡椒過濾
可以看的出來,因為是中值過濾的關係,當胡椒越密集時,越難清除乾淨。


沒有留言:

張貼留言