版权声明:本文为博主原创文章,转载请在显著位置标明本文出处以及作者网名,未经作者允许不得用于商业目的。
灰度的算法主要有以下三种:
1、最大值法:
原图像:颜色值color=(R,G,B)
求出R,G,B中最大的值:Y=Max(R,G,B)
新图像:color=(Y,Y,Y)
2、平均值法: 使用每个像素点的 R,G,B值等于原像素点的RGB值的平均值;
原图像:颜色值color=(R,G,B)
求出R,G,B的平均值:Y=(R+B+G)/3
新图像:color=(Y,Y,Y)
3.、指数加权法:
原图像:颜色值color=(R,G,B)
将R,G,B分别乘上一个权重值,通常为Y=R * 0.3 + G * 0.59 + B * 0.11
新图像:color=(Y,Y,Y)
【例 17.33】灰度算法一:最大值法。
//灰度:最大值private void btnGray1_Click(object sender, EventArgs e){Color pSourceColor;Color pDestColor;Bitmap destImg = new Bitmap(sourceImg.Width, sourceImg.Height);int R, G, B;int gray;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;int MaxColor;MaxColor = R > G? R: G;MaxColor = MaxColor > B? MaxColor: B;pDestColor = Color.FromArgb(MaxColor, MaxColor, MaxColor);destImg.SetPixel(i, j, pDestColor);}}picDest.Image = destImg;}
运行结果如下图所示:
图17-37 灰度处理一
【例 17.34】灰度算法二:平均值法。
//灰度:均值法private void btnGray2_Click(object sender, EventArgs e){Color pSourceColor;Color pDestColor;Bitmap destImg = new Bitmap(sourceImg.Width, sourceImg.Height);int R, G, B;int gray;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;gray = (R + G + B) / 3;pDestColor = Color.FromArgb(gray, gray, gray);destImg.SetPixel(i, j, pDestColor);}}picDest.Image = destImg;}
运行结果如下图所示:
图17-38 灰度处理二
【例 17.35】灰度算法三:指数加权法。
//灰度:指数加权法private void btnGray3_Click(object sender, EventArgs e){Color pSourceColor;Color pDestColor;Bitmap destImg = new Bitmap(sourceImg.Width, sourceImg.Height);int R, G, B;int y;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;y =(int)( R * 0.3 + G * 0.59 + B * 0.11);pDestColor = Color.FromArgb(y, y, y);destImg.SetPixel(i, j, pDestColor);}}picDest.Image = destImg;}
运行结果如下图所示:
图17-39 灰度处理三
学习更多vb.net知识,请参看vb.net 教程 目录
学习更多C#知识,请参看 C# 教程 目录