图像二值化判断分析法.pptx
图像二值化判断分析法
用一个阈值T将图像分为两组C1,C2
01算法的关键是判断阈值阈值是组间方差与组内方差之比最大对应的T组间方差为020304C1像素数*(C1灰度平均值-灰度均值)+C2像素数*(C2灰度平均值-灰度均值)组内方差:C1像素数*C1方差+C2像素数*C2方差0506
灰度均值(C1像素数*C1均值+C2像素数*C2均值)/(总像素数)
inti=0,j=0; bmpFile.Load4File(E:\\ZZLB.bmp); CBmpFilebmp; bmp.CreateBmp(bmpFile.m_Cols,bmpFile.m_Rows,bmpFile.m_PxlBytes); ints[256],num;bmpFile.GLHistoGraph(s); doublemax=0;for(i=1;i256;i++) { intw1=0,w2=0;//像素数 ints1=0,s2=0;//灰度和 doublem1=0,m2=0,d1=0,d2=0,m=0;//灰度平均值和方差,灰度均值 doubledw=0,db=0;
voidCBmpFile::GLHistoGraph(int*s) { for(intj=0;j256;j++) { s[j]=0; } inta; for(inti=0;im_Rows*m_Cols;i++) { a=(int)m_pImgDat[i]; s[a]++; }
for(j=0;ji;j++)01{02s1+=j*s[j];03w1+=s[j];04}05for(j=i;j256;j++)06{07s2+=j*s[j];08w2+=s[j];09}10
if(w1) m1=1.0*s1/w1; if(w2)m2=1.0*s2/w2; for(j=0;ji;j++) { d1+=(m1-s[j])*(m1-s[j]); } d1=d1/w1; for(j=i;j256;j++) { d2+=(m2-s[j])*(m2-s[j]); } d2=d2/w2; m=1.0*(m1*w1+m2*w2)/(w1+w2); dw=1.0*w1*d1+w2*d2; db=1.0*w1*(m1-m)*(m1-m)+w2*(m2-m)*(m2-m);
if(db/dwmax) { max=db/dw; num=i; } } intk; intcols=bmpFile.m_Cols; introws=bmpFile.m_Rows; for(i=0;irows;++i) { for(j=0;jcols;++j) { k=bmpFile.m_pImgDat[i*cols+j]; if(knum) bmp.m_pImgDat[i*cols+j]=0; elsebmp.m_pImgDat[i*cols+j]=255; }