本文主要是介绍Win8Metro(C#)数字图像处理--2.34直方图规定化,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
[函数名称]
WriteableBitmap HistogramSpecificateProcess(WriteableBitmap src, WriteableBitmap dst)
[算法说明]
[函数代码]/// <summary>/// Histogram specification process./// </summary>/// <param name="src">The source image.</param>/// <param name="dst">The image to get histogram to use.</param>/// <returns></returns>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;}elsereturn null;}
[图像效果]
<img src="https://img-blog.csdn.net/20150412104816739?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvVHJlbnQxOTg1/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />
这篇关于Win8Metro(C#)数字图像处理--2.34直方图规定化的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!