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