迭代阈值法

合集下载

常用阈值计算方法

常用阈值计算方法

常用阈值计算方法
阈值计算是图像处理中的一项重要任务,它可以将图像中的像素分为两类:背景和前景。

常用的阈值计算方法有以下几种:
1. Otsu算法
Otsu算法是一种自适应阈值计算方法,它可以根据图像的灰度分布自动计算出最佳阈值。

该算法的基本思想是:将图像分为两类,使得类内方差最小,类间方差最大。

具体实现过程是:首先计算出图像的灰度直方图,然后遍历所有可能的阈值,计算出每个阈值对应的类内方差和类间方差,最后选择使类间方差最大的阈值作为最佳阈值。

2. 均值法
均值法是一种简单的阈值计算方法,它将图像中所有像素的灰度值求平均,然后将平均值作为阈值。

该方法的缺点是对噪声比较敏感,容易产生误判。

3. 中值法
中值法是一种基于排序的阈值计算方法,它将图像中所有像素的灰度值排序,然后选择中间值作为阈值。

该方法的优点是对噪声不敏感,但是计算量较大。

4. 迭代法
迭代法是一种基于直方图的阈值计算方法,它通过不断迭代计算出最佳阈值。

具体实现过程是:首先选择一个初始阈值,然后将图像分为两类,计算出每个类的平均灰度值,然后将两个平均值的平均值作为新的阈值,重复以上步骤直到阈值不再变化为止。

阈值计算是图像处理中的一项重要任务,不同的阈值计算方法适用于不同的图像处理场景,需要根据具体情况选择合适的方法。

语音重构的DCT域加速Landweber迭代硬阈值算法

语音重构的DCT域加速Landweber迭代硬阈值算法

ma n B e n t e a p o i t p ri fs e c i a n t e DC o i i . a d o p r xmae s a s y o p e h s s h t n g li h T d man,c mp e s d s n ig t e r sa p id t e o — o rs e e sn h oy i p l o rc n e
( aj gU i r t o ot adTlcm u i t n ) M nsyo d ct n 3 o eeo Sine N ni n esy f s n e o m n ai s , ii r f ua o ; .C l g f cec , n v i P s e c o t E i l N ni nvrt f ot adT lcmm nct n , aj g 2 0 0 ,C ia aj gU i syo s n eeo u i i s N ni , 10 3 hn ) n ei P s ao n
Ab ta t src :
T e b sc te r f e o sr cin s n l i t a e sg asa e s a s ra p o i t p s n a t n fr d — h a i h o o c n t t i a s s h t h i l r p re o p r xmae s a e i a so m o y r u o g t n r r
第2 8卷
第 2期
信 号 处 理
S GNAL P I ROCES I S NG
Vo _ 8 No 2 l2 . Fe . 2 1 b 02
21 0 2年 2月
语 音 重 构 的 D T域 加 速 L n w b r C a d e e 迭 代硬 阈值 算 法

迭代法阈值分割

迭代法阈值分割

迭代法阈值分割
迭代法阈值分割是将图像根据其灰度值划分成两个不同的区域的分割
方法。

该方法基于不同灰度级别的像素点在一定阈值下的分布情况。

迭代
法的过程是:首先将图像的灰度值按照一定方式分类,再计算每个分类的
平均值作为阈值,然后将这个阈值与原来设置的阈值进行比较,如果不相等,则再次分类,直到阈值不再改变,即分割结束。

迭代法阈值分割的步骤如下:
1.设置初始阈值(一般是灰度值的平均值)。

2.将图像的灰度值按照阈值分为两个区域。

3.分别计算两个区域的平均灰度值。

4.将计算出的平均灰度值作为新的阈值,与原来的阈值进行比较。

5.如果两个阈值相同,则分割结束;如果不同,则将新的阈值作为初
始阈值,重新进行分割。

6.重复步骤2至步骤5,直到阈值不再改变,分割结束。

迭代法阈值分割是一种简单的图像分割方法,但是结果可能不够理想,因为它不能处理图像中灰度值分布不均匀的情况,也不能处理图像的噪声。

因此,在实际应用中需要结合其他方法来提高分割效果。

【转】七种常见阈值分割代码(Otsu、最大熵、迭代法、自适应阀值、手动、迭代法、基本全局阈值法)

【转】七种常见阈值分割代码(Otsu、最大熵、迭代法、自适应阀值、手动、迭代法、基本全局阈值法)

【转】七种常见阈值分割代码(Otsu、最⼤熵、迭代法、⾃适应阀值、⼿动、迭代法、基本全局阈值法)⼀、⼯具:VC+OpenCV⼆、语⾔:C++三、原理otsu法(最⼤类间⽅差法,有时也称之为⼤津算法)使⽤的是聚类的思想,把图像的灰度数按灰度级分成2个部分,使得两个部分之间的灰度值差异最⼤,每个部分之间的灰度差异最⼩,通过⽅差的计算来寻找⼀个合适的灰度级别来划分。

所以可以在⼆值化的时候采⽤otsu 算法来⾃动选取阈值进⾏⼆值化。

otsu算法被认为是图像分割中阈值选取的最佳算法,计算简单,不受图像亮度和对⽐度的影响。

因此,使类间⽅差最⼤的分割意味着错分概率最⼩。

设t为设定的阈值。

wo:分开后前景像素点数占图像的⽐例uo:分开后前景像素点的平均灰度w1:分开后被景像素点数占图像的⽐例u1:分开后被景像素点的平均灰度u=w0*u0 + w1*u1 :图像总平均灰度从L个灰度级遍历t,使得t为某个值的时候,前景和背景的⽅差最⼤,则这个 t 值便是我们要求得的阈值。

其中,⽅差的计算公式如下:g=wo * (uo - u) * (uo - u) + w1 * (u1 - u) * (u1 - u)[ 此公式计算量较⼤,可以采⽤: g = wo * w1 * (uo - u1) * (uo - u1) ]由于otsu算法是对图像的灰度级进⾏聚类,so 在执⾏otsu算法之前,需要计算该图像的灰度直⽅图。

迭代法原理:迭代选择法是⾸先猜测⼀个初始阈值,然后再通过对图像的多趟计算对阈值进⾏改进的过程。

重复地对图像进⾏阈值操作,将图像分割为对象类和背景类,然后来利⽤每⼀个类中的灰阶级别对阈值进⾏改进。

图像阈值分割---迭代算法1 .处理流程:1.为全局阈值选择⼀个初始估计值T(图像的平均灰度)。

2.⽤T分割图像。

产⽣两组像素:G1有灰度值⼤于T的像素组成,G2有⼩于等于T像素组成。

3.计算G1和G2像素的平均灰度值m1和m2;4.计算⼀个新的阈值:T = (m1 + m2) / 2;5.重复步骤2和4,直到连续迭代中的T值间的差⼩于⼀个预定义参数为⽌。

阈值迭代法

阈值迭代法

阈值迭代法
阈值迭代法是一种计算机算法,常用于图像处理、模式识别等领域。

它的基本思想是根据给定的阈值对图像进行二值化处理,不断调整阈值,直到满足预定的条件为止。

具体来说,阈值迭代法首先选择一个初始阈值,然后将图像中的所有像素根据该阈值进行二值化。

接下来,统计出两个像素类别的均值,即黑色像素的平均灰度值和白色像素的平均灰度值。

如果这两个均值之间的差距小于一个预定的容差值,则认为当前阈值已经满足要求,处理结束。

否则,将阈值调整为两个均值的平均值,继续进行二值化处理。

阈值迭代法的优点是可以自动确定最佳阈值,避免了手动调整的繁琐过程。

同时,它也可以处理复杂图像,比如有噪点、亮度不均等情况下的二值化。

然而,阈值迭代法也有一些缺点。

首先,它对于阈值的初始选择比较敏感,随意选择可能会导致结果不稳定。

其次,由于它只考虑了两种像素类别,因此在处理复杂图像时可能会出现误差。

- 1 -。

迭代收缩阈值算法代码

迭代收缩阈值算法代码

迭代收缩阈值算法代码迭代收缩阈值算法是一种用于图像分割的算法,它可以将图像中的目标从背景中分离出来。

该算法的基本思想是通过迭代的方式,不断调整阈值,直到达到最佳的分割效果。

在本文中,我们将详细介绍迭代收缩阈值算法的原理和代码实现。

一、算法原理迭代收缩阈值算法基于图像的灰度分布特征,通过不断调整阈值,将图像中的目标和背景分离开来。

算法的主要步骤如下:1.初始化阈值T,一般取图像灰度级的中值。

2.根据阈值T将图像分割为两个区域,分别为目标区域和背景区域。

3.计算目标区域和背景区域的平均灰度值m1和m2。

4.更新阈值T为m1和m2的平均值。

5.重复步骤2-4,直到阈值T不再变化或达到迭代次数的上限。

二、代码实现以下是使用Python语言实现迭代收缩阈值算法的示例代码:```import numpy as npimport cv2def iterative_thresholding(img):# 初始化阈值threshold = np.median(img)# 迭代次数上限max_iter = 100iter_count = 0while True:# 根据阈值分割图像_, binary = cv2.threshold(img, threshold, 255, cv2.THRESH_BINARY)# 计算目标区域和背景区域的平均灰度值mean1 = cv2.mean(img, binary)[0]mean2 = cv2.mean(img, ~binary)[0]# 更新阈值new_threshold = (mean1 + mean2) / 2# 判断阈值是否收敛if abs(new_threshold - threshold) < 1e-5 or iter_count >= max_iter:breakthreshold = new_thresholditer_count += 1return binary# 读取图像img = cv2.imread("image.jpg", 0)# 图像分割result = iterative_thresholding(img)# 显示结果cv2.imshow("Result", result)cv2.waitKey(0)cv2.destroyAllWindows()```以上代码首先引入了`numpy`和`cv2`库,分别用于处理图像和计算平均灰度值。

图像二值化阈值选取常用方法汇总

图像二值化阈值选取常用方法汇总

图像二值化阈值选取常用方法最近在公司搞车牌识别的项目,车牌定位后,发现对车牌区域二值化的好坏直接影响后面字符切分的过程,所以就想把常用阈值选取方法做一个总结。

图像二值化阈值选取常用方法:1.双峰法。

2.P 参数法。

3.最大类间方差法(Otsu 、大津法)。

4.最大熵阈值法。

5.迭代法(最佳阈值法)。

1.双峰法在一些简单的图像中,物体的灰度分布比较有规律,背景与目标在图像的直方图各自形成一个波峰,即区域与波峰一一对应,每两个波峰之间形成一个波谷。

那么,选择双峰之间的波谷所代表的灰度值T 作为阈值,即可实现两个区域的分割。

如图1所示。

2.P 参数法当目标与背景的直方图分布有一定重叠时,两个波峰之间的波谷很不明显。

若采用双峰法,效果很差。

如果预先知道目标占整个图像的比例P ,可以采用P 参数法。

P 参数法具体步骤如下:假设预先知道目标占整个图像的比例为P ,且目标偏暗,背景偏亮。

1)、计算图像的直方图分布P(t),t=0,1,.....255。

2)、计算阈值T ,使其满足0()*Tt p t Pm n =-∑最小。

P 参数法一般用于固定分辨率下,目标所占整个图像比例已知的情况。

3.最大类间方差法(Otsu)最大类间方差法是由Otsu 于1979年提出的,是基于整幅图像的统计特性实现阈值的自动选取的,是全局二值化最杰出的代表。

Otsu 算法的基本思想是用某一假定的灰度值t 将图像的灰度分成两组,当两组的类间方差最大时,此灰度值t 就是图像二值化的最佳阈值。

设图像有L 个灰度值,取值范围在0~L-1,在此范围内选取灰度值T ,将图像分成两组G0和G1,G0包含的像素的灰度值在0~T ,G1的灰度值在T+1~L-1,用N 表示图像像素总数,i n 表示灰度值为i 的像素的个数。

已知:每一个灰度值i 出现的概率为/i i p n N =;假设G0和G1两组像素的个数在整体图像中所占百分比为01ϖϖ、,两组平均灰度值为01μμ、,可得概率:00=T ii p ϖ=∑11011L i i T p ωω-=+==-∑平均灰度值:00T i i ipμ==∑111L ii T i p μ-=+=∑图像总的平均灰度值:0011μϖμϖμ=+类间方差:()()()22200110101()g t ωμμωμμωωμμ=-+-=-最佳阈值为:T=argmax(g(t))使得间类方差最大时所对应的t 值。

基于直方图的迭代式自动阈值分割技术研究

基于直方图的迭代式自动阈值分割技术研究

基于直方图的迭代式自动阈值分割技术研究摘要:首先介绍了直方图及其实现,进行了灰度处理,最后对迭代式自动阈值法技术进行了研究,介绍了其核心思想以及算法的实现,完成了图像阈值分割。

关键词:迭代式;自动阈值;图像分割0 引言图像分割是指将一幅图像分解为若干互不交叠的、有意义的、具有相同性质的区域。

分割出来的各区域对某种性质例如灰度、纹理而言具有相似性,区域内部是连通的且没有过多小孔;区域边界是明确的;相邻区域对分割所依据的性质有明显的差异。

图像分割算法一般是基于亮度值的两个基本特性之一:不连续性和相似性。

不连续性的应用途径是基于亮度的不连续变化分割图像,比如图像的边缘。

相似性的主要应用途径是依据事先制定的准则将图像分割为相似的区域。

门限(阈值)处理、区域生长、区域分离和聚合都是这类方法的实例。

本文研究了一种传统的图像分割方法——阈值法,通过迭代方法选取阈值。

由于直方图能够很好地反映图像中目标和背景在灰度特征上的差异等灰度分布特征, 和使用直方图进行阈值化的简单性和直观性, 利用直方图进行图像阈值化一直是图像分割的一个主流。

基于直方图的图像分割主要研究直方图构造和阈值选择两个问题。

1 获取直方图在数字图像处理中,灰度直方图是最简单且最有用的工具,可以说,对图像的分析与观察直到形成一个有效的处理方法,都离不开直方图。

灰度直方图是灰度级的函数,描述的是图像中该灰度级的像素个数或该灰度级像素出现的频率。

有时我们需要知道一幅图中的灰度分布情况,这时就可以采用灰度直方图来表示,即横坐标表示灰度级,纵坐标表示图像中该灰度出现的个数或该灰度级像素出现的频率,它只能反映图像灰度分布的情况,而不能反映图像像素的位置,即所有的空间信息全部丢失。

用来判断一幅图像是否合理的利用了全部被允许的灰度级范围,一般一幅图应该利用全部或几乎去哪不可能的灰度级,否则等于增加了量化间隔,丢失的信息将不能恢复。

下面是获取直方图的算法实现:iMaxGrayValue=0;iMinGrayValue=255;for (i=0;i < lWidth ;i++){for(j=0;j < lHeight ;j++){// 指向源图像倒数第j行,第i个象素的指针lpSrc=(char *)lpDIBBits + lLineBytes * j + i;pixel=(unsigned char)*lpSrc;lHistogram[pixel]++;//修改最大,最小灰度值if(iMinGrayValue > pixel){iMinGrayValue=pixel;}if(iMaxGrayValue < pixel){iMaxGrayValue=pixel;}}}2 基于直方图的灰度处理灰度处理过程只与像素的灰度有关系,与像素的位置无关,假设对横坐标为x,纵坐标为y的像素f(x,y)=g,经过灰度处理,其输出的灰度值为f`(x,y)=T(g)。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

数字图像处理的目的之一是图像识别, 而图像分割是图像识别工作的基础。

图像分割是指把图像分解成具有特性的区域并提取出感兴趣目标的技术和过程,是计算机视觉领域的一个重要而且基本的问题,分割结果的好坏将直接影响到视觉系统的性能。

因此从原理,应用和应用效果的评估上深入研究图像分割技术具有十分重要的意义。

本课题主要介绍了图像分割的基本知识。

图像分割的算法有阈值分割法,边缘检测法,区域分割等,本设计重点介绍了基于最小点阈值方法,基于最优阈值分割方法,基于迭代图像分割方法,最大类间方差法(OTSU)的图像分割法的原理和他们的MATLAB的实现代码与运行结果。

关键词:图像分割;MATLAB;阈值分割;1 课程设计目的 (3)2 课程设计要求 (3)3 相关知识 (3)3.1 图像分割的概述 (3)3.2 阈值分割的基本原理 (4)3.3 阈值分割方法的分类 (5)3.3.1 基于点的全局阈值方法 (6)3.3.2 基于区域的全局阈值方法 (6)3.3.3 局部阈值法和多阈值法 (6)4 程设计分析 (6)4.1 基于迭代的方法实现图像切割 (6)4.2 最大类间方差的方法实现图像切割 (7)5 程序设计 (8)5.1 程序简单介绍 (8)5.2 程序代码 (8)6 结果与分析 (11)结束语 (13)参考文献 (14)迭代阈值法1 课程设计目的本设计的课题任务是掌握图像阈值分割算法研究,实现对图像的分割。

了解图像分割的应用及基本方法,理解阈值化图像分割原理,理解三类典型的阈值化分割算法,并利用之进行图像分割,给出实验结果并做出分析。

2 课程设计要求⑴查阅相关资料;⑵理解基于各像素值的阈值分割算法,基于区域性质的阈值分割算法, 基于坐标位置的阈值分割算;软件编程实现利用基于各像素值的阈值分割算法进行图像分割,要求完成如下内容:包括极小值点阈值、最优阈值、迭代阈值,基于最大方差的阈值,基于最大熵的阈值等方法,利用之实现图像分割,这里的图像可以针对核磁共振图像⑶用MATLAB实现,并观察各算法之间的区别。

3 相关知识3.1 图像分割的概述在对图像的研究和应用中,人们往往仅对图像中的某些部分感兴趣,这些部分称为目标或前景(其他部分称为背景),他们一般对应图像中特定的、具有独特性质的区域。

为了辨识和分析目标,需要将他们分离提取出来,在此基础上才有可能对目标进一步利用。

图像分割就是指把图像分成格局特性的区域并提取出感兴趣目标的技术和过程。

这里特性可以是象素的灰度、颜色、纹理等,预先定义的目标可以对应单个区域,也可以对应多个区。

现有的图像分割算法有:阈值分割、边缘检测和区域提取法。

本文着重研究基于阈值法的图像分割技术。

所谓图像分割是指根据灰度、彩色、空间纹理、几何形状等特征把图像划分成若干个互不相交的区域,使得这些特征在同一区域内,表现出一致性或相似性,而在不同区域间表现出明显的不同。

简单的讲,就是在一幅图像中,把目标从背景中分离出来,以便于进一步处理。

图像分割是图像处理与计算机视觉领域低层次视觉中最为基础和重要的领域之一,它是对图像进行视觉分析和模式识别的基本前提。

同时它也是一个经典难题,到目前为止既不存在一种通用的图像分割方法,也不存在一种判断是否分割成功的客观标准。

阈值法是一种传统的图像分割方法,因其实现简单、计算量小、性能较稳定而成为图像分割中最基本和应用最广泛的分割技。

已被应用于很多的领域,例如,在红外技术应用中,红外无损检测中红外热图像的分割,红外成像跟踪系统中目标的分割;在遥感应用中,合成孔径雷达图像中目标的分割等;在医学应用中,血液细胞图像的分割,磁共振图像的分;在农业工程应用中,水果品质无损检测过程中水果图像与背景的分割。

在工业生产中,机器视觉运用于产品质量检测等等。

在这些应用中,分割是对图像进一步分析、识别的前提,分割的准确性将直接影响后续任务的有效性,其中阈值的选取是图像阈值分割方法中的关键技术。

3.2 阈值分割的基本原理图像阈值化分割是一种最常用,同时也是最简单的图像分割方法,它特别适用于目标和背景占据不同灰度级范围的图像。

它不仅可以极大的压缩数据量,而且也大大简化了分析和处理步骤,因此在很多情况下,是进行图像分析、特征提取与模式识别之前的必要的图像预处理过程。

图像阈值化的目的是要按照灰度级,对像素集合进行一个划分,得到的每个子集形成一个与现实景物相对应的区域,各个区域内部具有一致的属性,而相邻区域布局有这种一致属。

这样的划分可以通过从灰度级出发选取一个或多个阈值来实现。

阈值分割法是一种基于区域的图像分割技术,其基本原理是:通过设定不同的特征阈值,把图像像素点分为若干类.常用的特征包括:直接来自原始图像的灰度或彩色特征;由原始灰度或彩色值变换得到的特征.设原始图像为f(x,y),按照一定的准则在f(x,y)中找到特征值T,将图像分割为两个部分,分割后的图像为:(3.2.1)若取=0(黑),=1(白),即为我们通常所说的图像二值化。

一般意义下,阈值运算可以看作是对图像中某点的灰度、该点的某种局部特性以及该点在图像中的位置的一种函数,这种阈值函数可记作(3.2.2)式中f(x,y)是点(x,y)的灰度值;n(x,y)是点(x,y)的局部邻域特性.根据对T的不同约束,可以得到3种不同类型的阈值,即(1)点相关的全局阈值(3.2.3)只与点的灰度值有关(2)区域相关的全局阈值(3.2.4)与点的灰度值和该点的局部邻域特征有关(3)局部阈值或动态阈值(3.2.5)它与点的位置、该点的灰度值和该点邻域特征有关因此本文分三大类对阈值选取技术进行综述:1) 基于点的全局阈值方法;2) 基于区域的全局阈值方法3) 局部阈值方法和多阈值方法3.3 阈值分割方法的分类全局阈值法指利用全局信息对整幅图像求出最优分割阈值,可以是单阈值,也可以是多阈值;局部阈值法是把原始的幅图像分为几个小的子图像,再对每个子图像应用全局阈值法分别求出最优分割值。

其中全局阈值法又可分为基于点的阈值法和基于区域的阈值法。

阈值分割法的结果很大程度上依赖于阈值的选择,因此该方法的关键是如何选择合适的阈值。

由于局部阈值法中仍要用到全局阈值法,因此本文主要对全局阈值法中基于点的阈值法和基于区域的阈值法分别进行了研究。

根据阈值法的原理可以将阈值选取技术分为三大类3.3.1 基于点的全局阈值方法基于点的全局阈值算法与其他几大类方法相比,算法时间复杂度较低,易于实现,适合应用于在线实时图像处理系统。

3.3.2 基于区域的全局阈值方法对一幅图像而言,不同的区域,比如说目标区域或背景区域,同一区域内的象素,在位置和灰度级上同时具有较强的一致性和相关性。

3.3.3 局部阈值法和多阈值法局部阈值(动态阈值) 当图像中有如下一些情况:有阴影,照度不均匀,各处的对比度不同,突发噪声,背景灰度变化等,如果只用一个固定的全局阈值对整幅图像进行分割,则由于不能兼顾图像各处的情况而使分割效果受到影响。

有一种解决办法就是用与象索位置相关的一组阈值(即阈值使坐标的函数)来对图像各部分分别进行分。

这种与坐标相关的阈值也叫动态阈值,此方法也叫变化阈值法,或自适应阈值法。

这类算法的时间复杂性和空间复杂性比较大,但是抗噪能力强,对一些用全局阈值不易分割的图像有较好的效。

多阈值法很显然,如果图像中含有占据不同灰度级区域的几个目标,则需要使用多个阈值才能将他们分开。

其实多域值分割,可以看作单阈值分割的推广。

4 程序设计分析4.1 基于迭代的方法实现图像切割迭代法是基于逼近的思想,其步骤如下:(1)求出图象的最大灰度值和最小灰度值,分别记为和,令初始阈值(4.1.1)(2)根据阈值将图象分割为前景和背景,分别求出两者的平均灰度值和;(3)求出新阈值:(4.1.2)(4)若=,则所得即为阈值;否则转到第二步,迭代计算。

迭代所得的阈值分割的图象效果良好。

基于迭代的阈值能区分出图像的前景和背景的主要区域所在,但在图像的细微处还没有很好的区分度。

但令人惊讶的是,对某些特定图象,微小数据的变化却会引起分割效果的巨大改变,两者的数据只是稍有变化,但分割效果却反差极大经试验比较,对于直方图双峰明显,谷底较深的图像,迭代方法可以较快地获得满意结果。

但是对于直方图双峰不明显,或图像目标和背景比例差异悬殊,迭代法所选取的阈值不如最大类间方差法。

4.2 最大类间方差的方法实现图像切割由Otsu于1978年提出的最大类间方差法以其计算简单、稳定有效,一直广为使。

从模式识别的角度看,最佳阈值应当产生最佳的目标类与背景类的分离性能,此性能我们用类别方差来表征,为此引入类内方差、类间方差和总体方差。

最大类间方差法计算简单、稳定有效,一直广为使用,是一种受到普遍欢迎的阈值选取方。

其基本思路是将直方图在某一阈值处分割成两组,当被分成的两组的方差为最大时,得到阈值。

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

5 程序设计5.1 程序简单介绍程序除了有题目中要求的自编程序实现最大类间方差法外,还扩展了迭代法阈值分割,功能较多,为了使程序有良好的人机界面,主程序中提供了简单的菜单界面。

同时为了增加程序的可读性,分模块编写,然后在主函数中调用。

5.2 程序代码function main %主程序clear;close all; %清除变量,关闭所有窗口[name path]=uigetfile('C:\Documents and Settings\All Users\Documents\My Pictures\示例图片\Winter.jpg');%获取图片路径及文件名I=imread([path name]);%读图I=rgb2gray(I);%彩色转黑白while 1 %循环执行disp('0 原图1 OTSU 2 全局阈值3 迭代法4 退出');%提示信息select=input('请选择:'); %选择相应功能switch selectcase 0yuantu(I); %输入0 显示原图case 1 %输入1 OTSU法fun1(I);case 2 %输入2 全局阈值法fun2(I);case 3fun3(I) %输入3 迭代法case 4return; %输入4 退出otherwise %其他值不处理endend% OTSUfunction fun1(I) %阈值计算程序Ni=imhist(I);%计算直方图数组N=sum(Ni); %总像素点个数delamax=0; %类间方差最大值threshold=0; %阈值for k=2:255u=dot([0:255],Ni/N); %图像的总平均灰度级w0=sum(Ni(1:k)/N); %C0类像素所占面积的比例w1=1-w0; %C1类像素所占面积的比例if w0==0|w0==1 %当w0为1或0时提前结束本次循环continueendu0=dot([0:k-1],Ni(1:k)/N)/w0; %C0类像素的平均灰度u1=dot([k:255],Ni(k+1:256)/N)/w1; %C1类像素的平均灰度dela(k)=w0*(u-u0)^2+w1*(u-u1)^2; %类间方差公式%求出类间方差的最大值,最大时的那个值对应的k值存入delamax if dela(k)>delamaxdelamax=dela(k);threshold=k-1;endendBW1=im2bw(I,threshold/255); %阈值分割figureimshow(BW1),title('自编程序运行结果')%显示图片disp('自编程序求的的阈值:')%显示提示信息disp(threshold) %显示结果%调用系统函数OTSU阈值分割level=graythresh(I);%调用系统函数计算阈值BW2=im2bw(I,level); %阈值分割figureimshow(BW2),title('调用库函数运行结果')level=round(level*255);disp('调用库函数求得的阈值:')disp(level)%全局阈值function fun2(I) %阈值分割程序[width height]=size(I);;%获取图片宽高th=input('请输入阈值:');for i=1:widthfor j=1:heightif(I(i,j)<th) %灰度小于阈值时则为黑色BW1(i,j)=0;else % 灰度大于等于阈值时则为白色BW1(i,j)=1;endendendfigureimshow(BW1),title('全局阈值')%迭代法function fun3(I) %迭代法求阈值J=double(I);T=(min(J(:))+max(J(:)))/2; %T的初始阈值done=false; %done 的初始值为falsei=0;while ~done %当done为false是则执行循环r1=find(J<=T); %找出不大于T的所有像素点索引值r2=find(J>T); %找出大于T的所有像素点索引值Tnew=(mean(J(r1))+mean(J(r2)))/2; %计算新的阈值done=abs(Tnew-T)<1; %判断|T2-T1|是否小于T0T=Tnew;i=i+1;endJ(r1)=0; %小于等于阈值的为黑J(r2)=1 ; %大于阈值的为白figureimshow(J),title('迭代法求阈值')function yuantu(I) %显示原图figureimshow(I);title('原图')6 结果与分析图 6.1 原图,自编程结果图,调用库函数图不同阈值的全局阈值图,迭代法求阈值图的比较结果分析:调用系统函数与自编的程序求得的阈值一样,处理的结果完全一样。

相关文档
最新文档