阈值分割:最大类间方差法

一、简介

最大类间方差法,又称为大津阈值法,或OTSU算法。是由日本学者大津在197919791979年提出的一种非参数的、无监督的自动选择阈值的图像分割方法。

二、算法描述

2.1 公式推导

对于给定的一幅具有 LLL 个灰度级([0,1,2,⋯,L−1][0,1,2,\cdots,L-1][0,1,2,⋯,L−1])的灰度图像,有以下描述:

  • 使用 nin_{i}ni​ 表示处于灰度级 iii 的像素块的数目;
  • 使用 N=n0+n1+⋯+nL−1N = n_0 + n_1 + \cdots + n_{L-1}N=n0​+n1​+⋯+nL−1​ 表示该图像所有像素块的数目总和。

对该图像的灰度级直方图进行 标准化处理 可以得到一个概率分布:
pi=niN,pi≥0,∑i=0L−1pi=1(1)p_i = \frac{n_i}{N},\quad p_i \ge 0,\quad \sum_{i=0}^{L-1}{p_i} =1 \tag{1} pi​=Nni​​,pi​≥0,i=0∑L−1​pi​=1(1)

以灰度级 kkk 为 阈值,可将该图像中的像素块二分为两大类 C0C_{0}C0​ 和 C1C_{1}C1​ (背景和前景,反之亦然),其中:

  • C0C_0C0​ 表示灰度级在范围 [0,1,⋯,k−1][0,1,\cdots,k-1][0,1,⋯,k−1] 的像素集合;
  • C1C_1C1​ 表示灰度级在范围 [k,k+1,⋯,L−1][k,k+1,\cdots,L-1][k,k+1,⋯,L−1] 的像素集合。

记 w0w_0w0​ 与 w1w_1w1​ 分别为类 C0C_0C0​ 和类 C1C_1C1​ 发生的概率,则显然有:
∑i=1L−1pi=w0+w1=1(2)\sum_{i = 1}^{L-1}{p_i} = w_0 + w_1 = 1 \tag{2} i=1∑L−1​pi​=w0​+w1​=1(2)

其中,w0w_0w0​ 与 w1w_1w1​ 可表示为 零阶矩 的形式:
w0=Pr(C0)=∑i=0k−1pi=w(k)(3)w_0 = Pr(C_0) = \sum_{i = 0}^{k-1}{p_{i}} = w(k) \tag{3} w0​=Pr(C0​)=i=0∑k−1​pi​=w(k)(3)

w1=Pr(C1)=∑i=kL−1pi=1−w(k)(4)w_1 = Pr(C_1) = \sum_{i = k}^{L-1}{p_{i}} = 1 - w(k) \tag{4} w1​=Pr(C1​)=i=k∑L−1​pi​=1−w(k)(4)

类 C0C_0C0​ 与 类 C1C_1C1​ 发生的 期望 (或均值)可表示为 一阶矩 的形式:
μ0=∑i=0k−1iPr(i∣C0)=∑i=0k−1ipiw0=1w0∑i=0k−1ipi=μ(k)w(k)(5)\mu_0 = \sum_{i=0}^{k-1}{iPr(i|C_0)} = \sum_{i=0}^{k-1}{i \frac{p_i}{w_0}} = \frac{1}{w_0}\sum_{i = 0}^{k-1}{ip_i} = \frac{\mu(k)}{w(k)} \tag{5} μ0​=i=0∑k−1​iPr(i∣C0​)=i=0∑k−1​iw0​pi​​=w0​1​i=0∑k−1​ipi​=w(k)μ(k)​(5)

μ1=∑i=kL−1iPr(i∣C1)=∑i=kL−1ipiw1=1w1∑i=kL−1ipi=μT−μ(k)1−w(k)(5)\mu_1 = \sum_{i=k}^{L-1}{iPr(i|C_1)} = \sum_{i=k}^{L-1}{i \frac{p_i}{w_1}} = \frac{1}{w_1}\sum_{i = k}^{L-1}{ip_i}=\frac{\mu_{T} - \mu(k)}{1 - w(k)} \tag{5} μ1​=i=k∑L−1​iPr(i∣C1​)=i=k∑L−1​iw1​pi​​=w1​1​i=k∑L−1​ipi​=1−w(k)μT​−μ(k)​(5)

其中:
μ(k)=∑i=0k−1ipi,μT=∑i=0L−1ipi(6)\mu(k) = \sum_{i = 0}^{k-1}{ip_i},\quad\mu_{T} = \sum_{i = 0}^{L-1}{ip_i} \tag{6} μ(k)=i=0∑k−1​ipi​,μT​=i=0∑L−1​ipi​(6)

显然,有:
μ0w0+μ1w1=μT(7)\mu_0 w_0 + \mu_1 w_1 =\mu_{T} \tag{7} μ0​w0​+μ1​w1​=μT​(7)

类 C0C_0C0​ 与 类 C1C_1C1​ 发生的 方差 可以表示为 二阶矩 的形式:
σ02=∑i=0k−1(i−μ0)2Pr(i∣C0)=∑i=0k−1(i−μ0)2piw0(8)\sigma_{0}^{2} = \sum_{i = 0}^{k-1}{(i - \mu_{0})^{2}Pr(i|C_0)} = \sum_{i = 0}^{k-1}{(i - \mu_0)^2\frac{p_i}{w_0}} \tag{8} σ02​=i=0∑k−1​(i−μ0​)2Pr(i∣C0​)=i=0∑k−1​(i−μ0​)2w0​pi​​(8)

σ12=∑i=kL−1(i−μ1)2Pr(i∣C1)=∑i=kL−1(i−μ1)2piw1(9)\sigma_1^{2} = \sum_{i = k}^{L-1}{(i - \mu_1)^{2}Pr(i|C_1)} = \sum_{i = k}^{L-1}{(i - \mu_1)^{2}\frac{p_i}{w_1}} \tag{9} σ12​=i=k∑L−1​(i−μ1​)2Pr(i∣C1​)=i=k∑L−1​(i−μ1​)2w1​pi​​(9)

为了评估所选阈值 kkk 的 优良(goodness),引入以下三种 判别标准度量:
λ=σB2σW2,κ=σT2σW2,η=σB2]σT2(10)\lambda = \frac{\sigma_{B}^{2}}{\sigma_{W}^{2}},\quad \kappa = \frac{\sigma_{T}^{2}}{\sigma_{W}^{2}},\quad \eta = \frac{\sigma_{B}^{2]}}{\sigma_{T}^{2}} \tag{10} λ=σW2​σB2​​,κ=σW2​σT2​​,η=σT2​σB2]​​(10)

其中:
(1)类内方差(within-class variance,简记为 σwith2\sigma_{with}^{2}σwith2​ 或 σW2\sigma_{W}^{2}σW2​)满足:
σW2=w0σ02+w1σ12(11)\sigma_{W}^{2} = w_0 \sigma_{0}^{2} + w_1 \sigma_{1}^{2} \tag{11} σW2​=w0​σ02​+w1​σ12​(11)

(2)类间方差(between-class variance,简记为 σBetween2\sigma_{Between}^{2}σBetween2​ 或 σB2\sigma_{B}^{2}σB2​)满足:
σB2=w0(μ0−μT)2+w1(μ1−μT)2=w0w1(μ1−μ0)2(12)\sigma_{B}^{2} = w_{0}(\mu_{0} - \mu_{T})^{2} + w_1(\mu_{1} - \mu_{T})^{2} = w_{0}w_{1}(\mu_{1} - \mu_{0})^{2} \tag{12} σB2​=w0​(μ0​−μT​)2+w1​(μ1​−μT​)2=w0​w1​(μ1​−μ0​)2(12)

(3)全局方差(total variance,简记为 σTotal2\sigma_{Total}^{2}σTotal2​ 或 σT2\sigma_{T}^{2}σT2​)满足:
σT2=∑i=0L−1(i−μT)2pi(13)\sigma_{T}^{2} = \sum_{i = 0}^{L-1}{(i - \mu_{T})^{2}p_{i}} \tag{13} σT2​=i=0∑L−1​(i−μT​)2pi​(13)

合适的阈值会将图像分割为两类。反过来就是说,能在灰度水平上实现最佳分离的阈值将是最合适的阈值。

因此,利用引入的判别标准度量,可以将问题转化为一个优化问题:寻找一个合适的阈值 kkk 最大化某一个判别标准度量函数(λ\lambdaλ,κ\kappaκ 以及 η\etaη 中的某一个)。

那么选择哪一个判别标准度量最为合适呢

实际上,最大化判别标准 λ\lambdaλ,κ\kappaκ 以及 η\etaη 是相互等价的。
因为,以 λ\lambdaλ 为单位可以分别表示 κ\kappaκ 以及 η\etaη:
κ=λ+1,η=λλ+1(14)\kappa = \lambda + 1,\quad \eta = \frac{\lambda}{\lambda + 1} \tag{14} κ=λ+1,η=λ+1λ​(14)

并且以下基本关系式始终成立:
σW2+σB2=σT2(15)\sigma_{W}^{2} + \sigma_{B}^{2} = \sigma_{T}^{2} \tag{15} σW2​+σB2​=σT2​(15)

也就是说,当三个判别标准度量中的任意一个达到最大时,另外两个都会达到最大值。其中:

  • σW2\sigma_{W}^{2}σW2​ 和 σB2\sigma_{B}^{2}σB2​ 均是阈值 kkk 的函数;
  • σT2\sigma_{T}^{2}σT2​ 与阈值 kkk 无关;
  • σW\sigma_{W}σW​ 需要计算二阶矩,而 σB2\sigma_{B}^{2}σB2​ 仅仅需要计算一阶矩。

所以,η\etaη 是关于阈值 kkk 的最简单的判别标准度量。

因此,使用 η\etaη 作为评估阈值 kkk 优良 的判别标准。

现在,求解最大化判别标准 η\etaη 时的最佳阈值 k∗k^{*}k∗。 分析 η=σB2σT2\eta = \frac{\sigma_{B}^{2}}{\sigma_{T}^{2}}η=σT2​σB2​​ 可知,最大化 η\etaη 即最大化 σB2\sigma_{B}^{2}σB2​。即:
η(k)=σB2(k)σT2(16)\eta(k) = \frac{\sigma_{B}^{2}(k)}{\sigma_{T}^{2}} \tag{16} η(k)=σT2​σB2​(k)​(16)

并且有:
σB2(k)=[μTw(k)−μ(k)]2w(k)[1−w(k)](17)\sigma_{B}^{2}(k) = \frac{\left[ \mu_{T} w(k) - \mu(k)\right]^{2}}{w(k)\left[1 - w(k)\right]} \tag{17} σB2​(k)=w(k)[1−w(k)][μT​w(k)−μ(k)]2​(17)

最优阈值 k∗k^{*}k∗ 可以表示为:
k∗=arg⁡max⁡1≤k≤L−1σB2(k)(18)k^{*} = \arg \underset{1 \le k \le L-1}{\max}{\sigma_{B}^{2}{(k)}} \tag{18} k∗=arg1≤k≤L−1max​σB2​(k)(18)

其中,阈值 kkk 的搜索范围可以表示为:
S∗={k∣w0w1=w(k)[1−w(k)]>0,or0<w(k)<1}(19)S^{*} = \{k~|~ w_0 w_1 = w(k)\left[1 - w(k)\right] > 0, ~ o r~ 0<w(k)<1\} \tag{19} S∗={k ∣ w0​w1​=w(k)[1−w(k)]>0, or 0<w(k)<1}(19)
该范围称为灰度直方图的有效范围。

从公式(12)中
σB2=w0(μ0−μT)2+w1(μ1−μT)2=w0w1(μ1−μ0)2\sigma_{B}^{2} = w_{0}(\mu_{0} - \mu_{T})^{2} + w_1(\mu_{1} - \mu_{T})^{2} = w_{0}w_{1}(\mu_{1} - \mu_{0})^{2} σB2​=w0​(μ0​−μT​)2+w1​(μ1​−μT​)2=w0​w1​(μ1​−μ0​)2
可以看出:

  • 当选定的阈值 k∈S−S∗={k∣w(k)=0or1}k \in S - S^{*} = \{k ~|~w(k) = 0~or~1\}k∈S−S∗={k ∣ w(k)=0 or 1} 时,判别标准度量 η\etaη 取最小值 000。
  • 当选定的阈值 k∈S∗k \in S^{*}k∈S∗ 时,判别标准度量 η\etaη 取一个正的且有界的值。

因此,显而易见,判别标准的最大值始终存在。

2.2 算法分析

对于选定的阈值 k∗k^{*}k∗:
w0∗=Pr(C0∗)=∑i=0k∗−1pi=w(k∗)(20)w_{0}^{*} = Pr(C_{0}^{*}) = \sum_{i = 0}^{k^{*} - 1}{p_i} = w(k^{*}) \tag{20} w0∗​=Pr(C0∗​)=i=0∑k∗−1​pi​=w(k∗)(20)

w1∗=Pr(C1∗)=∑i=k∗L−1pi=1−w(k∗)(21)w_{1}^{*} = Pr(C_1^{*}) = \sum_{i = k^{*}}^{L-1}{p_{i}} = 1 - w(k^{*}) \tag{21} w1∗​=Pr(C1∗​)=i=k∗∑L−1​pi​=1−w(k∗)(21)

分别表示了灰度图像按照阈值 k∗k^{*}k∗ 所划分的两类的发生概率。

类 C0∗C_{0}^{*}C0∗​ 与类 C1∗C_{1}^{*}C1∗​ 发生的 期望 分别为:
μ0∗=∑i=0k∗−1iPr(i∣C0∗)=∑i=0k∗−1ipiw0∗=μ(k∗)w(k∗)(22)\mu_{0}^{*} = \sum_{i = 0}^{k^{*}-1}{iPr(i|C_{0}^{*})} = \sum_{i = 0}^{k^{*} - 1}{i \frac{pi}{w_{0}^{*}}} = \frac{\mu(k^{*})}{w(k^{*})} \tag{22} μ0∗​=i=0∑k∗−1​iPr(i∣C0∗​)=i=0∑k∗−1​iw0∗​pi​=w(k∗)μ(k∗)​(22)
μ1∗=∑i=k∗L−1iPr(i∣C1∗)=∑i=k∗L−1ipiw1∗=μT−μ(k∗)1−w(k∗)(23)\mu_{1}^{*} = \sum_{i = k^{*}}^{L-1}{iPr(i|C_{1}^{*})} = \sum_{i = k^{*}}^{L-1}{i\frac{p_i}{w_1^{*}}} = \frac{\mu_{T} - \mu(k^{*})}{1 - w(k^{*})} \tag{23} μ1∗​=i=k∗∑L−1​iPr(i∣C1∗​)=i=k∗∑L−1​iw1∗​pi​​=1−w(k∗)μT​−μ(k∗)​(23)

将判别标准 η\etaη 的最大值 η(k∗)\eta(k^{*})η(k∗) 简记为 η∗\eta^{*}η∗,可以用作评估灰度图像中类的可分性的标准。这是一个重要的度量,它在灰度尺度的放射变化(也就是说,对于任意的位移和扩张)下是不变的。

2.3 算法扩展

实际上,利用判别准则,可以直接将OTSU算法推广至 多阈值 的情形。例如:
在三阈值的情形下,可以选择两个阈值 0≤k1k2≤10 \le k_1 k_2 \le 10≤k1​k2​≤1 将原始灰度图像分化为三类。此时标准度量 η\etaη 存在两个参数 k1k_1k1​ 与 k2k_2k2​,最佳阈值 k1∗,k2∗k_1^{*},k_{2}^{*}k1∗​,k2∗​ 可通过最大化 η\etaη:
(k1∗,k2∗)=arg⁡max⁡1≤k1≤k2≤L−1σB2(k1,k2)(24)(k_{1}^{*},k_{2}^{*})=\arg \underset{1 \le k_{1} \le k_{2} \le L-1}{\max}{\sigma_{B}^{2}(k_{1},k_{2})} \tag{24} (k1∗​,k2∗​)=arg1≤k1​≤k2​≤L−1max​σB2​(k1​,k2​)(24)

进行求解。

参考文献

[1] Ostu N , Nobuyuki O , Otsu N . A thresholding selection method from gray level histogram. 1979.

阈值分割:最大类间方差法相关推荐

  1. 图像分割 - 阈值处理 - 最大类间方差法(OTSU)

    目录 1. OTSU 介绍 2. 代码实现 1. OTSU 介绍 OTSU 大津法,也是最大类间方差算法 OTSU 算法的思想通过不同的阈值K,将图像的分为两个区域,一个是灰度值 0 <= k ...

  2. 数字图像处理实验(六)|图像分割{阈值分割、直方图法、OTUS最大类间方差法(edge、im2dw、imfilter、imresize)、迭代阈值法、点检测}(附matlab实验代码和截图)

    文章目录 一.实验目的 二.实验原理 (一) 阈值分割 1. 直方图法 2.OTSU法(最大类间方差法)确定阈值 3. 迭代阈值法 4. 点检测 (二)边缘检测 三.实验内容 (一)阈值分割 1. 直 ...

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

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

  4. 基于OTSU最大类间方差法的ROI分割、提取图像中的形状特征--面积、周长、离心率、zernike矩

    分享一下最近学习的图像分类方面知识,整体的思路如下(之前的汇报ppt里截的) 把这个过程拆分几个部分共同学习一下吧 1.Otsu法原理 最大类间方差法OTSU是一种自适应的全局阈值确定的方法,根据灰度 ...

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

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

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

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

  7. 基于遗传算法的二维最大类间方差法的图像分割优化

    一.背景 最大类间方差阈值分割法日本大津展之在1980年提出的,其基本思路是将图像的直方图以某一灰度为阈值,将图像分成两组并计算两组的方差,当被分成的两组之间的方差最大时,就以这个灰度值为國值分割图像 ...

  8. Ostu最大类间方差法的C++实现

    一.Ostu的原理 最大类间方差法是由日本学者大津(Nobuyuki Ostu)在1979年提出的,该方法根据计算公式自动计算分割单域值,是一种根据灰度图像自动计算阈值的方法.它按照灰度图像的灰度值等 ...

  9. 图像二值化之最大类间方差法(大津法,OTSU)

    参考文章1:图像二值化与otsu算法介绍 参考文章2:python opencv cv2.threshold() (将固定级别的阈值应用于每个数组元素)ThresholdTypes 最大类间方差法(大 ...

  10. opencv与C++实现最大类间方差法(OTSU)进行图像二值化

    直接上代码,使用最大类间方差法进行二值化的函数 void threshold_otsu(Mat &mat, Mat &mat_thresh) //mat为输入图像,mat_thresh ...

最新文章

  1. Spring mvc3的ajax
  2. Selenium3自动化测试——15.调用Javascript进行滚动条控制
  3. hibernate插入DB时间
  4. Python入门100题 | 第006题
  5. 写一个简单的实时互动小游戏
  6. linux shell sleep/wait(转载)
  7. Kotlin — 使用IDEA运行第一个Kotlin程序,打印“Hello World”!
  8. PPT常用功能及其实现
  9. OPNsense用户手册-强制网络门户
  10. 中国八横八纵大容量光纤通信网——世界级光纤通信网
  11. SAP ADM100 学习笔记
  12. MiniGUI中的几个画线函数
  13. 如何让3ds Max 2016导入smd文件
  14. Spring-AOP术语
  15. Windows10抽风系列:一、卡顿、字体显示丢失
  16. python调用函数示例_Python使用execjs运行JS函数示例,python,execJS,例子
  17. python学习 字典
  18. AnyTXT 一款强大的本地文件内容搜索软件
  19. 阿里云服务器ESSD云盘吞吐量IOPS及性能级别PL0、PL1、PL2和PL3参数说明
  20. 爬虫基本原理与实战---1、爬虫实战概述

热门文章

  1. SA8155 QNX 系统启动时序
  2. 和丰钢结构企业erp管理软件
  3. 测试开发面试题及面试经验
  4. IDEA打包jar包并运行
  5. Burp新手抓包教程(HTTPS抓包)
  6. 三位物理学家与陶哲轩证明的惊天定理,原来早在教科书里吗?
  7. Java订单接入支付宝二 支付回调
  8. 本地安全策略 、 组策略
  9. Endnote与知网研学(E-study)题录相互导入
  10. Php抖音引流源码,Thinkphp抖音快手点赞在线任务交易系统,引流必备