日期:2014-05-17  浏览次数:21170 次

C#中值滤波算法的问题
这两天想整一下验证码图片的识别,了解到中值滤波算法对消除噪点特别有用,于是学习了一下中值滤波的算法,搞出来个中值滤波的方法,但是实际效果很不理想,不知道是代码的问题还是什么其他问题,期待高手指教!
代码如下:

public Bitmap Medianfilter(Bitmap bitmap,Int32 Radius)
{
    Bitmap tarBitmap = new Bitmap(bitmap.Width, bitmap.Height);
    for (Int32 x = 0; x < bitmap.Width; x++)
        for (Int32 y = 0; y < bitmap.Height; y++)
        {
            Int32 left = x - Radius > 0 ? x - Radius : 0;
            Int32 top = y - Radius > 0 ? y - Radius : 0;
            Int32 right = x + Radius > bitmap.Width ? bitmap.Width : x + Radius;
            Int32 bottom = y + Radius > bitmap.Height ? bitmap.Height : y + Radius;
            List<Int32> listColor = new List<int>();

            for(Int32 i = left; i < right; i ++)
                for (Int32 j = top; j < bottom; j++)
                {
                    if (!listColor.Contains(bitmap.GetPixel(i, j).R)) listColor.Add(bitmap.GetPixel(i, j).R);
                }

            listColor.Sort();
            Int32 intMedian;
            if (listColor.Count == 0) continue;
            if (listColor.Count % 2 == 0)
                intMedian = (listColor[listColor.Count / 2] + listColor[listColor.Count / 2 - 1]) / 2;
            else
                intMedian = listColor[(listColor.Count - 1) / 2];
            tarBitmap.SetPixel(x, y, Color.FromArgb(intMedian, intMedian, intMedian));
        }
    return tarBitmap;
}

我不知道怎么贴图片,验证码图片可以用注册163邮箱时的图片,是汉字。