原文:Win8Metro(C#)数字图像处理--2.31灰度拉伸算法



[函数名称]

灰度拉伸函数GrayStretchProcess(WriteableBitmap src)

[算法说明]

  直方图灰度拉伸也叫做对比度拉伸,是一种特殊的线性点运算,使用的是分段线性变换函数,它的主要思想是提高图像灰度级的动态范围;它的作用是扩展图像的直方图,使其充满整个灰度等级的范围内,从而改善输出图像。

  如图Fig.1所示,变换函数的运算结果是将原图在a-b之间的灰度级拉伸到c-d之间。如果一幅图像的灰度级集中在较暗的区域从而导致图像偏暗,或者一幅图像的灰度级集中在较亮的区域从而导致图像偏亮,则可以使用灰度拉伸来改善图像质量。

[函数代码]

        /// <summary>

        /// Gray stretch process.

        /// </summary>

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

        /// <returns></returns>

        public static WriteableBitmap GrayStretchProcess(WriteableBitmap src)////31图像灰度拉伸

        {

            if (src != null)

            {

                int w = src.PixelWidth;

                int h = src.PixelHeight;

                WriteableBitmap grayStretchImage = new WriteableBitmap(w, h);

                byte[] temp = src.PixelBuffer.ToArray();

                int min = 0;

                int max = 0;

                int gray = 0;

                int res = 0;

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

                {

                    gray = (int)(temp[i] * 0.114 + temp[i + 1] * 0.587 + temp[i + 2] * 0.299);

                    min = min < gray ? min : gray;

                    max = max > gray ? max : gray;

                }

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

                {

                    gray = (int)(temp[i] * 0.114 + temp[i + 1] * 0.587 + temp[i + 2] * 0.299);

                    res = (255 / (max - min)) * (gray - min);

                    temp[i] = (byte)res;

                    temp[i + 1] = (byte)res;

                    temp[i + 2] = (byte)res;

                }

                Stream sTemp = grayStretchImage.PixelBuffer.AsStream();

                sTemp.Seek(0, SeekOrigin.Begin);

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

                return grayStretchImage;

            }

            else

            {

                return null;

            }         

        }

Win8Metro(C#)数字图像处理--2.31灰度拉伸算法的更多相关文章

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

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

  2. Win8Metro(C#)数字图像处理--2.30直方图均衡化

    原文:Win8Metro(C#)数字图像处理--2.30直方图均衡化 [函数名称] 直方图均衡化函数HistogramEqualProcess(WriteableBitmap src) [算法说明] ...

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

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

  4. Win8Metro(C#)数字图像处理--2.7图像伪彩色

    原文:Win8Metro(C#)数字图像处理--2.7图像伪彩色  2.7图像伪彩色函数 [函数名称] 图像伪彩色函数PseudoColorProcess(WriteableBitmap src) ...

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

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

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

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

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

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

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

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

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

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

随机推荐

  1. RecyclerView的2种监听方式

    NO.1:在自己定义适配器的ViewHolder里面写监听事件 //RecyclerView适配器 public class RecyclerViewAdapter extends RecyclerV ...

  2. 【hdu 5996】dingyeye loves stone

    Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Total Submission(s) ...

  3. [React Router v4] Style a Link that is Active with NavLink

    We often need to be able to apply style to navigation links based on the current route. In React Rou ...

  4. vi/vim基本使用命令

    vi/vim基本使用命令 一.总结 一句话总结:1.记住三种模式:命令行模式.插入模式.底行模式:2.记住两个按键功能:i和esc 二.vi/vim基本使用命令 vi/vim 基本使用方法本文介绍了v ...

  5. 【STL】各容器成员对比表

    http://www.cnblogs.com/fangyukuan/archive/2010/09/21/1832675.html Sequence containers Associative co ...

  6. sql中group by用来干嘛的

    sql中group by用来干嘛的 一.总结 一句话总结: 1.group by用来分类汇总的,by后面接要分的类 2.group by既然是分类汇总,那就要和聚合函数结合使用,因为要汇总啊 3.ha ...

  7. spark 2.0.2 集群搭建

    由于之前已经搭建过hadoop相关环境,现在搭建spark的预备工作只有scala环境了 一,配置scala环境 1.解压tar包后,编辑/etc/profile 2.source /etc/prof ...

  8. .net remoting 使用事件

    原文:.net remoting 使用事件 在RPC如果需要使用事件,相对是比较难的.本文告诉大家如何在 .net remoting 使用事件. 目录 使用 Channel 序列化 开发建议 修复异常 ...

  9. JDBC 使用这个是MySQL下的

    import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.R ...

  10. C#中的SMTP配置Outlook.Com SMTP主机

    如果你想以编程方式使用    Outlook.com或Gmail帐户作为    SMTP主机    发送电子邮件,也有为了得到这一切工作的几件事情要注意. 使用基本的System.Net.Mail库, ...