赞
踩
版权声明:本文为博主原创文章,转载请在显著位置标明本文出处以及作者网名,未经作者允许不得用于商业目的。
二值化的算法主要有以下两种:
1、彩色图像灰度化后,根据灰度和阈值来确定颜色是黑色还是白色。通常情况下使用的阈值是128。
2、第一种算法选择128作为阈值,在实际使用中显示效果并不是很好,可以采用更常见的求阈值的方法,例如大律法等。
【例 17.38】二值化算法一。
- //黑白1
- private void btn2Color1_Click(object sender, EventArgs e)
- {
- Color pSourceColor;
- Color pDestColor;
-
- Bitmap destImg = new Bitmap(sourceImg.Width, sourceImg.Height);
- int R, G, B;
- int AvgColor;
- for (int i = 0; i < sourceImg.Width; i++)
- {
- for (int j = 0; j < sourceImg.Height; j++)
- {
- pSourceColor = sourceImg.GetPixel(i, j);
- R = pSourceColor.R;
- G = pSourceColor.G;
- B = pSourceColor.B;
- AvgColor = (R + G + B) / 3;
- if (AvgColor >= 128)
- AvgColor = 255;
- else
- AvgColor = 0;
- pDestColor = Color.FromArgb(AvgColor, AvgColor, AvgColor);
- destImg.SetPixel(i, j, pDestColor);
- }
- }
- picDest.Image = destImg;
- }
运行结果如下图所示:
图17-42 二值化处理一
【例 17.39】二值化算法二。
- //黑白2
- private void btn2Color2_Click(object sender, EventArgs e)
- {
- Color pSourceColor;
- Color pDestColor;
-
- Bitmap destImg = new Bitmap(sourceImg.Width, sourceImg.Height);
- int R, G, B;
- int[] HistGram = new int[256];
-
- for (int i = 0; i < sourceImg.Width; i++)
- {
- for (int j = 0; j < sourceImg.Height; j++)
- {
- pSourceColor = sourceImg.GetPixel(i, j);
- HistGram[pSourceColor.R] += 1;
- }
- }
-
- int threshold;
-
- int allSum = 0;
- int allCount=0;
- for(int k = 0;k<= 255;k++)
- {
- allCount += HistGram[k];
- allSum += k * HistGram[k];
- }
-
- threshold = allSum / allCount;
-
- for (int i = 0; i < sourceImg.Width; i++)
- {
- for (int j = 0; j < sourceImg.Height; j++)
- {
- pSourceColor = sourceImg.GetPixel(i, j);
- R = pSourceColor.R;
-
- if (R >= threshold)
- R = 255;
- else
- R = 0;
- pDestColor = Color.FromArgb(R, R, R);
- destImg.SetPixel(i, j, pDestColor);
- }
- }
- picDest.Image = destImg;
- }
运行结果如下图所示:
图17-43 二值化处理二
学习更多vb.net知识,请参看vb.net 教程 目录
学习更多C#知识,请参看 C# 教程 目录
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。