欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

数字图像处理之图像滤波

最编程 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);
                }
            }