自适应阈值分割(最大类间分割法 + OTSU)
1、定义
最大类间方差法是由日本学者大津(Nobuyuki Otsu)于1979年提出的,是一种自适应的阈值确定的方法,又叫大津法,简称OTSU。它是按图像的灰度特性,将图像分成背景和目标两部分,或者说,是寻找一个阈值为 TTT,将图像的颜色分为 1,2.....K和K+1.....2561,2.....K和K+1.....2561,2.....K和K+1.....256 两部分。
如何确定这个阈值 TTT?算法分类的原理是让背景和目标之间的类间方差最大,因为背景和目标之间的类间方差越大,说明构成图像的2部分的差别越大,错分的可能性越小。
2、公式推导
设图像包含 LLL 个灰度等级,灰度值为 iii 的像素点的个数为 NiN_iNi,像素点的总个数为:
N=N0+N1+...+NL−1N=N_0 + N_1 + ... + N_{L-1} N=N0+N1+...+NL−1
则灰度值为 iii 的像素点的概率为:
Pi=NiNP_i = \frac{N_i}{N} Pi=NNi
由期望公式可得,图像的灰度均值为:
uT=∑i=0L−1iPiu_T = \sum_{i=0}^{L-1}iP_i uT=i=0∑L−1iPi
按照图像的灰度特性,使用阈值 TTT 将图像分为目标 c0c_0c0 和背景 c1c_1c1 两类,则 w0(T)w_0(T)w0(T) 和 w1(T)w_1(T)w1(T) 分别表示阈值为 TTT 时,c0c_0c0 和 c1c_1c1 发生的概率,即:
w0(T)=∑i=0TPiw1(T)=1−w0(T)w_0(T) = \sum_{i=0}^{T}P_i\\ w_1(T) = 1 - w_0(T) w0(T)=i=0∑TPiw1(T)=1−w0(T)
c0c_0c0 和 c1c_1c1 的均值为:
u0(T)=∑i=0TiPiW0(T)u1(T)=uT−∑i=0TiPiw1(T)u_0(T) = \frac{\sum_{i=0}^{T}iP_i}{W_0(T)} \\ u_1(T) = \frac{u_T - \sum_{i=0}^{T}iP_i}{w_1(T)} u0(T)=W0(T)∑i=0TiPiu1(T)=w1(T)uT−∑i=0TiPi
σ2(T)σ^2(T)σ2(T) 表示直方图中阈值为 TTT 的类间方差,定义为:
σB2(T)=w0(T)[u0(T)−uT]2+w1(T)[u1(T)−uT]2σ^2_B(T) = w_0(T)[u_0(T) - u_T]^2 + w_1(T)[u_1(T) - u_T]^2 σB2(T)=w0(T)[u0(T)−uT]2+w1(T)[u1(T)−uT]2
最优阈值定义为类间方差最大时对应的T值,即:
σB2(T∗)=max0≤T≤L−1{σB2(T)}σ^2_B(T^*) = \max \limits_{0 \leq T \leq L-1}\{σ^2_B(T)\} σB2(T∗)=0≤T≤L−1max{σB2(T)}
3、代码实现
import cv2
import numpy as np
from matplotlib import pyplot as pltimage = cv2.imread(".\image\image1.png") # 读取图片
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) # 色彩空间转换函数plt.subplot(1,3,1)
plt.imshow(image, "gray")
plt.title("source image")
plt.xticks([]), plt.yticks([])plt.subplot(1,3,2)
plt.hist(image.ravel(), 256) # 绘制直方图
plt.title("Histogram")
plt.xticks([])
plt.yticks([])ret1, th1 = cv2.threshold(gray, 0, 255, cv2.THRESH_OTSU) #方法选择为THRESH_OTSU
print(f'使用 OTSU 方法得到的阈值为 : {ret1}')plt.subplot(1,3,3)
plt.imshow(th1, "gray")
plt.title("OTSU,threshold is " + str(ret1)), plt.xticks([]), plt.yticks([])
plt.show()
4、结果展示
自适应阈值分割(最大类间分割法 + OTSU)相关推荐
- 图像分割 - 阈值处理 - 最大类间方差法(OTSU)
目录 1. OTSU 介绍 2. 代码实现 1. OTSU 介绍 OTSU 大津法,也是最大类间方差算法 OTSU 算法的思想通过不同的阈值K,将图像的分为两个区域,一个是灰度值 0 <= k ...
- 基于OTSU最大类间方差法的ROI分割、提取图像中的形状特征--面积、周长、离心率、zernike矩
分享一下最近学习的图像分类方面知识,整体的思路如下(之前的汇报ppt里截的) 把这个过程拆分几个部分共同学习一下吧 1.Otsu法原理 最大类间方差法OTSU是一种自适应的全局阈值确定的方法,根据灰度 ...
- 数字图像处理实验(六)|图像分割{阈值分割、直方图法、OTUS最大类间方差法(edge、im2dw、imfilter、imresize)、迭代阈值法、点检测}(附matlab实验代码和截图)
文章目录 一.实验目的 二.实验原理 (一) 阈值分割 1. 直方图法 2.OTSU法(最大类间方差法)确定阈值 3. 迭代阈值法 4. 点检测 (二)边缘检测 三.实验内容 (一)阈值分割 1. 直 ...
- 【机器视觉学习笔记】大津法/Otsu最大类间方差法 最佳阈值处理(C++)
目录 概念 C++源码 OtsuThreshold 主函数 效果 完整源码 平台:Windows 10 20H2 Visual Studio 2015 OpenCV 4.5.3 本文所用源码修改自C+ ...
- OTSU算法(也称最大类间差法,有时也称之为大津算法)
在图像处理应用中二值化操作是一个很常用的处理方式,例如零器件图片的处理.文本图片和验证码图片中字符的提取.车牌识别中的字符分割,以及视频图像中的运动目标检测中的前景分割,等等. 较为常用的图像二值化方 ...
- 最大类间方差法(大津法OTSU)原理
算法介绍 最大类间方差法是1979年由日本学者大津提出的,是一种自适应阈值确定的方法,又叫大津法,简称OTSU,是一种基于全局的二值化算法,它是根据图像的灰度特性,将图像分为前景和背景两个部分.当取最 ...
- Ostu最大类间方差法的C++实现
一.Ostu的原理 最大类间方差法是由日本学者大津(Nobuyuki Ostu)在1979年提出的,该方法根据计算公式自动计算分割单域值,是一种根据灰度图像自动计算阈值的方法.它按照灰度图像的灰度值等 ...
- 图像二值化----otsu(最大类间方差法、大津算法)(二)
转自:http://blog.stevenwang.name/ostu-threshold-56002.html OTSU算法也称最大类间差法,有时也称之为大津算法,被认为是图像分割中阈值选取的最佳算 ...
- CUDA精进之路(五):图像处理——OTSU二值算法(最大类间方差法、大津法)
引言 最近在做医疗设备相关的项目,故在项目中大量用到了各类图像分割的算法,为了在图像中分割出特定目标,用到的算法可以有很多,比如阈值分割,多通道分割,边缘分割以及一些前沿的组合分割.而对大多数图像来说 ...
最新文章
- 气象gis 解决方案_杜邦可持续解决方案全方位智能化应急管理系统解决方案
- 阿里云朱照远:AI打开新视界 8K时代已来!
- 20165310java_blog_week6
- rh php56 php,在全球范围内提供RHSCL PHP的最佳方法
- mcem r语言代码_R语言阈值自回归模型(TAR)代码示例
- 建立局域网计算机应安装,两台电脑如何建立局域网
- Xcode给应用签名的设置
- win10微软图标点击无反应_Win10任务栏系统图标点击无反应的解决方法
- vs 2017 查看dll源代码
- 50款PS完美汉化插件一键安装,win+mac
- (最小割求最小割集)poweroj2883病毒侵染
- ArrayList类的基本使用,完成案例随机不重复点名的程序
- 安装软件提示重启计算机,安装西门子软件时提示重启电脑的解决办法
- 【金猿产品展】EasyTwin——国产自研数字孪生融合渲染引擎
- 类和对象,属性和方法
- XtraReport报表入库单数字转中文大写数字
- oracle智能便携投影机,智能投影 篇四:天猫精灵投影仪上手体验,小巧便携+内置电池,李佳琦带货推荐...
- hdoj 4417 Super Mario 【树状数组 + 思维】
- AcWing 188. 武士风度的牛 BFS 水题
- 使用容量时间证明和类Casper确定性装置带来快速确定和抗长程攻击
热门文章
- [ATF][Power]ARMv8 arm trust firmware
- shell卸载 simatic_Siemens Simatic WinCC v7.5 SP1 (x64)ISO 授权安装教程
- 蓝桥杯官网python组基础练习-基础1-5
- 互联互通社区祝大家中秋节快乐!
- java开发ria是指什么_Java RIA Demo
- 为VMwareESXi添加驱动
- 【ELK报错】Alias [.kibana] has more than one indices associated with it [[.kibana_1, .kibana_2]]
- Java 防SQL注入方法
- 学科网自动下载的开发方法
- mysql8.0如何授权_MySQL8.0 创建用户及授权