版权声明:本文为博主原创文章,转载请在显著位置标明本文出处以及作者网名,未经作者允许不得用于商业目的。
二值化的算法主要有以下两种:
1、彩色图像灰度化后,根据灰度和阈值来确定颜色是黑色还是白色。通常情况下使用的阈值是128。
2、第一种算法选择128作为阈值,在实际使用中显示效果并不是很好,可以采用更常见的求阈值的方法,例如大律法等。
【例 17.38】二值化算法一。
//黑白1private 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;elseAvgColor = 0;pDestColor = Color.FromArgb(AvgColor, AvgColor, AvgColor);destImg.SetPixel(i, j, pDestColor);}}picDest.Image = destImg;}
运行结果如下图所示:
图17-42 二值化处理一
【例 17.39】二值化算法二。
//黑白2private 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;elseR = 0;pDestColor = Color.FromArgb(R, R, R);destImg.SetPixel(i, j, pDestColor);}}picDest.Image = destImg;}
运行结果如下图所示:
图17-43 二值化处理二
学习更多vb.net知识,请参看vb.net 教程 目录
学习更多C#知识,请参看 C# 教程 目录