中值滤波核心代码 c#
时间: 2023-09-11 07:11:37 浏览: 41
中值滤波是数字图像处理中常用的一种平滑滤波技术,它可以有效地去除图像中的椒盐噪声。以下是C#实现的中值滤波核心代码示例:
```csharp
public static Bitmap MedianFilter(Bitmap bmp, int size)
{
Bitmap result = new Bitmap(bmp.Width, bmp.Height);
int radius = size / 2;
Color[] pixels = new Color[size * size];
for (int i = radius; i < bmp.Width - radius; i++)
{
for (int j = radius; j < bmp.Height - radius; j++)
{
int index = 0;
for (int x = i - radius; x <= i + radius; x++)
{
for (int y = j - radius; y <= j + radius; y++)
{
pixels[index++] = bmp.GetPixel(x, y);
}
}
Array.Sort(pixels);
result.SetPixel(i, j, pixels[size / 2]);
}
}
return result;
}
```
该方法接收一个Bitmap对象和一个整数size作为参数,size表示中值滤波的窗口大小,一般为奇数。在方法中,定义了一个新的Bitmap对象result作为结果返回。然后,通过遍历源图像的像素点,取出以当前像素点为中心的一个size×size的窗口中的所有像素点,把这些像素点的颜色值存储到一个数组中,通过对这个数组进行排序,取出中间值作为新图像中当前像素点的颜色值,最后把这个颜色值设置到result对象的相应位置上。最后返回result对象即可。
需要注意的是,在处理边缘像素点时,由于窗口会超出图像的边界,因此需要对边缘像素点进行特殊处理,这里没有进行详细展示。