最大类间方差法(大津法OTSU)
来源:互联网 发布:华为网络盒子怎么样 编辑:程序博客网 时间:2024/04/28 14:50
算法介绍
最大类间方差法是1979年由日本学者大津提出的,是一种自适应阈值确定的方法,又叫大津法,简称OTSU,是一种基于全局的二值化算法,它是根据图像的灰度特性,将图像分为前景和背景两个部分。当取最佳阈值时,两部分之间的差别应该是最大的,在OTSU算法中所采用的衡量差别的标准就是较为常见的最大类间方差。前景和背景之间的类间方差如果越大,就说明构成图像的两个部分之间的差别越大,当部分目标被错分为背景或部分背景被错分为目标,都会导致两部分差别变小,当所取阈值的分割使类间方差最大时就意味着错分概率最小[1]。
记T为前景与背景的分割阈值,前景点数占图像比例为
联立上面两式可得:
或
当方差
代码实现
(C语言版,VS2012+opencv249)
#include "stdio.h"#include "cv.h"#include "highgui.h"#include "Math.h"int Otsu(IplImage* src);int main(){ IplImage* img = cvLoadImage("lena.jpg",0); //获取灰度图像img IplImage* dst = cvCreateImage(cvGetSize(img), 8, 1); int threshold = Otsu(img); //调用大津法求出最佳阈值 printf("otsu threshold = %d\n", threshold); cvThreshold(img, dst, threshold, 255, CV_THRESH_BINARY); //用otsu的阈值二值化 cvNamedWindow( "img", 1 ); cvNamedWindow( "dst", 1 ); cvShowImage("img", img); cvShowImage("dst", dst); cvWaitKey(-1); cvReleaseImage(&img); cvReleaseImage(&dst); cvDestroyWindow( "img" ); cvDestroyWindow( "dst" ); return 0;}int Otsu(IplImage* src) { int height=src->height; int width=src->width; //histogram float histogram[256] = {0}; for(int i=0; i < height; i++) { unsigned char* p=(unsigned char*)src->imageData + src->widthStep * i; for(int j = 0; j < width; j++) { histogram[*p++]++; } } //normalize histogram & average pixel value int size = height * width; float u =0; for(int i = 0; i < 256; i++) { histogram[i] = histogram[i] / size; u += i * histogram[i]; //整幅图像的平均灰度 } int threshold; float maxVariance=0; float w0 = 0, avgValue = 0; for(int i = 0; i < 256; i++) { w0 += histogram[i]; //假设当前灰度i为阈值, 0~i 灰度像素所占整幅图像的比例即前景比例 avgValue += i * histogram[i]; //avgValue/w0 = u0 float t = avgValue/w0 - u; //t=u0-u float variance = t * t * w0 /(1 - w0); if(variance > maxVariance) { maxVariance = variance; threshold = i; } } return threshold; }
代码运行结果:
代码下载:http://download.csdn.net/detail/u011285477/9584189
博客链接:http://blog.csdn.net/u011285477/article/details/52004513
参考资料:
[1]Otsu N. A threshold selection method from gray-level histograms[J]. Automatica, 1975, 11(285-296): 23-27.
1 0
- 最大类间方差法(大津法,OTSU)
- 最大类间方差法(大津法OTSU)
- 最大类间方差法(大津法,OTSU)
- 最大类间方差法(大津法,OTSU)
- 最大类间方差法(大津法OTSU)
- 最大类间方差法(大津法OTSU)
- 最大类间方差法(大津法OTSU)
- 最大类间方差法(OTSU)
- 最大类间方差法(OTSU)
- 最大类间方差法(OTSU)
- 最大类间方差法(OTSU)
- 最大类间方差法(OTSU)
- Otsu最大类间方差法
- 最大类间方差法----Otsu
- opencv 最大类间方差(大津法OTSU)
- opencv 最大类间方差(大津法OTSU)
- 最大类间方差法(otsu)的原理
- OTSU最大类间方差法(求自适应阈值)
- SDUT 2136 数据结构实验之二叉树的建立与遍历
- android studio中如何导入github项目
- HPU 4883 TIANKENG’s restaurant
- android studio Dagger2的使用(环境搭建和helloword)
- 1.Two Sum
- 最大类间方差法(大津法OTSU)
- 什么是 Java 中的内部类
- bzoj2683 简单题
- eclipse debug JDK中源代码时出现 missing line number
- UVA10305Ordering Tasks
- 杭电5640之King's Cake
- wifi的扫描调用过程(从supplicant到kernel)
- [热修复]--源码级分析以及项目实践
- HDOJ 5363 Key Set