中文网上大津法的介绍很多,但是大多数给出的代码不是最优的而且存在分母为零的问题。
基本概念
大津法(简称Otsu)由1979年由日本学者大津提出的,是一种自适应阈值确定的方法,相关文献链接。它是根据图像的灰度特性, 将图像分为前景和背景两个部分,当取最佳阈值时,二者之间的方差应该是最大的。论文精华如下。

论文中提到是基于Fisher线性判别(FLD)的,在Fisher线性判别式在类间方差(σB)和类内方差(σW)之间建立关系,其中,类间方差(σB)较大,而类内方差(σW)较小。如下图

所以使σB最大或 σW最小的灰度值k。使σB最大更好些,因为σW计算更复杂些。
示例演示
网上的实现代码都很相似,主要有两个问题:w作为分母,没有考虑w为零的情况;用了两层for循环,时间复杂度有点大。所以为了解决这些问题,自己实现了一遍,测试数据是经典图片coins。
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace std;
using namespace cv;
double MyOtsu(const Mat& ima

最低0.47元/天 解锁文章

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



