去噪:用于验证码图片识别的类续(C#代码) 自从发表了用于验证码图片识别的类(C#代码)后,不断有网友下载这个类后,问如何用于一些特定的验证码
总结一下网友们的提问,很多都是不会从复杂背景中提到干净的字符图片来,这主要就是一个去噪问题,即除去图片上的背景、干扰点、干扰线等信息
这当中要用到很多图像学数学算法,首先声明,本人不是学图像学的,以下方法理论说得不对,敬请多批评指正
1、如何设前景/背景的分界值 UnCodebase 类中有一个GetPicValidByValue( int dgGrayValue) 函数,可以得到前景的有效区域,常有人问我前景/背景的分界值 dgGrayValue 是如何确定的(常用的是灰度 128)
这个值的获取是有数学算法,叫最大类间方差法,即图像的前后景的平方差为最大时的值就是我们关心的分界值,对付如 这样较复杂的背景非常管用,下面是具体的C#代码
/// /// 得到灰度图像前景背景的临界值 最大类间方差法,yuanbao,2007
08 /// /// 前景背景的临界值 public int GetDgGrayValue() { int[] pixelNum = new int[256]; //图象直方图,共 256 个点 int n, n1, n2; int total; //total 为总和,累计值 double m1, m2, sum, csum, fmax, sb; //sb 为类间方差,fmax 存储最大方差值 int k, t, q; int threshValue = 1; // 阈值 int step = 1; //生成直方图 for (int i =0; i < bmpobj
Width ; i++) { for (int j = 0; j < bmpobj
Height; j++) { //返回各个点的颜色,以