OTSU算法也称最大类间差法,有时也称之为大津算法。它是按图像的灰度特性,将图像分成背景和前景两部分。背景和前景之间的类间方差越大,说明构成图像的两部分的差别越大,当部分前景错分为背景或部分背景错分为前景都会导致两部分差别变小。因此,使类间方差最大的分割意味着错分概率最小。
设灰度图像灰度级是L,则灰度范围为[0,L-1],
OTSU算法计算图像的最佳阈值为:
t = Max[w0(t) * (u0(t) - u)^2 + w1(t) * (u1(t) - u)^2)]其中分割的阈值为t时,w0为背景比例,u0为背景均值,w1为前景比例,u1为前景均值,u为整幅图像的均值,u=w0*u0+w1*u1
由于上式计算量较大,于是可以等价于t=w1*w2(u1-u2)^2
以下一种是自己写的实现过程,一种通过调用opencv中 CV_THRESH_OTSU,对于复杂图片,两者在最佳阈值上不是很接近,有待改进。
代码如下:
// 1.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include"opencv243.h"
#include"stdlib.h"
using namespace std;
using namespace cv;
int piexlSum;//全部像素点
int thresh;
float w1,u1,w2,u2,g,gmax;//分别表示背景色所占比例和平均灰度,前景色所占比例和平均灰度
int _tmain(int argc, _TCHAR* argv[])
{
vector<int> hi