OTSU算法:对图像进行二值化的算法

介绍

OTSU算法是一种自适应的阈值确定的方法,又称大津阈值分割法,是最小二乘法意义下的最优分割。

它是按图像的灰度特性,将图像分成背景和前景两部分。因方差是灰度分布均匀性的一种度量,背景和前景之间的类间方差越大,说明构成图像的两部分的差别越大,当部分前景错分为背景或部分背景错分为前景都会导致两部分差别变小。因此,使类间方差最大的分割意味着错分概率最小。

从大津法的原理上来讲,该方法又称作最大类间方差法,因为按照大津法求得的阈值进行图像二值化分割后,前景与背景图像的类间方差最大。

应用:是求图像全局阈值的最佳方法,适用于大部分需要求图像全局阈值的场合。

优点:计算简单快速,不受图像亮度和对比度的影响。

缺点:对图像噪声敏感;只能针对单一目标分割;当目标和背景大小比例悬殊、类间方差函数可能呈现双峰或者多峰,这个时候效果不好。

原理

求类间方差:

OTSU算法的假设是存在阈值TH将图像所有像素分为两类C1(小于TH)和C2(大于TH),则这两类像素各自的均值就为m1、m2,图像全局均值为mG。同时像素被分为C1和C2类的概率分别为p1、p2。因此就有:

p1*m1+p2*m2=mG                                           (1)

p1+p2=1                                                      (2)

根据方差的概念,类间方差表达式为:

             (3)

我们把上式化简,将式(1)代入式(3),可得:

                                       (4)

其实求能使得上式最大化的灰度级 k 就是OTSU阈值了,很多博客也是这样做的。

其中:

                                                       (5)

                                        (6)

                                      (7)

照着公式,遍历0~255个灰度级,求出使式(4)最大的 k 就ok了。

(原文方法见博客:https://blog.csdn.net/weixin_40647819/article/details/90179953)

分割:

这个分割就是二值化,OpenCV给了以下几种方式,很简单,可以参考:

实现

# coding:utf-8
import cv2
from matplotlib import pyplot as pltimage = cv2.imread(r"C:\Users\Administrator\Desktop\picture.png")
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)plt.subplot(131), plt.imshow(image, "gray")
plt.title("source image"), plt.xticks([]), plt.yticks([])
plt.subplot(132), plt.hist(image.ravel(), 256)
plt.title("Histogram"), plt.xticks([]), plt.yticks([])
ret1, th1 = cv2.threshold(gray, 0, 255, cv2.THRESH_OTSU)  # 方法选择为THRESH_OTSU
plt.subplot(133), plt.imshow(th1, "gray")
plt.title("OTSU,threshold is " + str(ret1)), plt.xticks([]), plt.yticks([])
plt.show()

参考博客:https://blog.csdn.net/weixin_40647819/article/details/90179953

OTSU算法 (大津算法)理解代码相关推荐

  1. OTSU(大津算法)

    OTSU(大津算法) 确定图像二值化分割阈值 不受图像亮度和对比度的影响 用于图像分割过程中,自动计算出一个最佳全局阈值的算法 通过最大类间平方差的方法来区分图像前景及背景 缺点 对图像噪声敏感 只能 ...

  2. OTSU (大津算法)的MATLAB实现

    1.图像分割与阈值分割 1.1图像分割的概念 图像分割,顾名思义是对图像进行特定部分的分划与切割.图像分割,是图像处理里面比较重要的一个领域,对于后续的目标识别,图像分类有着重要的意义,是图像分析中直 ...

  3. Otsu大津算法公式推导及python实现

    目录 前言 一.类间平方差是什么? 二.公式推导及实现 1.求类间平方差 2.opencv-python编程实现 2.1 引入图像并灰度化 2.2 查看灰度值的分布情况 2.3 求全局平均阈值 2.4 ...

  4. 大津算法的matlab实现

    大津算法详解 一.算法功能 ​ 图像分割就是把图像分成若干个特定的.具有独特性质的区域并提出感兴趣目标的技术和过程.它是由图像处理到图像分析的关键步骤. ​ 大津算法也称最大类间差法,由大津于1979 ...

  5. otsu阈值分割算法_图像分割之大津算法(OTSU)

    关注公众号,获取更多信息 引言 最近一直在看图像二值化相关的东西,一直想寻找一个好的方法,能够自适应的设定阈值.这个过程中,发现了OTSU算法,其实这也算是基本的图像处理算法,之前有过接触,但是放过了 ...

  6. OTSU算法(也称最大类间差法,有时也称之为大津算法)

    在图像处理应用中二值化操作是一个很常用的处理方式,例如零器件图片的处理.文本图片和验证码图片中字符的提取.车牌识别中的字符分割,以及视频图像中的运动目标检测中的前景分割,等等. 较为常用的图像二值化方 ...

  7. opencv-qt大津算法(Otsu)

    opencv-qt大津算法(Otsu) 1 简介 2 算法原理 3 代码 4 局限性 5 参考 1 简介 Otsu算法,即大津算法,最大类间方差算法,由日本人大津展之提出.大津二值化法用来自动对基于聚 ...

  8. C#,图像二值化(06)——全局阈值的大津算法(OTSU Thresholding)及其源代码

    1.大津算法OTSU ALGORITHM OTSU算法效果很一般. 最大类间方差法是1979年由日本学者大津(Nobuyuki Otsu)提出的,是一种自适应阈值确定的方法,又叫大津法,简称OTSU, ...

  9. 大津算法(Nobuyuki Otsu method)

    时间:2020-12-02 目的:掌握图像分割的基础算法 1. 算法原理 图像分割,顾名思义将图像中的目标和背景进行区分.通常我们使用固定的阈值进行二值化,但是阈值如何迭代筛选.这个过程可不可以使用程 ...

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

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

最新文章

  1. 华为 Java 编程军规 !
  2. css字体更小 css比12px更小的方法
  3. 14.索引数组初始化
  4. 【ABAP】文本表查找
  5. 今晚直播 | 双边分支网络BBN:攻坚长尾分布的现实世界任务
  6. 模板:割点、桥与双连通
  7. html 为什么ul不撑开,给li设置float浮动属性之后,无法撑开外层ul的问题。
  8. 微软和Wistron再度联手,Android和Chrome OS又成鱼肉
  9. Ruby Web实时消息后台服务器推送技术---GoEasy
  10. eas软标签_商品防盗尤为重视,防盗软标签突显本质优势
  11. Facebook广告与Google广告有什么不同?
  12. android项目设计实验报告模板,Android实验报告模板_实验一.doc
  13. 炫龙dcpro黑苹果_毁灭者DC W650DC装黑苹果心得
  14. 颜色,色相环知识分享
  15. 免费领取40本前端学习书籍【高清电子版】
  16. 白盒测试-修正条件判定覆盖
  17. 3D CV 论文调研
  18. Spark Transformation转换算子和Action行动算子
  19. JAVA远程连接ssh异步,SSH-2实现java连接远程服务器并执行脚本命令
  20. 超融合架构与容器超融合

热门文章

  1. Robo3T连接远程mongodb
  2. 手机网速测试软件排行榜,手机测网速软件,几款测速软件推荐
  3. ImDisk(似收费的primo ramdisk)免费软件/内存作硬盘
  4. Ubuntu18.04的截图问题
  5. 黑马JAVA P108 语法知识:枚举、枚举作用
  6. 查看Linux服务器内存情况
  7. 凯恩帝数控系统面板介绍_KND凯恩帝数控系统说明书.doc
  8. Leetcode 75. 颜色分类
  9. [刘润五分钟商学院]-----工具类
  10. 【机器学习】判别模型vs生成模型、概率模型vs非概率模型