C# 图像二值化

所需积分/C币:50 2018-01-04 15:44:36 543KB PDF
收藏 收藏
举报

本文档是有关C# 数字图像二值化,有多种模式,有简单有复杂的。值得收藏。
注意在编码过程屮,平滑的处理需要当前像素辶前的信息,因此需要对平滑前的数据进行一个备份。另夕,首数据类 型精度限制,应片整形的直方图数据,必须转换为浮点类型数据来进行处理,灲得个到止桷的结果 该算法相关参考论文如下 J M. S. Prewitt and M. L. Mendeschn, The analysis of cell images, innnals of the New York Acadeny of Sciences, ol.128,pp.1035-1053,1966 C. A. Glast: ey,An analysis of hislngrain-bised t h resholding a I gor it. hms, CVGIP: Graphic a. I Mode ls and Tmage Processing, vcl. 55, pp. 532-537, 1993. 3、实现代吗 public static int GetMinimumThreshold (int[] HistGram int y. iter =0 double[ histGramC- new double[ 256 基于精度问 题,一定要用浮点数来处理,否则得不到正确的结果 double[] HistGranCC new double [2561 /求均值的过 程会破坏前面的数据,因此需要两份数据 for(Y=0;Y<256;Y++) HistGramCLY= HistGramLY HislGramCC[Y]=HistGram[Y] //通过三点求均值来平滑直方图 while (IsDimodal(HistGramCC)== false) /判断是否己经是双峰的图像了 HistGramCC[O]=(Hist GramC[0]+ HistGramC[O]+ HistGramC[1]) /3 //第一点 for(Y=1;Y<255;Y++) HistGramCC[Y]=(HistGramCLY-1+ HistGramCLY+ HistgramCLY+1)/3;/中间的点 HistGramCC[255]=(HistGramC[254+ HistGramC[255]+ HislGramC[2551)/3 //最后一点 System Buffer. BlockCopy(histGramCC, 0, HistGramC, 0, 256 c sizeof(double)) Iter++ f(Iter >=1000)return-1 /直方图无法平滑为双峰的,返回错误代码 /′阈值极为两峰之间的最小值 bool peakfound- false for(Y=1;Y<255;Y+) if(HislGramCCIY-1< HistGramCcY] & HisiGramCC[Y+1 HistGramCCLY)Peakfound =true f( Peakfound = true & HistGramCCLY-1>=HistGramCCLY] & HistGramCCLY +1]>-HistGramCCLY1) returny-1 return -1 其中 IsDimodal函数为判断直方图是否是双峰的函数,代码如下: private static bool IsDimodal(double[] HistGram) //检测直方 图是否为双峰的 //对直方图的峰进行计数,只有峰数位2才为双峰 int Count =0 for (int Y=1: Y< 255: Y++) f(HistGram[- 1< HistGram[y]&& HistGram[Y +1( HistGramLYD) Count++ if (Count >2)return false if (Count ==2) return true else return false 4、效果 原 值 原始直方图 平滑后的直方图 对于这种有较明显的双峰的图像,该算法还是能取得不错的效果的。 四、基于双峰平均值的阈值 1、描述: 该算法和基于谷底最小值的阈值方法类似,只是最后一步不是珓得双蜂之间的谷底值,而是取双峰的平均值作为阈值 2、参考代码 public static int GetIntermodes Threshold(int[] HistG int Y, Iter=0, Index double[ histGranC= new double[ 2561 //基于精度问 题,一定要用浮点数来处理,否则得不到正确的结果 doublel] histGramCC new double[256] //求均值的过 程会破坏前面的数据,因此需要两份数据 for(Y=0;Y<256;Y HistGramCLY= HistGramLY HistGramCC[Y]= HistGramLY] //通过三点求均值来平滑直方图 while (IsDimodal(HistGramCC)== false //判断是否已经是双峰的图像了 HistGramCC[0]=(HistGramC[0]+ HistGramC[O]+ HistGramC[1]) /3 /第一点 for(Y=1;Y<255;Y++) HistGramCCLY-(HistGramCLY-1+ HistgramCLY]+ HistGramCLY +11)/3 //中间的点 HistGramCC[255]=(HistGramC[251]+ HistGramC[255 HistGramCL255」)/3 //最后一点 System Buffer. BlockCopy(HistGramCC, 0, HistGramC,0,256* sizeof (double)) //备份数据,为下一次迭代做准备 ter (Iter>=10000 /似乎直方图无法平滑为双峰的,返回错误代码 //阈值为两峰值的平均值 nt[ peak= new int[2 for(Y=1, Index=0:Y< 255:Y f(HistGramCClY-1]< Histgramccly] & HistGramCCLY HistGramCCLY]) Peak [Index++]=Y-1 return(Peak[0 Peak[1])/2 3、效果: 原 图 图 原始直方图 平滑后的直方图 五、迭代最佳阈值 描 该算法先假定一个阈值,然后计算在该翊值下的前景和背景的中心值,当前景和背景中心值得平均值和假定的阈值相 同时,则迭代中止,并以此值为阈值进行二值化。 2、实现过程: 1)求出图象的最大灰度值和最小灰度值,分别记为g和g2,令初始阀值为 g,tgI (2)根据阈值1将图象分割为前景和背景,分别求出两者的平均灰度值A3和A 4=∑g×h(g)/∑g 5=87 8=8H ∑8×h(g)∑g×从g) g g (3)令 E4+ 如T=T,则取T为所求得的阙值,否则,转2继续迭代 3、参考代吗 public static int GetIterativeBest Threshold(int [] HistGram) int x. lter =0 int MeanValueOne, MeanValue two, SumOne, SumTwo, SumIntegralone SumIntegraltwo int Minvalue, MaxValue int Threshold. New Threshold for MinValue=0: MinValue< 256 & HistGram LMinValue--0 Minvalue++) for (Max Value=255: Max Value MinValue & HistGram [ Min' alue if MaxValue == MinValue) return Maxvalue //图像中 只有一个颜色 f Minvalue +1== MaxValue) return MinValue //图像中 只有二个颜色 Threshold minvalue NewThreshold =(MaxValue Minvalue)>>1 while( Threshold!= New Threshold)//当前后两次迭代的获得阈 值相同时,结束迭代 umOne =0: SumIntegra lone =0 SumTwo =0: SumIntegralTwo =0 Threshold= New Threshold for(X=MinValue: X<=Threshold; X++) //根据阈值 将图像分割成目标和背景两部分,求出两部分的平均灰度值 SumIntegralOne +=HistGram[X]* X SumOne + HistGram[X MeanValue One SumIntegralOne/SumOne for(x- Threshold+1; X<- MaxValue X++) Sumlntegraltwo + HistGram [X]*X Sumtwo+= HistgramlX」; Meanvaluetwo-SumIntegral Two/ Sum two NewThreshold=(MeanValueOne +MeanValueTwo)>>1 求出新的阈值 Iter++ if (Iter >=1000)return -1 return Threshold 4、效果

...展开详情
试读 25P C# 图像二值化
立即下载 低至0.43元/次 身份认证VIP会员低至7折
    抢沙发
    一个资源只可评论一次,评论内容不能少于5个字
    • 分享精英

      成功上传11个资源即可获取
    关注 私信 TA的资源
    上传资源赚积分,得勋章
    最新推荐
    C# 图像二值化 50积分/C币 立即下载
    1/25
    C# 图像二值化第1页
    C# 图像二值化第2页
    C# 图像二值化第3页
    C# 图像二值化第4页
    C# 图像二值化第5页
    C# 图像二值化第6页
    C# 图像二值化第7页
    C# 图像二值化第8页

    试读已结束,剩余17页未读...

    50积分/C币 立即下载 >