原文:Win8Metro(C#)数字图像处理--2.30直方图均衡化

[函数名称]

直方图均衡化函数HistogramEqualProcess(WriteableBitmap src)

[算法说明]

  直方图均衡化,又叫做直方图修平,是对图像进行非线性拉伸,重新分配图像像素值,把原始图像的灰度直方图从比较集中的某个灰度区间转换为全部灰度范围内的均匀分布,这样就增加了像素灰度值的动态范围,达到增强图像整体对比度的效果。

[函数代码]

        /// <summary>

        /// Histogram equalization process.

        /// </summary>

        /// <param name="src">The source image.</param>

        /// <returns></returns>

        public static WriteableBitmap HistogramEqualProcess(WriteableBitmap src)////30图像直方图均衡化

        {

            if (src != null)

            {

                int w = src.PixelWidth;

                int h = src.PixelHeight;

                WriteableBitmap histogramEqualImage = new WriteableBitmap(w, h);

                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);

                }

                for (int i = 0; i < temp.Length; i+=4)

                {

                    gray = temp[i];

                    temp[i] = pixelMap[gray];

                    gray = temp[i+1];

                    temp[i+1] = pixelMap[gray];

                    gray = temp[i+2];

                    temp[i+2] = pixelMap[gray];

                }

                Stream sTemp = histogramEqualImage.PixelBuffer.AsStream();

                sTemp.Seek(0, SeekOrigin.Begin);

                sTemp.Write(temp, 0, w * 4 * h);

                return histogramEqualImage;

            }

            else

            {

                return null;

            }         

        }

[图像效果]

Win8Metro(C#)数字图像处理--2.30直方图均衡化的更多相关文章

  1. Win8Metro(C#)数字图像处理--2.34直方图规定化

    原文:Win8Metro(C#)数字图像处理--2.34直方图规定化  [函数名称] WriteableBitmap HistogramSpecificateProcess(WriteableBi ...

  2. Win8Metro(C#)数字图像处理--2.31灰度拉伸算法

    原文:Win8Metro(C#)数字图像处理--2.31灰度拉伸算法  [函数名称] 灰度拉伸函数GrayStretchProcess(WriteableBitmap src) [算法说明]    ...

  3. Win8Metro(C#)数字图像处理--2.33图像非线性变换

    原文:Win8Metro(C#)数字图像处理--2.33图像非线性变换  [函数名称] 图像非线性变换函数NonlinearTransformProcess(WriteableBitmap src ...

  4. Win8Metro(C#)数字图像处理--2.32图像曝光算法

    原文:Win8Metro(C#)数字图像处理--2.32图像曝光算法  [函数名称] 图像曝光函数ExposureProcess(WriteableBitmap src,int exposureV ...

  5. Win8Metro(C#)数字图像处理--2.27图像加法运算

    原文:Win8Metro(C#)数字图像处理--2.27图像加法运算  [函数名称] 图像加法函数AddProcess(WriteableBitmap src, WriteableBitmap a ...

  6. Win8Metro(C#)数字图像处理--2.28图像乘法运算

    原文:Win8Metro(C#)数字图像处理--2.28图像乘法运算  [函数名称] 图像乘法函数MultiplicationProcess(WriteableBitmap src, Writea ...

  7. Win8Metro(C#)数字图像处理--2.29图像除法运算

    原文:Win8Metro(C#)数字图像处理--2.29图像除法运算  [函数名称] 图像除法函数DivisionProcess(WriteableBitmap src, WriteableBit ...

  8. Win8Metro(C#)数字图像处理--2.26图像减法

    原文:Win8Metro(C#)数字图像处理--2.26图像减法  [函数名称] 图像减法函数SubtractionProcess(WriteableBitmap src, WriteableBi ...

  9. Win8Metro(C#)数字图像处理--2.25二值图像距离变换

    原文:Win8Metro(C#)数字图像处理--2.25二值图像距离变换  [函数名称] 二值图像距离变换函数DistanceTransformProcess(WriteableBitmap sr ...

随机推荐

  1. Android Gradle Plugin指南(三)——依赖关系、android库和多项目配置

    原文地址:http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Dependencies-Android-Librari ...

  2. Cocos2d-x 3.2 Lua演示样例FontTest(字体測试)

    Cocos2d-x 3.2 Lua演示样例FontTest(字体測试) 本篇博客介绍Cocos2d-x 3.2中Lua測试项目中的FontTest样例,主要使用了字体文件来创建我们想要的字体样式: 第 ...

  3. 6.Swift教程翻译系列——Swift集合类型

    英文版PDF下载地址http://download.csdn.net/detail/tsingheng/7480427 Swift提供数组和字典两种集合类型.用来存储很多值的情况.数组有序的存储一组同 ...

  4. arm-linux内存管理学习笔记(1)-内存页表的硬件原理

    linux kernel集中了世界顶尖程序猿们的编程智慧,犹记操作系统课上老师讲操作系统的四大功能:进程调度 内存管理 设备驱动 网络.从事嵌入式软件开发工作,对设备驱动和网络接触的比較多. 而进程调 ...

  5. 如何在PHP页面中原样输出HTML代码(是该找本php的数来看了)

    如何在PHP页面中原样输出HTML代码(是该找本php的数来看了) 一.总结 一句话总结:字符串与HTML之间的相互转换主要应用htmlentities()函数来完成. 1.php中的html标签如何 ...

  6. sql数据库时间转换convert

    CONVERT CONVERT将某种数据类型的表达式显式转换为另一种数据类型. 严格来说,CONVERT不属于日期处理函数,只是它被经常用于日期处理中,所以这里把它列入了其他日期处理函数,下面是CON ...

  7. C 删除字符串1字符串2

    #include<stdio.h> #include<string.h> void main() { char s1[1000],s2[100],b[100]; int i,j ...

  8. 禁止Delphi2010检测新版本

    启动Delphi2010后,Delphi2010 总会提示下载更新包,而对于D版用户来说,这个功能可能反而带来麻烦,那么有解决办法吗?答案是肯定的.1. 打开 C:\Documents and Set ...

  9. Qt实用技巧:界面切换使用Dialog全屏切换

    需求 在做应用程序的过程中,需要使用界面切换,界面切换到下一个界面使用new一个界面并显示,如系统设置,相关信息展示等等. (注意:本技巧适用的条件是,主界面不需要相关的信号与槽做消息循环,因为主界面 ...

  10. WPF--3Dmax+blend+WPF综合运用

    引自:http://blog.sina.com.cn/s/blog_95dbdf9e0100we3z.html 本人小菜,WPF刚入门,只是写一下最近的项目心得.欢迎各位前辈们前来拍砖指正,感激不敬! ...