阈值
int COCRCls::GetTwoValueT(byte *image,int width,int height) { int Hdata[256]; memset(Hdata,0,256*sizeof(int)); int minPixel=255; int maxPixel=0; int T=0; int TT=0; for (int i=0;i<height;i++) { for (int j=0;j<width;j++) { Hdata[image[i*width+j]]++; if (minPixel>image[i*width+j]) { minPixel=image[i*width+j]; } if (maxPixel<image[i*width+j]) { maxPixel=image[i*width+j]; } } } long IP1,IP2,SP1,SP2; int MeanG1=0; int MeanG2=0; double w0,w1; double G,tmpG; G=0; tmpG=0; for (int i=minPixel;i<=maxPixel;i++) { T=i; IP1=0; IP2=0; SP1=0; SP2=0; for (int j=minPixel;j<=T;j++) { IP1+=Hdata[j]*j; SP1+=Hdata[j]; } if (SP1!=0) { MeanG1=IP1/SP1; } else { MeanG1=0; } w0=(double)SP1/(double)(width*height); for (int j=T+1;j<=maxPixel;j++) { IP2+=Hdata[j]*j; SP2+=Hdata[j]; } if (SP2!=0) { MeanG2=IP2/SP2; } else { MeanG2=0; } w1=1-w0; G=(double)((w0*w1)*(MeanG1-MeanG2)*(MeanG1-MeanG2)); if (G>tmpG) { tmpG=G; TT=T; } } return TT; } //二值化 void COCRCls::TwoValue(byte *imagedata,int width,int height,int T) { for(int i=0;i<height;i++) { for (int j=0;j<width;j++) { int tmp=imagedata[i*width+j]; imagedata[i*width+j]=tmp>T?0:255; } } }
posted on 2014-06-30 20:53 vincent_SK 阅读(186) 评论(0) 编辑 收藏 举报