1 绪论
- 课题研究背景及意义
运动目标检测是图像处理与计算机视觉的一个分支,在理论和实践上都有重大意义, 长久以来一直被国内外学者所关注。在实际中,视频监控利用摄像机对某一特定区域进行 监视,是一个细致和连续的过程,它可以由人来完成,但是人执行这种长期枯燥的例行监 测是不可靠,而且费用也很高,因此引入运动监测非常有必要 [1]。它可以减轻人的负担, 并且提高了可靠性。概括起来运动监测主要包括三个内容 [2]:运动目标检测,方向判断和 图像跟踪。运动目标检测是整个监测过程的基础,运动目标的提取准确与否,直接关系到 后续高级过程的完成质量。
- 国内外研究现状
运动目标检测在国外已经取得了一些的研究成果 [3],许多相关技术已经开始应用到实 际系统中,但是国内研究相对落后 ,与国外还有较大差距。传统的视频目标提取大致可以 分两类 ,一类以空间同性为准则 ,先用形态学滤波器或其他滤波器对图像作预处理 ;然后对 该图像的亮度、色度或其他信息作空间上的分割以对区域作边缘检测 ;之后作运动估计 ,并
合并相似的运动区域以得到最终的提取结果。如光流算法、主动轮廓模型算法。此类方法 结果较为准确但是运算量相对较大。另一类算法主要以时间变化检测作为准则 ,这类算法
主要通过帧差检测图像上的变化区域和不变区域 ,将运动物体与静止背景进行分割。此类 方法运算量小 ,提取结果不如前类方法准确。此外 ,还有时空结合方法、时空亮度梯度信息 结合的方法等等 [4]。本文将围绕以时间变化监测为基础的方法展开分析和讨论。
- 本文结构
第 1 章介绍了本文的研究意义及国内外发展状况;第 2 章分为四个部分详细讲述了运 动目标检测的方法,介绍了背景提取与更新算法,检测算法,阈值选取,形态学滤波等; 第三章对全文作出了总结。
2 运动目标检测的一般过程
- 背景提取与更新算法
在进行运动目标检测时,一个很重要的步骤就是区分出运动目标和背景范围,常见的 一种情况是摄像机处于静止状态并且焦距也是固定的。 此时,图像中的背景区域固定不动。 在这种情况下,运动目标识别无论是使用背景差法,还是使用背景差法结合帧间差法,质 量良好的背景的建立显得及其重要。另外,当涉及到背景的使用时,一旦背景发生一些变 化时,如背景中频繁地出现运动物体,或者光照发生变化、树叶等小物体的晃动等等,使 得不能准确地提取背景作为参考图像,从而不能正确地分割出视频序列中的运动物体。为 了克服上述问题,国内外众多研究人员提出了背景建立和自适应的背景模型,实现了背景 模型的实时更新,能够比较准确地识别出运动目标。在能够满足实时性和实用性要求的前 提下,讨论并研究下列几种算法 [5] 。
- 手动背景法 手动背景法需要人观察到没有前景物体时启动该帧图像,作为背景图像。这种背景提 取方法增加了人力和物力的需求,而且在很多情况下很难在没有前景的情况下获得背景图 像,比如高速公路的车辆监测系统、小区的门禁系统等等。这种方法不能实现自适应背景 更新的功能,需要使用其他方法修正由于光线,亮度等的变化带来的背景误差。
- 统计中值法 考虑到运动物体较少的情况下,连续多帧图像中背景的像素值占主要部分,这样在一 段时间内变化缓慢,取中值便可以认为是背景图像。统计中值算法从统计学的角度统计单 个像素点 Ai(x,y),(i=1,2, ⋯N)在连续帧图像中的亮度值 Bi。在一段时间内对视频序列图像的 亮度值(或者色彩信息 ) B i进行排序,然后取中值 M i(x,y)作为背景。该算法存在的问题在于: 图像帧的像素点大多以数万,数十万的数量级出现, 而用于取中值的图像帧数量 N 也应该 比较大。对如此大的数组进行排序取出中值,实现时计算量较大,处理较慢。同时需要占 用大量的内存单元用于存储数据。
- 算术平均法
采用算术平均法提取背景图像,可以总结为在特定的时间段内对像素点的亮度和色彩 信息取平均值,用均值作为背景图像对应像素点数值。在读入一段视频时,对某一像素点 进行观察,会发现在没有前景的运动目标通过时,该点的灰度值保持稳定,变化很小 ,只有
当前景的运动目标通过时,该点的灰度才会发生剧烈的变化。 这样就可以连续读入 N 帧图 像,对图像各点的灰度或色彩信息进行统计的方法,使得变化剧烈的像素点变得平缓,取 其平均值作为背景图像像素点的值。这样也可以滤除背景图像中的突变噪声点。其统计公 式如下:
N
B(x,y) N1 Ii(x,y) (2-1)
i1
公式中式中: B (x, y) 表示背景图像, Ii(x,y) 表示第 i 帧序列图像, N 表示平均帧数。在 实际场景中,一段时间内,同一区域很少有可能总是存在运动物体。而通过平均法得到的 背景就会消除亮暗分布不均匀的情况。
选取 N=120,MATLAB 仿真,从序列图像的第 1、60、120帧可以看出,在第 1 帧至第 120帧时都存在运动目标,如 2-1 图。经过对连续 120 帧计算算术平均值,得到了基本不 包含运动目标的背景图像,如 2-2 图。
(a)第 1 帧图像 (b)第 60 帧图像 (c)第 120 帧图像
图 2-1 各帧图像
图 2-2 算术法提取的背景图像
由上述仿真实验证明,算术平均法的特点是模型简单,计算方便,可以较好的得到背 景图像。但是在仿真过程中,也发现了该方法的一些问题。其中最明显的是,该算法得到 背景图像需要获取的图像帧较大。受运动物体数量的影响,随着平均帧数的增加,得到的 背景图像的质量越好。由于是求取序列图像的算术平均值,如果 N 值太小,背景图像中的
运动物体不容易被滤除,很容易在背景图像中留下“影子” 。而且在运动物体很多,轨迹 很固定的情况下,也需要加大 N 的数值,以使得平均值更加接近与真实的背景图像。在这 种情况下,背景的建立就需要较长的时间。本算法也有一定自适应更新功能。随着时间的 推移,在背景提取后获取的图像帧也可以作为新的信息量,与背景图像进行统计平均或加 权平均,实现背景的自适应更新。因此这种方法也使用于实时背景更新算法。
- Surendra 算法
Surendra背景更新算法 [6][7] 能够自适应地获取背景图像, 该算法提取背景的思想是对差 值图像的亮度值进行判断,如亮度大于阈值,背景图像对应位置的像素点保持不变,否则 利用当前帧对背景图像进行替换更新。其算法可以分成以下几个步骤:
- 将第 1帧图像 I1 作为背景 B1。
- 选取阈值 T,迭代次数 m=1,
- 求当前帧的帧差分图像
1 |Ii-Ii-1|>T
(2-2)
- 由二值0图 像|Ii-DiIi-更1|≤新T背 景图像
Bi-1(x,y)
(2-3)
αI i(x,y)+(1- α)I i-1(x,y) Di=0
式中 Bi(x,y) ,Di(x,y)为背景图像和差分二值图像在 (x, y)的灰度值,
帧图像, α为更新速度
- 迭代次数 m=m+1,进行第 (3)步的运算。当迭代次数 m=MAXSTEP 时结束迭代,此 时 Bi(x,y) 可当作背景图像。
选取 MAXSTEP=80 ,α=0.1,选取固定阈值 T=20。在 MATLAB 中进行仿真
第 30 帧背景(灰度) 第 30 帧图像
第 80 帧背景(灰度) 第 80 帧图像
图 2-3 Surendra 算法提取的背景图像
在仿真研究中发现 ,MAXSTEP 很大程度地决定了背景建立时的速度, α则决定背景更 新的速度。这种背景建模和更新的方法,能够很好地解决物体长时间停留对背景的影响, 因为背景的更新会将它逐步地作为背景像素点更新到背景中。但是由于它的基本处理方式 是帧间差分,使得它不能将色彩、亮度相似的,大面积的运动物体完整的检测出来。这种 情况下,运动物体的某些部分将作为背景区域更新到背景中。
- 其他算法
国内外已有的背景提取与更新算法远不止上述几种,如混合高斯模型,分块统计算法 等也是目前比较常见的算法,其主体思想与算术平均法类似,只是在做法上有区别。由于 绝大多数算法都是基于 PC 机的实现,很少将算法的实时性作为参考要素。
- 动目标检测算法研究
在实际的安防与监控应用中,大多考虑摄像头固定的情况。因此本文在研究运动目标 检测算法时,也做如下假设:摄像头固定,只对视场内的目标进行检测,离开视场后再次 进入的物体被视为新目标。目前,大多数的运动目标检测的方法或是基于图像序列中时间 信息的,或是基于图像序列中空间信息的。常见的方法有如下 3 种[8] :
- 光流法 当目标运动时,图像上对应目标的亮度信息(光流)也相应的运动。这样,根据时间 上相邻的几帧图像可以计算出各像素点运动的大小和方向,从而利用运动场来区分背景和 运动目标。其主要优点在于能检测出独立的运动目标,而不需预知场景的任何信息,对变 化的复杂背景情况有较好的适应。但其缺点也很明显,由于要依赖光流估计的准确程度, 大多数计算方法相当复杂并且计算量特别大,所以除非有特殊的硬件支持,否则很难实现 实时检测。
- 背景减法 将实时视频流中的图像像素点灰度值与事先已存储或实时得到的视频背景模型中的 相应值比较,不符合要求的像素点被认为是运动像素。这是视频监控中最常用的运动检测 方法。这种方法虽然能较完整的提取运动目标,但对光照和外部条件造成的环境变化过于 敏感,常常会将运动目标的阴影错误的检测为其自身的一部分。同时由于时间流逝,实际 场景的多种因素都会发生变化,比如停留物的出现、光线等的变化、运动目标对背景的遮 挡等等,背景需要得到实时地更新,这是影响其检测效果的一个重要因素。
- 帧间差法
帧间差法是根据当前图像与参考图像的差别来获得运动目标轮廓的方法。这种方法对 于场景中的光线渐变不敏感,适于动态变化的环境,且运算量相对较小。但一般不能完整 的提取运动目标,且在运动实体内易产生空洞现象,从而不利于下一步的分析和处理。
针对前面 3 种常见算法,只进行帧间差分法和背景差分法的研究于仿真。光流法由于 很难达到实时性要求,因此不做研究。
2.2.1 帧间差法运动目标检测
基于帧间差分的运动检测即帧差法,它根据相邻帧或隔帧图像间亮度变化的大小来检 测运动目标,帧间差分公式如下:
Di(x,y)=Ii(x,y)
Ii(x,y) ,Ii-1(x,y) 为前后两帧图像, 式如下,其中 T 为门限值。
1,Di>T
M i(x,y)=
0,Di≤T
选取 T=20,仿真结果如下图: 第 19 帧图像
图 2-4 帧间差分实验
由上面的仿真实验可以得出:运用帧间差分方法进行运动目标的检测,可以有效的检 测出运动物体。右子图中,可以比较清晰地得到运动物体的轮廓。但是,这种算法虽然可 以使背景像素不随时间积累,迅速更新,因此这种算法有比较强的适应场景变化能力。但 是帧差法表示的是相邻两帧同位置的变化量,因此很有可能将比较大的运动目标,或者运 动目标内部颜色差异不大的像素判断错误,在实体内部产生拉伸、空洞现象 [8] 。而且当前
景运动很慢且时间间隔选择不合适时, 容易出现根本检测不到物体的情况。 在差分图像中, 有很多“雪花”般的噪声,这些是由于图像局部的干扰造成的。本文随后的章节将对如何 消除这些噪声进行讨论。使用帧间差分法,需要考虑如何选择合理的时间间隔,这一般取 决于运动目标的速度。对于快速运动的目标,需要选择较短的时间间隔,如果选择不当, 最坏情况下目标在前后两帧中没有重叠, 被检测为两个分开的目标; 对于慢速运动的目标, 应该选择较长的时间间隔,如果选择不当,最坏情况下目标在前后两帧中几乎完全重叠, 根本检测不到目标。此外,在场景中由于多个运动目标的速度不一致也给时间间隔的选取 带来很大麻烦。
- 背景减法运动目标检测
背景差分算法的实质是:实时输入的场景图像与背景图像进行差分,可以较准确的分 割出运动目标。但是背景差分算法也有其天然的缺陷,随着时间的推移,场景的光线、树 叶的遮挡、或者运动物体滞留都会很大程度的破坏已经建立好的背景图像。为了解决这些 问题,最好的方法便是使用背景建模和背景更新算法来弥补。前面已经讨论过相关问题, 因此,本文假设背景处于理想情况下进行背景差分算法的研究。设 (x, y)是二维数字图像的 平面坐标,基于背景减法的二值化数学描述为:
Di(x,y)=|Ii(x,y) - Bi(x,y)| (2-6)
1,Di>T
Mi(x,y) = (2-7)
0,Di ≤T
Ii(x,y) 表示图像序列中当前帧的灰度图像, Bi (x, y) 表示当前帧背景的灰度图像 ,Mi(x,y)
表示相减后的二值化结果, T 表示对应的相减后灰度图像的阈值,选取固定阈值 T=20,基
于背景减法的 MATLAB 仿真,如图
第 25 帧图像 第 25 帧背景
第 85 帧图像 第 85 帧背景
第 145 帧图像 第 145 帧背景
图 2-5 背景差分实验
Surendra算法计算出背景图像,左图为原始输入图像,中图为背景图像,右图为背景 差分法得出的二值化图像。实验结果表明:背景差分算法也可以有效地检测出运动目标。
由于背景建模算法的引入,使得背景对噪声有一定的抑制作用,在差分图像中“雪花”较 帧间差分算法有所减少。同时,使用背景差分算法检测出的运动物体轮廓,比帧间差分法 的检测结果更清晰。因此,在背景建模与背景更新处于比较理想的状态下,背景差分算法 得到的差分结果略好于帧间差分的结果。
2.3 阈值的选取
Surendra算法提取背景及目标提取都需对图像二值化。分割阈值的选取虽看似简单, 但直接影响目标的分割效果,阈值 T 增大,虽然可以一定量的减少环境对效果的影响,但 同时也会将差分结果中变化不明显的区域作为前景被忽略掉;阈值 T 减小,效果却又恰恰
相反。前面提到的相关算法中,阈值的选取都是采用的静态固定阈值。这种阈值的选取方 法在实际运用中是不可取的,因为在视频监控应用中,监控者不可能随时对监控质量做出 评估并相应的修改阈值。所以,研究人员提出了许多阈值的选取方法。但是到目前为止还 不存在一种通用的方法,也不存在一个判断分割是否成功的客观标准。
阈值法可以分为全局阈值法和局部阈值法两种 [9] 。全局阈值法是指在在整幅图像范围 内用同一阈值来进行二值化处理的方法;局部阈值法是当图像中的敏感度不均匀,以慢斜 率变化时,将图像分割成几个子块。如果在每个子块中可以找到最佳阈值,就称这样的的 阈值确定方法为局部阈值法。本文选用循环分割法来自适应地得到在二值化一幅图像时所
需要的全局阈值 T。基本步骤如下:
- 选择一个 T 的初始估计值
- 用 T 分割图像。这样做会生成两组像素: G1 由所有灰度值大于 T 的像素组成,而 G2 由所有灰度值小于或等于 T 的像素组成。
- 对区域 G1 和 G2 中的所有像素计算平均灰度值 μ1 和μ 2。
- 按下式计算新的阈值。
T=1/2(μ2+μ1)
- 重复步骤 (2)到(4),直到逐次迭代所得到的 T 值之差小于预先定义的参数。 当背景和对象在图像中占据的面积相近时,好的 T 的初始值就是图像的平均灰度值。 如果对象与背景所占的面积不相近时,则其中一个像素组合会在直方图中占主要地位,平 均灰度值就不是好的初始选择。 此时,T 更合适的初值是诸如灰度值的中间值一类的初值。 对车辆检测进行仿真时,由于车辆与背景面积相差较大,选用的初值就是最大灰度和最小 灰度和的一半。进行阈值计算时还应注意迭代速度和精度的矛盾。 [10]
2.4 形态学滤波
由于刮风、气流等原因,背景中部分物体小幅度晃动;光线的变化等不确定因素,会 使得视频图像产生大量噪声,当差值图像二值化后,仍然有很多无用的噪声斑点,可参见 图 2-6 、图 2-7 。因此,需要采用数学形态学方法,对分割后的二值图像进行形态学滤波。 数学形态学的主要用途是获取物体拓扑和结构信息。它通过物体和机构元素相互作用的某 些运算,得到物体更本质的形态。其基本思想是:利用一个成为结构元素的“探针”收集 图像信息。这种基于探测的思想与人的视觉特点有类似之处:总是关注一些感兴趣的物体 或者结构,并有意识地寻找图像中的这些结构。 数字形态学在本文所涉及到的图像处理中, 主要作用包括利用形态学的基本运算,对图像进行观察和处理,从而达到改善图像质量的 目的。
形态学的基本运算包括:腐蚀 (Erosion)、膨胀 (Dilation) 、开 (Opening)和闭 (Closing)运 算。用这些算子及其组合来进行图像形状和结构的分析及处理, 包括图像分割、 特征提取、 边界检测、图像滤波、 图像增强与恢复等方面的工作。 形态学一般以二值图像为处理对象, 但也可以用在某些灰度图像的应用中。
- 结构元素 结构元素被形象的称为刷子或探针,是膨胀和腐蚀操作中最基本的组成部分。 它用于测试输入图像,通常比待处理图像小得多。本文使用 3×3 的结构元素,经开 运算处理后,可提取出移动物体。二维结构元素由一个数值为 0 或 1 矩阵组成。结构元素 的原点指定了图像中需要处理的像素范围,结构元素数值为 1 的点决定结构元素的领域像 素在腐蚀或膨胀操作是需要参与计算。
- 腐蚀和膨胀 腐蚀和膨胀是许多形态学算法的基础。腐蚀操作会去掉物体的边缘点,细小物体所有
的点都会被认为是边缘点,因此会整个被删去。再做膨胀时,留下来的大物体会变回原来
的大小,而被删除的小物体则永远消失了。膨胀操作会使物体的边界向外扩张,如果物体 内部存在小空洞的话,经过膨胀操作这些洞将被补上,因而不再是边界了。再进行腐蚀操 作时,外部边界将变回原来的样子,而这些内部空洞则永远消失了。
通常设X为图像矩阵,B为结构元素矩阵,数学形态学运算时,用B对X进行操作。 实际上,结构元素本身也是一个图像矩阵。 这里对每个结构元素矩阵 B 指定一个原点 origin
X 被 B 腐蚀的定义为 [11] :
X B z| B z A (2-9) 这个公式说明,使用 B 对 X 进行腐蚀是所有 B 中包含于 A 中的点的集合用 x 移。 图 2-6 显示了实际上的腐蚀运算,左边是被处理的图象 X( 二值图象,针对的是黑点 ), 中间是结构元素 B,那个标有 origin 的点是中心点,即当前处理元素的位置,右边是腐蚀 后的结果。可以看出,它仍在原来 X 的范围内,且比 X 包含的点要少,就象 X 被腐蚀掉 了一层[12] 。
图 2-6 腐蚀运算
这个公式表示用 B 膨胀 X 的过程是,相对 B 做关于中心像素的映射,在将其映射平 移 x ,这里 X 与 B 映像的交集不为空集。
图 2-7 显示了实际上的腐蚀运算,左边是被处理的图象 X( 二值图象,针对的是黑点 ), 中间是结构元素 B,右边是膨胀后的结果。可以看出,它包括 X 的所有范围,就象 X 膨胀 了一圈似的 [12] 。
图 2-7 膨胀运算
对图 2-5 中各差分后的二值图像先进行腐蚀再进行膨胀,所得效果如图 2-8 所示
- 开启和闭合 开启就是相对图像进行腐蚀,然后膨胀其结果。闭合就是先对图像进行膨胀,然后腐 蚀其结果。开启一般使对象的轮廓变得光滑,断开狭窄的间断和消除细的突出物。闭合同 样使轮廓线变得光滑,但是开启相反的是,它通常消除狭窄的间断和长细的鸿沟,消除小 的孔洞,并填补轮廓线中的断裂开启。
使用结构元素 B 对集合 X 进行开启操作,表示为 X B ,定义为 [11]:
X B A B B (2-11) 使用结构元素 B 对集合 X 进行闭合操作,表示为 X B ,定义为 [11]:
(2-12)
3 实验结果及分析
本文着重研究了利用背景减法进行目标检测在 Matlab 中的实现方法。利用 像处理功能来实现经典的图像处理方法 ,简化了算法 ,达到了检测目标的预期效果 目标跟踪、目标分类等奠定了基础。本文经过如图 2-9 所示的流程能够达到如图 的效果:
图 2-9 检测过程
第 25 帧 第 85 帧 第 145 帧
图 2-10 检测效果 实践证明该方法具有很高的准确度。
参考文献
- 马颂德,张正友. 《计算机视觉——计算理论与算法基础》 .科学出版社, 1999: 124~166
- Ed Chang, AVideh Zakhor. Scalable Video.IEEE Trans. On Cirouits and Systems for Video
Technology,V ol.7,NO.5,pp.256-289,October 1997
- 刘贵喜,邵明礼.真实场景下视频运动目标自动提取方法.光学学报.第 26 卷,第 8 期
- 毛燕芬,施鹏飞.基于对象的视频图像分割技术.中国图象图形学报, 2003 ,8A(7) :726~731
- 贺贵明,吴元保. 《基于内容的视频编码与传输控制技术》 ,武汉大学出版社, 2005: 40~ 50
- 彭小波,邢晓正,胡红专. Matlab 与 VC++ 混合编程在光斑位置测量中的应用.仪器仪表学报,
2003, 28(4): 222~ 223.
- 徐方明,卢官明.基于改进 surendra背景更新算法的运动目标检测算法.山西电子技术. 2009年
第5期
- (日本)谷口庆治编,朱虹等译. 《数字图像处理 (应用篇 )》,科学出版社: 292 ~ 297
- 黄磊,于曼曼.基于背景差分的运动目标检测研究.软件导刊.第 8 卷,第 6 期 2009 年 6 月
[9] (日本)谷口庆治编,朱虹等译, 《数字图像处理 (基础篇 )》,科学出版社: 80~81
- 王世香.《精通 MATLAB 接口与编程 [M] 》.电子工业出版社, 2007 .
- 章霄,董艳雪,赵文娟。 《数字图像处理技术》 ,冶金工业出版社: 219 ~225
[12]
附录
运动目标检测 matlab程序 :
clear
clc
nStar = 1;
nNUM = 164;
Background = double( rgb2gray(imread( [ 'car (',int2str(nStar),').bmp']) ));%第一帧当做初 始背景
% 背景更新过程
for k = nStar+1 :1: nNUM
CurrentImage =double(rgb2gray(imread( [ 'car (',int2str(k),').bmp'] ))); % 当前帧 FormerImage =double(rgb2gray(imread( [ 'car (',int2str(k-1),').bmp'] ))); % 前一帧 ID =uint8(abs( CurrentImage - FormerImage )); % 帧间差分 % 选择阈值
T=yuzhi(ID); % 迭代法计算二值化阈值,比较耗时
BW = im2bw(ID,T/255);
% 更新背景
alpha = 0.1; %背景更新的速度
CurrentBack = Background.*BW + ( alpha.* CurrentImage + ( 1-alpha ).* Background ).*( 1 -BW );% 前后两帧有变化的区域不更新,无变化的区域更新到背景中去 Background = CurrentBack;%背景更新完毕 Cut=abs(CurrentImage-Background);%前景与背景差分
Cut=uint8(Cut);
Tcut=yuzhi(Cut);%迭代法计算二值化阈值,比较耗时 BWCut=im2bw(Cut,Tcut/255);% 差分后的图像进行二值化 SE=[1 1 1;1 1 1;1 1 1];%结构元素
BWCutero=imerode(BWCut,SE);%对二值图像进行腐蚀,以消除微小变动的区域 BWCuterodil = bwmorph(BWCutero,'dilate',3);% 膨胀 figure(1),imshow(BWCuterodil),title(' 差分后的二值化图像 ') figure(2),imshow(imread( [ 'car (',int2str(k),').bmp'] ))
[L,nm] = bwlabel(BWCuterodil,8);% 找出图像中的八连通区域,视为车辆所在的区 域
for i = 1:nm
[r,c] = find(L == i);
left= min(c);
right= max(c);
top= min(r); buttom= max(r); width=right - left + 1; height = buttom - top + 1; rectangle('Position',[left,top,width,height],'EdgeColor','r');%对车辆用矩形标记 pause(0.01); end end %用来计算灰度图像二值化时的阈值,采用迭代法 function m=yuzhi(Imgray) mingray=min(min(Imgray)); maxgray=max(max(Imgray));
m=double(mingray)/2+double(maxgray)/2; %初始分割阈值
while 1 a=find(Imgray<=m);
A=sum(Imgray(a))/length(a); b=find(Imgray>m);
B=sum(Imgray(b))/length(b);
n=(A+B)/2;
if abs(m-n)<1
break;
else
m=n;
end
end