最大类间方差法(Otsu)

由Otsu(大津展之)于1978年提出的最大类间方差法,是引起较多关注的一种阈值选取方法。它是在判决分析或最小二乘原理的基础上推导出来的。

参考文献:

[1] Otsu N. A threshold selection method from gray-level histogram. IEEE Trans,1979;SMC-9;62-66 下载地址

算法思想:

假设一幅图像有L个灰度级[1,2,…,L]。灰度级为i的像素点的个数为ni,那么总的像素点个数就应该为N=n1+n2+…+nL。为了讨论方便,我们使用归一化的灰度级直方图并且视为这幅图像的概率分布:

现在假设我们通过一个灰度级为k的门限将这些像素点划分为两类:C0和C1(背景和目标,或者反之亦然);C0表示灰度级为[1,…,k]的像素点,C1表示灰度级为[k+1,…,L]的像素点。那么,每一类出现的概率以及各类的平均灰度级分别由下面的式子给出:

以及

其中,

分别为灰度级从1到k的累积出现概率和平均灰度级(一阶累积矩),而

是整幅图像的平均灰度级。我们可以很容易验证,对于任意选定的k,都有:

这两类的类内方差由下面的公式给出:

这需要二阶累积矩(second-order cumulative moment,统计学概念)。

为了评价(灰度级k)这个门限“好”的程度,我们需要引入判别式分析中使用的判别式标准来测量(类的分离性测量):

其中:

又根据式(9),可以得出:

这三个式子分别是类内方差、类间方差和灰度级的总方差。然后,我们的问题就简化为一个优化问题,即寻找一个门限k使(12)式中给出的一个目标函数取最大值。

这个观点是出于这样一个猜想,一个好的阈值将会把灰度级分为两类,那么反过来说,就是如果一个门限能够在灰度级上将图像分割为最好的两类的话,那么这个门限就是最好的门限。

上面给出的判别式标准是分别求取λ、κ和η的最大值。然而,对于κ而言,它又等于另外一个,比如κ=λ+1;而对于λ而言,又有η=λ/(λ+1),因为始终存在下面的基本关系:

效果展示:

算法评价:

  就最大类间方差算法而言,优点是算法简单,当目标与背景的面积相差不大时,能够有效地对图像进行分割。但是,当图像中的目标与背景的面积相差很大时,表现为直方图没有明显的双峰,或者两个峰的大小相差很大,分割效果不佳,或者目标与背景的灰度有较大的重叠时也不能准确的将目标与背景分开。导致这种现象出现的原因是该方法忽略了图像的空间信息,同时该方法将图像的灰度分布作为分割图像的依据,因而对噪声也相当敏感。所以,在实际应用中,总是将其与其他方法结合起来使用。

时间: 2024-08-29 13:09:28

最大类间方差法(Otsu)的相关文章

最大类间方差法

最大类间方差法是由日本学者大津于1979年提出的,是一种自适应的阈值确定的方法,又叫大津法,简称OTSU.它是按图像的灰度特性,将图像分成背景和目标2部分.背景和目标之间的类间方差越大,说明构成图像的2部分的差别越大,当部分目标错分为背景或部分背景错分为目标都会导致2部分差别变小.因此,使类间方差最大的分割意味着错分概率最小.对于图像I(x,y),前景(即目标)和背景的分割阈值记作T,属于前景的像素点数占整幅图像的比例记为ω0,其平均灰度μ0;背景像素点数占整幅图像的比例为ω1,其平均灰度为μ1

大津法---OTSU算法

简介: 大津法(OTSU)是一种确定图像二值化分割阈值的算法,由日本学者大津于1979年提出.从大津法的原理上来讲,该方法又称作最大类间方差法,因为按照大津法求得的阈值进行图像二值化分割后,前景与背景图像的类间方差最大(何为类间方差?原理中有介绍). OTSU算法 OTSU算法也称最大类间差法,有时也称之为大津算法,由大津于1979年提出,被认为是图像分割中阈值选取的最佳算法,计算简单,不受图像亮度和对比度的影响,因此在数字图像处理上得到了广泛的应用.它是按图像的灰度特性,将图像分成背景和前景两

iOS设计模式 - (2)UML类间关系精解

在正式讲设计模式之前, 介绍一下UML类图之间的关系还是非常有必要的, 由于一些教程, 书籍, 包含我之后的文章, 都会大量使用类图, 去描写叙述各个类之间的关系.这是一种非常直观, 简约的方式. 当然, 能力, 精力有限, 这里的UML的介绍也仅仅局限与几种常见的类间关系. 包含: 继承.实现.依赖.关联.聚合.组合 在次之前, 假设看不懂类图, 能够先看一下我之前写的一篇文章 : 具体解释八大UML类图符号的表示法 iOS - UML类间关系精解           by Colin丶 转载

iOS设计模式 - UML类间关系精解

在正式讲设计模式之前, 介绍一下UML类图之间的关系还是很有必要的, 因为一些教程, 书籍, 包括我之后的文章, 都会大量使用类图, 去描述各个类之间的关系.这是一种非常直观, 简约的方式. 当然, 能力, 精力有限, 这里的UML的介绍也仅仅局限与几种常见的类间关系. 包括: 继承.实现.依赖.关联.聚合.组合 在次之前, 如果看不懂类图, 可以先看一下我之前写的一篇文章 : 详解八大UML类图符号的表示法 iOS - UML类间关系精解           by Colin丶 转载请注明出处

类间的关系

类间关系可分为依赖.关联.聚合.组合和继承5种. 按照上述顺序,类间关系依次增强. 若类A的方法中仅仅使用了类B的对象,那么类A依赖于类B. 泛化/概化关系表示把几类对象类的公共属性和行为抽象成超类,然后其属性和方法被那些子类继承: 若类B除具有类A的全部特性外,类B还可定义新的特性以及置换类A的部分特性,则类B与类A具有泛化关系: 聚合关系表示一个较大的“整体”类包含一个或多个较小的“部分”类: 若类A的对象维持类B对象的引用或指针,并可与类C的对象共享相同的类B的对象,那么类A与类 B具有聚

里氏替换原则:切忌按照常识实现类间的继承关系

什么是里氏替换原则 里氏替换原则(Liskov Substitution Principle LSP)定义为:任何基类可以出现的地方,子类一定可以出现. LSP是继承复用的基石,只有当衍生类可以替换掉基类,软件单位的功能不受到影响时,基类才能真正被复用,而衍生类也能够在基类的基础上增加新的行为. 为什么需要里氏替换原则 里氏替换原则看起来好像没啥了不起的,不就是继承要注意的一丢丢细节么,年轻人呐,你这样的思想很危险啊.事实上里氏替换原则常常会被违反,我在下面举例说明吧: 我们定义了一个矩形类:

Flex事件机制学习-自定义事件实现类间通信 .

今天,学习Flex自定义事件,可以使两个类通信,定义一个Main类. public class Main extends Sprite     {            public function Main()            { //演示ChildSprite类是与Main类通信,ChildSprite类稍后说明: var child:ChildSprite=new ChildSprite(); //指示该实例的属性值            child.flag="01";

设计模式之UML类图以及类间关系

类图是描述系统中的类,以及各个类之间的关系的静态视图.能够让我们在正确编写代码以前对系统有一个全面的认识.类图是一种模型类型,确切的说,是一种静态模型类型.类图表示类.接口和它们之间的协作关系. 以下类图都是用 Visio 画的,因为这学期体系结构老师的实验报告强制使用这个软件画图. 类图的组成 普通类 一个类图由三部分组成. 第一部分是类名: 第二部分是属性,即成员变量.格式为:可见性 属性名称:类型[ = 缺省值]. 第三部分是操作,即方法.格式为:可见性 方法名称(参数列表)[ : 返回类

设计模式之UML(一)类图以及类间关系(泛化 、实现、依赖、关联、聚合、组合)

类图用于描述系统中所包含的类以及它们之间的相互关系,帮助人们简化对系统的理解,它是系统分析和设计阶段的重要产物,也是系统编码和测试的重要模型依据.接下来我们就来谈谈类图的组成,在下一篇中我们将讨论一下类图之间的关系. 一.类图的组成 1. 普通类 上图就是一个UML的普通类图,从上图我们看出,一个UML通常由三部分组成. 第一部分是类名:每个类都必须有一个名字,类名是一个字符串. 第二部分是类的属性(Attributes):属性是指类的性质,即类的成员变量.一个类可以有任意多个属性,也可以没有属