最大类间方差法.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
最大类间方差法是由日本,,,,者大津于1979年提出的,是一种自适应的阈值确定的方法,又叫大津 法,简称OTSU。它是按图像的灰度特性,将图像分成背景和目标2部分。背景和目标之间的类间方差 越大,说明构成图像的2部分的差别越大,当部分目标错分为背景或部分背景错分为目标都会导致2部 分差别变,,,,。因此,使类间方差最大的分割意味着错分概率最,,,,。 对于图像I(x,y),前景(即目标)和背景的分割阈值记作T,属于前景的像素点数占整幅图像的比 例记为ω0,其平均灰度μ0;背景像素点数占整幅图像的比例为ω1,其平均灰度为μ1。图像的总平均 灰度记为μ,类间方差记为g。 假设图像的背景较暗,并且图像的大,,,,为M×N, 图像中像素的灰度值,,,,于阈值T的像素个数记作N0,像素灰度大于阈值T的像素个数记作N1,则有:       ω0=N0/ M×N (1)       ω1=N1/ M×N (2)       N0+N1=M×N (3)       ω0+ω1=1 (4)       μ=ω0*μ0+ω1*μ1 (5)       g=ω0(μ0-μ)^2+ω1(μ1-μ)^2 (6) 将式(5)代入式(6),得到等价公式: g=ω0ω1(μ0-μ1)^2 (7) 采用遍历的方法得到使类间方差最大的阈值T,即为所求。 Otsu算法步骤如下: 设图象包含L个灰度级(0,1…,L-1),灰度值为i的的象素点数为Ni ,图象总的象素点数为N=N0+N1+...+N(L-1)。灰度值为i的点的概为: P(i) = N(i)/N. 门限t将整幅图象分为暗区c1和亮区c2两类,则类间方差σ是t的函数: σ=a1*a2(u1-u2)^2 (2) 式中,aj 为类cj的面积与图象总面积之比,a1 = sum(P(i)) i-t, a2 = 1-a1; uj为类cj的均值,u1 = sum(i*P(i))/a1 0-t, u2 = sum(i*P(i))/a2, t+1-L-1 该法选择最佳门限t^ 使类间方差最大,即:令Δu=u1-u2,σb = max{a1(t)*a2(t)Δu^2} OTSU方法计算图像二值化的自适应阈值 int otsu (unsigned char *image, int rows, int cols, int x0, int y0, int dx, int dy, int vvv) { unsigned char *np; // 图像指针 int thresholdValue=1; // 阈值 int ihist[256]; // 图像直方图,256个点 int i, j, k; // various counters int n, n1, n2, gmin, gmax; double m1, m2, sum, csum, fmax, sb; // 对直方图置零... memset(ihist, 0, sizeof(ihist)); gmin=255; gmax=0; // 生成直方图 for (i = y0 + 1; i y0 + dy - 1; i++) { np = image[i*cols+x0+1]; for (j = x0 + 1; j x0 + dx - 1; j++) { ihist[*np]++; if(*np gmax) gmax=*np; if(*np gmin) gmin=*np; np++; } } // set up everything sum = csum = 0.0; n = 0; for (k = 0; k = 255; k++) { sum += (double) k * (double) ihist[k]; n += ihist[k]; } if (!n) { // if n has no value, there is problems... fprintf (stderr, NOT NORMAL thresholdValue = 160\n); return (160); } // do the otsu global thresholding method fmax = -1.0; n1 = 0; for (k = 0; k 255; k++) { n1 += ihist[k]; if (!n1) { continue; } n2 = n - n1; if (n2 == 0) { break; } csum += (double) k *ihist[k]; m1 = csum / n1; m2 = (sum - csum) / n2; sb = (double) n1 *(double) n2 *(m1 - m2) * (m1 -

文档评论(0)

dd545454 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档