[函数名称]
WriteableBitmap HistogramSpecificateProcess(WriteableBitmap src, WriteableBitmap dst)
[算法说明]
[函数代码] ////// Histogram specification process. /// /// The source image. /// The image to get histogram to use. ///public static WriteableBitmap HistogramSpecificateProcess(WriteableBitmap src, WriteableBitmap dst)38图像直方图规定化 { if (src != null) { int w = src.PixelWidth; int h = src.PixelHeight; byte[]histMap=HistogramMap(dst); WriteableBitmap histImage = new WriteableBitmap(w, h); byte[] temp = src.PixelBuffer.ToArray(); for (int i = 0; i < temp.Length; i += 4) { temp[i] = (byte)(255 * histMap[temp[i]]); temp[i + 1] = (byte)(255 * histMap[temp[i+1]]); temp[i + 2] = (byte)(255 * histMap[temp[i+2]]); } Stream sTemp = histImage.PixelBuffer.AsStream(); sTemp.Seek(0, SeekOrigin.Begin); sTemp.Write(temp, 0, w * 4 * h); return histImage; } else { return null; } } public static byte[] HistogramMap(WriteableBitmap src) { if (src != null) { byte[] temp = src.PixelBuffer.ToArray(); byte gray; int[] tempArray = new int[256]; int[] countPixel = new int[256]; byte[] pixelMap = new byte[256]; for (int i = 0; i < temp.Length; i += 4) { gray = (byte)(temp[i] * 0.114 + temp[i + 1] * 0.587 + temp[i + 2] * 0.299); countPixel[gray]++; } for (int i = 0; i < 256; i++) { if (i != 0) { tempArray[i] = tempArray[i - 1] + countPixel[i]; } else { tempArray[0] = countPixel[0]; } pixelMap[i] = (byte)(255 * tempArray[i] * 4 / temp.Length + 0.5); } return pixelMap; } else return null; }[图像效果]