中文网上大津法的介绍很多,但是大多数给出的代码不是最优的而且存在分母为零的问题。

基本概念

大津法(简称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& image, const uint graylevel = 256)
{CV_Assert(image.type() == CV_8UC1);//computer Histogramstd::vector<long> histogram(graylevel, 0);for (int i = 0; i < image.rows; i++){const uchar * p = image.ptr<uchar>(i);for (int j = 0; j < image.cols; j++)histogram[int(*p++)]++; }long pixelsum = 0;uint gray = 0;for (gray = 0; gray < graylevel; gray++)pixelsum += gray * histogram[gray];long pixelnum = image.cols * image.rows;//compute a weighted sum of variances of two classeslong w0 = 0, w1 = 0;double maxDelta = 0, tempDelta = 0, sum0 = 0, mu0 = 0, mu1 = 0;int  threshold = 0;for (gray = 0; gray < graylevel; gray++){w0 += histogram[gray];w1 = pixelnum - w0;sum0 += gray * histogram[gray];if (w0 == 0 || w1 == 0)continue;mu0 = sum0 / w0;mu1 = (pixelsum - sum0) / w1;tempDelta = w0 * w1 * (mu0 - mu1) * (mu0 - mu1);if (tempDelta >= maxDelta){maxDelta = tempDelta;threshold = gray;}}return threshold;
}int main()
{Mat img = imread("../../ImageData/coins.png");Mat src;cvtColor(img, src, CV_BGR2GRAY);cout << "The return value of MyOstu is: " << MyOtsu(src) << endl;//call the Otsu method of OpenCVMat dst;cout << "The return value of OpenCV threshold is: " << threshold(src, dst, 0, 255, CV_THRESH_OTSU) << endl;imshow("Threshold Segment", dst);waitKey();return 0;}

运行结果


图像分割之大津法Otsu相关推荐

  1. otsu阈值分割算法原理_大津法---OTSU算法

    简介: 大津法(OTSU)是一种确定图像二值化分割阈值的算法,由日本学者大津于1979年提出.从大津法的原理上来讲,该方法又称作最大类间方差法,因为按照大津法求得的阈值进行图像二值化分割后,前景与背景 ...

  2. 【机器视觉学习笔记】大津法/Otsu最大类间方差法 最佳阈值处理(C++)

    目录 概念 C++源码 OtsuThreshold 主函数 效果 完整源码 平台:Windows 10 20H2 Visual Studio 2015 OpenCV 4.5.3 本文所用源码修改自C+ ...

  3. 【智能车】图像二值化算法--大津法OTSU

    图像二值化算法–大津法OTSU 大津算法是一种图像二值化算法,作用是确定将图像分成黑白两个部分的阈值. 大津法是针对灰度值进行阈值分割二值化,如果是彩色图像的话需要先转化成灰度图再进行计算. 方差越大 ...

  4. 图像分割——大津法(Otsu)

    大津法又叫最大类间方差法,是于1979年由日本学者大津展之提出的一种对图像进行二值化的高效算法,是在判别与最小二乘法原理的基础上推导出来的. 算法原理 把直方图在某一阈值处分割为两组,当前分成的两组间 ...

  5. 【图像处理】——图像的二值化操作及阈值化操作(固定阈值法(全局阈值法——大津法OTSU和三角法TRIANGLE)和自适应阈值法(局部阈值法——均值和高斯法))

    目录 一.二值化的概念(实际上就是一个阈值化操作) 1.概念: 2.实现方法 3.常用方法 二.阈值类型 1.常见阈值类型(主要有五种类型) (1)公式描述 (2)图表描述 2.两种特殊的阈值算法(O ...

  6. 算法001:大津法OTSU学习记录

    OTSU算法 一.大津法主要的工作是什么? 大多数时候,我们需要获取到一幅图像中的特定目标.如果可以根据像素值将图像进行合理的分割,例如全局阈值分割那样,找到一个阈值TTT,大于阈值TTT的赋予一个像 ...

  7. 最大类间方差法(大津法OTSU)原理

    算法介绍 最大类间方差法是1979年由日本学者大津提出的,是一种自适应阈值确定的方法,又叫大津法,简称OTSU,是一种基于全局的二值化算法,它是根据图像的灰度特性,将图像分为前景和背景两个部分.当取最 ...

  8. K210 / Openmv实现 大津法/Otsu最大类间方差法 自适应二值化

    目录 源码 效果 平台:K210 固件版本:maixpy_v0.6.2_54_g897214100_openmv_kmodel_v4_with_ide_support.bin OpenMv库自带Ots ...

  9. CUDA精进之路(五):图像处理——OTSU二值算法(最大类间方差法、大津法)

    引言 最近在做医疗设备相关的项目,故在项目中大量用到了各类图像分割的算法,为了在图像中分割出特定目标,用到的算法可以有很多,比如阈值分割,多通道分割,边缘分割以及一些前沿的组合分割.而对大多数图像来说 ...

最新文章

  1. 使用ImageMagick 的提示与技巧
  2. android 随机布尔值,在 Android 的某些机型,v1.2.2 v1.2.1 加密会导致 boolean 类型的值丢失的问题...
  3. php获取表单内的值,PHP获取表单里各项值总结
  4. Lua学习笔记5:类及继承的实现
  5. HttpClient上传下载文件
  6. Maven项目main和test文件夹说明
  7. struts2中,在使用 convention 插件的情况下,如何使用 “chain” 这个resu
  8. c++核心编程第一部分讲义_java并发编程实战-第一部分总结
  9. 如何快速进入/打开cmd--快捷键
  10. C#实现Omron欧姆龙PLC的Fins Tcp协议[转]
  11. 动态规划-最短路径问题
  12. English in December
  13. implicit super constructor animal() is undefined for default constructor. Must define an explicit 异常
  14. 读书笔记-人品惠及一世
  15. Python网络爬虫:爬取CSDN热搜数据 并保存到本地文件中
  16. 虚拟主机、VPS、云服务器三者的区别
  17. 编译原理——非确定有限自动机(三)
  18. 【安卓Handler】Handler消息机制
  19. 「SDOI 2008」山贼集团
  20. Unity帧率的计算和显示

热门文章

  1. 区块链必修课:技术篇
  2. redis 统计数量_Redis 查看统计信息
  3. 捷报!课工场代表队喜获第八届中国软件杯二等奖
  4. Ubuntu 16.04 LTS (Xenial Xerus)
  5. “阿里通信云对讲 从此沟通无难事”渠道分销合作伙伴大会盛大召开
  6. Internet explorer 11浏览器找回(仅win10)
  7. Elasticsearch 2.1 安装
  8. 生物信息学习——cufflinks
  9. WordPress查看上次用户何时登录插件When Last Login
  10. AI视觉分析技术在智慧水利中的应用