原文:Win8 Metro(C#)数字图像处理--2.59 P分位法图像二值化



[函数名称]

  P分位法图像二值化

[算法说明]

  所谓P分位法图像分割,就是在知道图像中目标所占的比率Ratio时,循环不同的灰度值对图像进行

分割,并计算对应的目标所占的比率,如果该比率与Ratio的差值足够小,那么该阈值就是所求的最

佳分割阈值。

  1. /// <summary>
  2. /// P-Parameter method of image segmention.
  3. /// </summary>
  4. /// <param name="src">The source image.</param>
  5. /// <param name="P">The ratio of object, from 0 to 1.</param>
  6. /// <returns></returns>
  7. public static WriteableBitmap PParameterThSegment(WriteableBitmap src,double P) ////P参数法阈值分割
  8. {
  9. if (src != null)
  10. {
  11. int w = src.PixelWidth;
  12. int h = src.PixelHeight;
  13. WriteableBitmap dstImage = new WriteableBitmap(w, h);
  14. byte[] temp = src.PixelBuffer.ToArray();
  15. byte[] tempMask = (byte[])temp.Clone();
  16. //定义灰度图像信息存储变量
  17. int[] srcData = new int[w * h];
  18. //定义背景和目标像素个数变量
  19. int C1 = 0, C2 = 0;
  20. //定义阈值变量
  21. int Th = 0;
  22. for (int j = 0; j < h; j++)
  23. {
  24. for (int i = 0; i < w; i++)
  25. {
  26. 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);
  27. }
  28. }
  29. for (int T = 0; T <= 255; T++)
  30. {
  31. for (int i = 0; i < srcData.Length; i++)
  32. {
  33. if (srcData[i] > T)
  34. {
  35. C1++;
  36. }
  37. else
  38. {
  39. C2++;
  40. }
  41. }
  42. double t = Math.Abs((double)((double)C1 / ((double)C1 + (double)C2)) - P);
  43. if (t < 0.01)
  44. {
  45. Th = T;
  46. break;
  47. }
  48. C1 = 0;
  49. C2 = 0;
  50. }
  51. for (int j = 0; j < h; j++)
  52. {
  53. for (int i = 0; i < w; i++)
  54. {
  55. 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);
  56. }
  57. }
  58. Stream sTemp = dstImage.PixelBuffer.AsStream();
  59. sTemp.Seek(0, SeekOrigin.Begin);
  60. sTemp.Write(temp, 0, w * 4 * h);
  61. return dstImage;
  62. }
  63. else
  64. {
  65. return null;
  66. }
  67. }


Win8 Metro(C#)数字图像处理--2.59 P分位法图像二值化的更多相关文章

  1. Win8 Metro(C#)数字图像处理--2.57一维最大熵法图像二值化

    原文:Win8 Metro(C#)数字图像处理--2.57一维最大熵法图像二值化  [函数名称] 一维最大熵法图像二值化WriteableBitmap EntropymaxThSegment(Wr ...

  2. Win8 Metro(C#)数字图像处理--2.73一种背景图像融合特效

    原文:Win8 Metro(C#)数字图像处理--2.73一种背景图像融合特效 /// <summary> /// Image merge process. /// </summar ...

  3. Win8 Metro(C#)数字图像处理--2.55OSTU法图像二值化

    原文:Win8 Metro(C#)数字图像处理--2.55OSTU法图像二值化  [函数名称] Ostu法图像二值化      WriteableBitmap OstuThSegment(Writ ...

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

    原文:Win8 Metro(C#)数字图像处理--2.58双峰法图像二值化  [函数名称]   双峰法图像二值化 WriteableBitmap  PeakshistogramThSegment( ...

  5. Win8 Metro(C#)数字图像处理--2.75灰度图像的形态学算法

    原文:Win8 Metro(C#)数字图像处理--2.75灰度图像的形态学算法 前面章节中介绍了二值图像的形态学算法,这里讲一下灰度图的形态学算法,主要是公式,代码略. 1,膨胀算法 2,腐蚀算法 3 ...

  6. Win8 Metro(C#)数字图像处理--4图像颜色空间描述

    原文:Win8 Metro(C#)数字图像处理--4图像颜色空间描述  图像颜色空间是图像颜色集合的数学表示,本小节将针对几种常见颜色空间做个简单介绍. /// <summary> / ...

  7. Win8 Metro(C#)数字图像处理--3.2图像方差计算

    原文:Win8 Metro(C#)数字图像处理--3.2图像方差计算 /// <summary> /// /// </summary>Variance computing. / ...

  8. Win8 Metro(C#)数字图像处理--3.3图像直方图计算

    原文:Win8 Metro(C#)数字图像处理--3.3图像直方图计算 /// <summary> /// Get the array of histrgram. /// </sum ...

  9. Win8 Metro(C#)数字图像处理--3.4图像信息熵计算

    原文:Win8 Metro(C#)数字图像处理--3.4图像信息熵计算 [函数代码] /// <summary> /// Entropy of one image. /// </su ...

随机推荐

  1. Erlang 进制转换

    http://www.cnblogs.com/me-sa/archive/2012/03/20/erlang0047.html bnot unary bitwise not integer div i ...

  2. 【????】最短路(short)

    问题描述: 给出N个点,M条无向边的简单图,问所有点对之间的最短路. 数据输入: 第1行两个正整数N,M(N<=100,M<=5000) 下面M行,每行3个正整数x, y, w,为一条连接 ...

  3. 关于用WebView或手机浏览器打开连接问题

    1.通常情况下 大家可能都想使用WebView打开网页内部链接而不想再调用手机浏览器,我们可以通过以下两种方法实现: (1)为WebView设置一个WebViewClient,并重写shouldOve ...

  4. java生成二维码,读取(解析)二维码图片

    二维码分为好多种,我们最常用的是qrcode类型的二维码,以下有三种生成方式以及解析方式: 附所需jar包或者js地址 第一种:依赖qrcode.jar import java.awt.Color; ...

  5. 【前端统计图】echarts多条折线图和横柱状图实现

    参考链接:echarts官网:http://echarts.baidu.com/ 原型图(效果图): 图片.png 代码: <!DOCTYPE html> <html> < ...

  6. Methods for Using Message Queuing Telemetry Transport for Sensor Networks to Support Sleeping Devices

    Methods support a sleep mode for an embedded device. Embedded devices like sensors and actuators use ...

  7. Sleep(0)的妙用

    在线程中,调用sleep(0)可以释放cpu时间,让线程马上重新回到就绪队列而非等待队列,sleep(0)释放当前线程所剩余的时间片(如果有剩余的话),这样可以让操作系统切换其他线程来执行,提升效率. ...

  8. 【26.87%】【codeforces 712D】Memory and Scores

    time limit per test2 seconds memory limit per test512 megabytes inputstandard input outputstandard o ...

  9. MySQL旧版本ORDER BY 方法

    MySQL 的order by 它涉及到三个参数:A. sort_buffer_size 排序缓存.B. read_rnd_buffer_size 第二次排序缓存.C. max_length_for_ ...

  10. Ibatis之RowHandler

    如果一个场景:账户表中有1千万账户,现在,我们需要这个1千万账户利息结算业务.需求是基于Ibatis框架来实现这个功能. 如果按照一般的编程模式,我们将编写一个sql,然后调用QueryForList ...