[函數名稱]html
Wallis圖象銳化 WallisSharpen(WriteableBitmap src)算法
[算法說明]函數
Wallis銳化算法是在拉普拉斯算子的基礎上,考慮人的視覺特性中包含一個對數環節,所以在銳化時,採用對數處理的方法進行改進,公式以下:spa
<strong><span style="font-size:14px;">[函數代碼]</span></strong> /// <summary> /// Wallis sharpen process. /// </summary> /// <param name="src">The source image.</param> /// <returns></returns> public static WriteableBitmap WallisSharpen(WriteableBitmap src)////37Wallis銳化函數 { if (src != null) { int w = src.PixelWidth; int h = src.PixelHeight; WriteableBitmap sharpenImage = new WriteableBitmap(w, h); byte[] temp = src.PixelBuffer.ToArray(); byte[] tempMask = (byte[])temp.Clone(); double b = 0, g = 0, r = 0, srR = 0, srG = 0, srB = 0; for (int j = 1; j < h - 1; j++) { for (int i = 4; i < w * 4 - 4; i += 4) { srB = tempMask[i + j * w * 4]; srG = tempMask[i + 1 + j * w * 4]; srR = tempMask[i + 2 + j * w * 4]; b = 46*Math.Abs(5 * Math .Log(srB+1) - Math .Log(tempMask[i - 4 + j * w * 4]+1) - Math .Log(tempMask[i + 4 + j * w * 4]+1) - Math .Log(tempMask[i + (j - 1) * w * 4]+1) - Math .Log(tempMask[i + (j + 1) * w * 4]+1)); g = 46*Math.Abs(5 * Math .Log(srG+1) - Math .Log(tempMask[i - 4 + 1 + j * w * 4]+1) - Math .Log(tempMask[i + 4 + 1 + j * w * 4]+1) - Math .Log(tempMask[i + 1 + (j - 1) * w * 4]+1) - Math .Log(tempMask[i + 1 + (j + 1) * w * 4]+1)); r = 46*Math.Abs(5 * Math .Log(srR+1) - Math .Log(tempMask[i - 4 + 2 + j * w * 4]+1) - Math .Log(tempMask[i + 4 + 2 + j * w * 4]+1) - Math .Log(tempMask[i + 2 + (j - 1) * w * 4]+1) - Math .Log(tempMask[i + 2 + (j + 1) * w * 4]+1)); temp[i + j * w * 4] = (byte)(b > 0 ? (b < 255 ? b : 255) : 0); temp[i + 1 + j * w * 4] = (byte)(g > 0 ? (g < 255 ? g : 255) : 0); temp[i + 2 + j * w * 4] = (byte)(r > 0 ? (r < 255 ? r : 255) : 0); b = 0; g = 0; r = 0; srR = 0; srG = 0; srB = 0; } } Stream sTemp = sharpenImage.PixelBuffer.AsStream(); sTemp.Seek(0, SeekOrigin.Begin); sTemp.Write(temp, 0, w * 4 * h); return sharpenImage; } else { return null; } } <strong><span style="font-size:14px;">[圖象效果]</span></strong>