首页 > Windows开发 > 详细

Win8 Metro(C#)数字图像处理--2.56简单统计法图像二值化

时间:2018-03-13 10:45:01      阅读:224      评论:0      收藏:0      [点我收藏+]
原文:Win8 Metro(C#)数字图像处理--2.56简单统计法图像二值化



[函数名称]

  简单统计法图像二值化 WriteableBitmap StatisticalThSegment(WriteableBitmap src)

技术分享图片

      /// <summary>
        /// Statistical method of image segmention.
        /// </summary>
        /// <param name="src">The source image.</param>
        /// <returns></returns>
        public static WriteableBitmap StatisticalThSegment(WriteableBitmap src) ////Ostu法阈值分割
        {
            if (src != null)
            {
                int w = src.PixelWidth;
                int h = src.PixelHeight;
                WriteableBitmap dstImage = new WriteableBitmap(w, h);
                byte[] temp = src.PixelBuffer.ToArray();
                byte[] tempMask = (byte[])temp.Clone();
                //定义灰度图像信息存储变量
                int[] srcData = new int[w * h];
                int eX = 0;
                int eY = 0;
                int sumEF = 0;
                int sumE = 0;
                int eMax = 0;
                //定义阈值变量
                int Th = 0;
                for (int j = 0; j < h; j++)
                {
                    for (int i = 0; i < w; i++)
                    {
                        srcData[i + j * w] = (int)((double)tempMask[i * 4 + j * w * 4] * 0.114 + (double)tempMask[i * 4 + 1 + j * w * 4] * 0.587 + (double)tempMask[i * 4 + 2 + j * w * 4] * 0.299);
                    }
                }
                for (int j = 1; j < h - 1; j++)
                {
                    for (int i = 1; i < w - 1; i++)
                    {
                        eX = srcData[i - 1 + j * w] - srcData[i + 1 + j * w];
                        eY = srcData[i + (j - 1) * w] - srcData[i + (j + 1) * w];
                        eMax = Math.Max(eX, eY);
                        sumE += eMax;
                        sumEF += eMax * srcData[i + j * w];
                    }
                }
                Th = (int)(sumEF / sumE);
                for (int j = 0; j < h; j++)
                {
                    for (int i = 0; i < w; i++)
                    {
                        temp[i * 4 + j * w * 4] = temp[i * 4 + 1 + j * w * 4] = temp[i * 4 + 2 + j * w * 4] = (byte)(srcData[i + j * w] < Th ? 0 : 255);
                    }
                }
                Stream sTemp = dstImage.PixelBuffer.AsStream();
                sTemp.Seek(0, SeekOrigin.Begin);
                sTemp.Write(temp, 0, w * 4 * h);
                return dstImage;
            }
            else
            {
                return null;
            }
        }
技术分享图片

Win8 Metro(C#)数字图像处理--2.56简单统计法图像二值化

原文:https://www.cnblogs.com/lonelyxmas/p/8554534.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!