数字图像处理之图像滤波
最编程
2024-02-09 15:50:37
...
滤波的原理,将空间域模板用于图像处理,通常称为空间滤波。空间滤波可分为线性平滑滤波(邻域平均法)和非线性平滑滤波(中值滤波法)两种。邻域平均法的基本原理是用于当前图像像素点(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);
}
}