图像二值化 判断分析法
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
• • • • • • • • • • • • • • • • • • • • •
if(db/dw>max) { max=db/dw; num=i; } } int k; int cols=bmpFile.m_Cols; int rows=bmpFile.m_Rows; for (i = 0; i < rows; ++i) { for (j= 0; j < cols; ++j) { k = bmpFile.m_pImgDat[i*cols+j]; if (k < num) bmp.m_pImgDat[i*cols+j] = 0; else bmp.m_pImgDat[i*cols+j] = 255; }
• • • • • • • • • • •
for(j=i;j<256;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);
•
• void CBmpFile::GLHistoGraph(int* s) • { • for(int j=0;j<256;j++) • { • s[j]=0; • } • int a; • • • • • • • for(int i=0;i<m_Rows*m_Cols;i++) { a=(int)m_pImgDat[i]; s[a]++; }
• 灰度均值 • (C1像素数*C1均值+ C2像素数*C2均值)/(总像 素数)
Biblioteka Baidu
• • • • • • • • • • • •
int i=0,j=0; bmpFile.Load4File("E:\\ZZLB.bmp"); CBmpFile bmp; bmp.CreateBmp(bmpFile.m_Cols,bmpFile.m_Row s,bmpFile.m_PxlBytes); int s[256],num; bmpFile.GLHistoGraph(s); double max=0; for(i=1;i<256;i++) { int w1=0,w2=0;//像素数 int s1=0,s2=0;//灰度和 double m1=0,m2=0,d1=0,d2=0,m=0;//灰度 平均值和方差,灰度均值 double dw=0,db=0;
图像二值化 判断分析法
• 用一个阈值T将图像分为两组C1,C2
• • • •
算法的关键是判断阈值 阈值是组间方差与组内方差之比最大对应的T 组间方差为 C1像素数*(C1灰度平均值-灰度均值)+C2像素 数*(C2灰度平均值-灰度均值) • 组内方差: • C1像素数*C1方差+ C2像素数*C2方差
• • • • • • • • • • •
for(j=0;j<i;j++) { s1+=j*s[j]; w1+=s[j]; } for(j=i;j<256;j++) { s2+=j*s[j]; w2+=s[j]; }
• • • • • • • •
if(w1) m1=1.0*s1/w1; if(w2) m2=1.0*s2/w2; for(j=0;j<i;j++) { d1+=(m1-s[j])*(m1-s[j]); } d1=d1/w1;