滤波的原理,将空间域模板用于图像处理,通常称为空间滤波。空间滤波可分为线性平滑滤波(邻域平均法)和非线性平滑滤波(中值滤波法)两种。邻域平均法的基本原理是用于当前图像像素点(x,y)邻域的几个像素颜色的平均值来代替其像素颜色值。g(x,y)=1/Nf(i,j),对每个点求和处理。中值滤波法是先选取当前像素点的邻域,但它是用这些邻域像素点颜色的中间值来代替当前素点颜色值。邻域平均法能比较有效的抑制噪声,但是也易引起图像模糊。中值滤波法特别适宜抑制孤立点类型的椒盐噪声,且可保护图像边缘。
//滤波 public static void Filter(Bitmap sourceBitmap) { if (sourceBitmap != null) { Color c = new Color(); int rr, gg, bb, r1, g1, b1, i, j, rx, gx, bx, k1, k2; for (i = 1; i < sourceBitmap.Width - 1; i++) { for (j = 1; j < sourceBitmap.Height - 1; j++) { rx = gx = bx = 0; for (k1 = -1; k1 <= 1; k1++) { for (k2 = -1; k2 <= 1; k2++) { if (i + k1 != 0 || i + k2 != 0) { c = sourceBitmap.GetPixel(i + k1, j + k2); r1 = c.R; g1 = c.G; b1 = c.B; rx += r1; gx += g1; bx += b1; } } } rr = (int)(rx / 8); gg = (int)(gx / 8); bb = (int)(bx / 8); if (rr > 255) rr = 255; if (gg > 255) gg = 255; if (bb > 255) bb = 255; Color cl = Color.FromArgb(rr, gg, bb); sourceBitmap.SetPixel(i, j, cl); } } } else { MessageBox.Show("无图形可处理", "提示", MessageBoxButtons.OK, MessageBoxIcon.Error); } }