码迷,mamicode.com
首页 > Windows程序 > 详细

Win8 Metro(C#)数字图像处理--2.58双峰法图像二值化

时间:2018-03-13 11:03:32      阅读:262      评论:0      收藏:0      [点我收藏+]

标签:定义   source   stream   fill   led   seek   AC   信息   summary   

原文:Win8 Metro(C#)数字图像处理--2.58双峰法图像二值化

??

[函数名称]

??双峰法图像二值化?WriteableBitmap??PeakshistogramThSegment(WriteableBitmap?src)

技术分享图片

        /// <summary>
        /// Peaks histogram method of image segmention.
        /// </summary>
        /// <param name="src">The source image.</param>
        /// <returns></returns>
         public static WriteableBitmap  PeakshistogramThSegment(WriteableBitmap src) ////双峰法阈值分割
        {
            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[] histValues = new int[256];
                //定义双峰位置变量h1,h2,对应的灰度变量t1,t2,谷底灰度变量t
                int h1 = 0, h2 = 0, t1 = 0, t2 = 0, t = 255;
                //定义阈值变量
                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);
                        histValues[srcData[i + j * w]]++;
                    }
                }
                for (int i = 0; i < 256; i++)
                {
                    if (i < 129)
                    {
                        if (histValues[i] > t1)
                        {
                            h1 = i;
                            t1 = histValues[i];
                        }
                    }
                    else
                    {
                        if (histValues[i] > t2)
                        {
                            h2 = i;
                            t2 = histValues[i];
                        }
                    }
                }
                for (int n = h1; n <= h2; n++)
                {
                    if (histValues[n] < t)
                    {
                        Th = n;
                        t = histValues[n];
                    }
                }
                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.58双峰法图像二值化

标签:定义   source   stream   fill   led   seek   AC   信息   summary   

原文地址:https://www.cnblogs.com/lonelyxmas/p/8554542.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!