首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

C#中值滤波算法的有关问题

2013-06-19 
C#中值滤波算法的问题这两天想整一下验证码图片的识别,了解到中值滤波算法对消除噪点特别有用,于是学习了

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邮箱时的图片,是汉字。


[解决办法]
代码问题,你使用tarBitmap.SetPixel后就改变了tarBitmap某个位置的像素值,然后你在下一个循环中GetPixel时获取这个位置的值就是这个改变后的值,这和算法愿意冲突。

[解决办法]
既然算法本身是对的,那就表明用这个算法对付不了你要对付的目标。

加噪永远比除噪容易,既然有除噪算法,别人针对着进行更强的加噪也就很正常了。

话说,现在有些验证码图片人都难看懂,别说傻乎乎的CPU了。

热点排行