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> hist(256);
Mat img=imread("C:\\Users\\sony\\Desktop\\Airplane.jpg",0);
Mat dst1,dst2;
//得到直方图数据
for(auto it=img.begin<uchar>();it!=img.end<uchar>();++it)
hist[*it]+

本文介绍了OpenCV中用于图像二值化的Otsu算法,探讨了算法的基本原理,以及如何在实践中计算图像的最佳阈值。内容包括Otsu算法的数学表达式和简化公式,并提供了两种实现方式:一种是自定义实现,另一种是利用OpenCV库的CV_THRESH_OTSU标志。在处理复杂图像时,两种方法得到的最佳阈值可能存在差异,提示了进一步优化的必要性。
最低0.47元/天 解锁文章
296

被折叠的 条评论
为什么被折叠?



