版权声明:本文为博主原创文章,转载请在显著位置标明本文出处以及作者网名,未经作者允许不得用于商业目的。
灰度的算法主要有以下三种:
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# 教程 目录