C#彩色图像的伪色空间处理程序设计(14)
时间:2017-01-03 11:32 来源:毕业论文 作者:毕业论文 点击:次
g = pixel1.G + Math.Abs(pixel1.G - pixel2.G) / 4; b = pixel1.B + Math.Abs(pixel1.B - pixel2.B) / 4; bitmap.SetPixel(x - 1, y - 1, Color.FromArgb(r, g, b)); } } 图 4.2锐化处理后的图像 图像的雾化处理 图像雾化效果的处理过程是以当前像素点为基础的,选取一定大小的像素块,在像素块中,随机选择某个像素点的颜色值,把它赋给当前像素点。这样,图像就带有水雾般的效果。像素块选取的越大,效果越明显。 for(int x=1;x<width-1;x++){ for(int y=1;y<height-1;y++){ int k=MyRandom.Next(111111); int dx = x + k % 30; int dy = y + k % 30; if (dx >= width) dx = width - 1; if (dy >= height) dy = height - 1; pixel = mybitmap.GetPixel(dx, dy); bitmap.SetPixel(x, y, pixel); } } 图 4.3雾化处理后的图像 图像的柔化处理 柔化处理是将图像中的原像素点颜色值用其相邻的n*n个像素点的颜色平均值来代替,目的是减少图像中颜色的变化程度。经过这种处理后,如果当前像素点和周围点的颜色差别不大,取平均值对像素点影响不大;差别较大时,去平均值就会使当前点的颜色和周围点趋于一致,这样就达到了柔化效果。具体实现代码如下: for (int x = 1; x < width - 1; x++) for (int y = 1; y < height - 1; y++) { int r = 0, b = 0, g = 0; int Index=0; for (int col = -1; col <= 1; col++) for (int row = -1; row <= 1; row++) { pixel = mybitmap.GetPixel(x + row, y + col); r += pixel.R; g += pixel.G; b += pixel.B; Index++; } r /= 9; g /= 9; b /= 9; bitmap.SetPixel(x - 1, y - 1, Color.FromArgb(r, g, b)); 图 4.4 柔化处理后的图像 图像的取反色 图像的反色处理,可以实现图片的底片化效果。图像的反色效果处理方法是取图像上的每一个像素点的颜色值,然后把该像素点的颜色值取原来值的反色值。 for (int x = 0; x < width; x++) for (int y = 1; y < height; y++) { int r, g, b; pixelOri = OriBitmap.GetPixel(x, y); r = 255 - pixelOri.R; g = 255 - pixelOri.G; b = 255 - pixelOri.B; bitmap.SetPixel(x, y, Color.FromArgb(r, g, b)); } 图 4.5 反色处理后的图像 灰度处理程序设计及实现 如之前所说的那样,灰度处理共有三种处理方法,下面我们具体介绍一下,代码的实现。由于三种处理方法只是对色彩的处理问题有些许的差异,所以,下面将仅列出三种方法的颜色处理的主代码,其他的代码请参见光盘。 加权平均法 curColor = curBitmap.GetPixel(i, j); ret = (int)(curColor.R * 0.299 + curColor.G * 0.587 + curColor.B * 0.114); urBitmap.SetPixel(i, j, Color.FromArgb(ret, ret, ret)); 图 4.6 加权平均法处理结果 平均值法 curColor = curBitmap.GetPixel(i, j); ret = (int)(curColor.R + curColor.G + curColor.B)/3; curBitmap.SetPixel(i, j, Color.FromArgb(ret, ret, ret)); 图 4.7 平均值法处理结果 最大值法 curColor = curBitmap.GetPixel(i, j); ret = (int)curColor.G; curBitmap.SetPixel(i, j, Color.FromArgb(ret, ret, ret)); 图 4.8 最大值法处理结果 伪彩色处理程序设计及实现 //以下是强度分层法和灰度级——彩色变换法共同需要处理的部分 pColor pc = new pColor();//将pColor.form里的属性赋给pc. if (pc.ShowDialog() == DialogResult.OK) { Rectangle rect = new Rectangle(0, 0, curBitmap.Width, curBitmap.Height);//生成矩形 System.Drawing.Imaging.BitmapData bmpData = curBitmap.LockBits(rect,System.Drawing.Imaging.ImageLockMode.ReadWrite, curBitmap.PixelFormat); //锁定系统内存中的位图像素 (责任编辑:qin) |