《[工学]基于粒子群优化算法的图像分割系统的设计.doc》由会员分享,可在线阅读,更多相关《[工学]基于粒子群优化算法的图像分割系统的设计.doc(42页珍藏版)》请在三一办公上搜索。
1、基于粒子群优化算法的图像分割系统的设计目录第一章 绪论41.1 研究的背景和意义41.2 粒子群优化算法的研究和应用现状51.2.1 粒子群算法的研究方向51.2.2粒子群算法的应用现状61.3 图像分割方法概述71.3.1区域生长和分裂合并法81.3.2分水岭法81.3.3 阈值法81.3.4边缘检测法81.4 研究内容与章节安排9第二章 图像分割方法92.1 阈值法92.1.1最佳熵阈值法102.1.2 最大类间方差法(Otsu)102.1.3粒子群优化算法(PSO)112.2 基于边缘检测的图像分割13第三章 基于粒子群优化算法的图像分割系统设计133.1 环境配置133.2 系统模块1
2、83.2.1 界面设置183.2.2 算法部分代码21第四章 实验仿真304.1 基于阈值的图像分割程序及结果分析304.2 基于边缘检测的图像分割方法的仿真结果及分析33第五章 总结与展望37致 谢38参考文献39基于粒子群优化算法的图像分割系统的设计中文摘要本文通过对粒子群优化算法的研究,采用Java编程,设计出一套用于图像分割的系统。基于粒子群优化算法的图像分割系统,可以将一幅给定的图像进行分割,然后将分割结果保存。图像分割的目的是将感兴趣的区域从图像中分割出来,从而为计算机视觉的后续处理提供依据。图像分割的方法有多种,阈值法因其实现简单而成为一种有效的图像分割方法。而粒子群优化(PSO
3、)算法是一类随机全局优化技术,它通过粒子间的相互作用发现复杂搜索空间中的最优区域缩短寻找阈值的时间。因此,基于粒子群优化算法的图像分割以粒子群优化算法为寻优工具,建立具有自适应和鲁棒性的分割方法。从而可以在最短的时间内,准确地确定分割阈值。关键词: 粒子群优化(PSO),图像分割,阈值法,鲁棒性AbstractThis paper based on the particle swarm optimization algorithm, designs a set of system for image segmentation using Java programming. Image segm
4、entation system based on particle swarm optimization algorithm, the image can be a given segmentation, and then the segmentation results would be saved. Image segmentation is the purpose of the interested area from the image, thus providing the basis for the subsequent processing of computer vision.
5、 There are many methods of image segmentation, threshold method since its simple realization, becomes a kind of effective method in image segmentation. Particle swarm optimization (PSO) algorithm is a stochastic global optimization technique; it finds optimal regions of complex search spaces for thr
6、eshold time shortened through the interaction between particles. Therefore, particle swarm optimization algorithm of image segmentation based on particle swarm optimization algorithm based on optimization tools; establish segmentation method with adaptive and robust. Therefore, it is possible for us
7、 in the shortest possible time to accurately determine the segmentation threshold.Key words: PSO, image segmentation, threshold method, robust.第一章 绪论1.1 研究的背景和意义随着计算机信息技术的不断向前发展,人们越来越多地利用计算机来获取和处理视觉图像信息。据统计,人类从外界获取的信息中有80%是来源于视觉或者说是图像信息,这包括图形、图像、视频、数据、文本等。作为人类最有效的交流方式和信息获取,图像也因其所含的信息量大且表现直观而在多媒体技术中占
8、据了重要地位。 所谓图像处理,就是对图像信息进行处理来满足人的视觉心理或应用需求的行为。在对图像处理的研究及应用中,人们往往只对图像中的某些部分感兴趣,这些感兴趣的部分称为目标或前景,一般对应图像中特定的、具有独特性质的区域,剩余的部分则称为背景。而图像分割的目的就是把图像分割成各具特性的区域并从中提取出感兴趣目标的技术和过程。多年来,对图像分割的研究一直是图像技术研究中的焦点和热点,人们对其的关注不断提高。它是一种重要的图像分析技术,是图像处理到图像分析的关键步骤,也是计算机视觉领域低层次视觉中的主要问题。图像分割结果是图像特征提取及识别等图像理解的基础,对图像的加工主要处于图像处理的层次,
9、图像分割后,对图像的分析才成为可能。另外,图像分割也广泛的应用于实际生活中,特别是近年来随着计算机技术以及图形图像学的飞速发展,使得图像分割技术成为了其它很多研究领域能否顺利发展的一个重要基础。阈值法因其实现简单和运算效率高而成为了一种有效的图像分割方法,阈值的确定则是阈值法图像分割的关键,然而为了使分割结果更为准确而要在一幅多峰直方图的全灰度范围内搜索一个最佳多阈值组合,问题将变得非常复杂耗时,无法满足实时性的要求,严重阻碍了该方法的发展。因此,寻求一种高效快速的算法来解决基于多值闽值图像分割的问题将具有重要的意义。 粒子群算法(Particle Swarm Optimization, PS
10、O) 是一种新近出现的启发式全局优化算法1,该算法源于鸟类捕食行为的模拟。粒子群优化算法首先初始化一群随机粒子,然后通过迭代找到最优解。在每次迭代中,粒子通过跟踪两个“极值”来更新自己。一个是粒子本身所找到的最优解,即个体极值;另一个是整个种群目前找到的最优解,称之为全局极值解。粒子群优化算法在全局优化问题中,无论是收敛速度还是全局寻优能力,都表现出了很好的性能。而基于阈值法的图像分割问题从某种意义上讲就是一个全局优化问题。1.2 粒子群优化算法的研究现状 粒子群优化算法是由美国社会心理学家James Kennedy博士和电气工程师Russell Eberhart博士在1995年共同提出的2,
11、其基本思想是受他们早期对鸟群行为研究结果的启发,是一种群体智能优化算法。它己成为与遗传算法、蚁群算法和模拟退火算法并行发展的一种全局优化算法。粒子群算法同遗传算法类似,也是通过个体间的协作和竞争实现全局搜索,但它没有遗传算法的交叉以及变异算子,而是粒子在解空间追随最优粒子进行搜索。由于算法的高效性和易实现性,该算法己经成功地运用于神经网络训练、工业系统优化及控制等领域3,并取得了很好的效果。群体智能己成为人工智能所研究的一个重要领域。在美国成立了专门的组织研究群体的仿真。由欧洲联盟资助的群体智能相关研究项目,也于2001年在欧洲多个研究机构启动。在国内,国家自然科学基金“十五”期间学科交叉类优
12、先资助领域中,认知科学及其信息处理的研究内容就明确列出了群体智能的自适应、进化与现场认知以及复杂系统与复杂性。在2001年3月8日北京召开的第六届全国人工智能联合会议暨“863”计划智能计算机主题学术会议中,戴汝为院士特邀报告的主要内容就是群体智能的研究进展。到现在,国家自然科学基金委员会基本上每年都资助数项粒子群优化算法相关理论和应用的研究。IEEE计算智能协会自2003年起每年举行一次群体智能会议,而粒子群优化算法是会议的重要主题。1.2.1 粒子群算法的研究方向自粒子群优化算法问世以来,由于它的易实现性和计算快速性,引起了国内外相关领域众多学者的关注及研究,目前粒子群优化算法的理论与应用
13、研究都取得了很大的进展,对于算法的原理己有了初步的了解,算法的应用也在不同学科中得以实现。这些研究领域主要集中在三个方面:算法的改进、分析以及应用。在粒子群算法的改进方面,Russell C.Eberhart通过在PSO中引入拓扑结构求解动态优化问题4;Toby J.Richer等提出了Levy PSO算法,利用概率分布指导搜索过程。Kang Qi等人提出了基于万有引力模型的PSO算法;孙军等将量子理论引入到PSO中提高算法的收敛性,并应用于聚类分析得到良好效果;高鹰等提出了基于生物免疫系统的IM-PSO,提高了进化后期算法的收敛速度和精度;曾传华等提出了强社会认知能力的PSO算法,提高了全局
14、搜索能力;高雷阜等提出了基于混沌的弹性粒子群全局优化算法,增强了算法摆脱局部极值点的能力;罗德相等提出了基于扩张变异的云自适应粒子群算法,解决了维数灾的困扰许多学者在粒子群优化算法的收敛性分析和行为分析方面进行了大量的研究工作。首先,采用代数方法对典型的PSO算法的运行轨迹进行了分析,给出了保证收敛的参数选择范围。Van den Bergh F引用了Sobs和Wets关于随机性算法的收敛准则,证明了标准POS算法不能收敛于全局最优,甚至不能收敛于局部最优。在具体应用方面,粒子群广泛应用于神经网络的训练,各类连续问题和离散问题的参数优化,例如在模糊控制器的设计、机器人路径规划、信号处理和模式识别
15、,数据挖掘中的特征提取、规则发现和分类、聚类等问题5上均取得了良好的效果。除了以上领域外,PSO在多目标优化、自动目标检测、生物信号识别、决策调度、系统辨识以及游戏训练等方面也取得了一定的成果。1.2.2粒子群算法的应用现状 实际应用方面,粒子群优化算法己经在优化问题求解、电力系统、人工神经网络训练等诸多领域得到了成功应用。(一) 经典优化问题求解a) 组合优化。旅行商问题(TSP)是一类经典的组合优化问题,继蚁群算法之后,粒子群优化算法通过一定的改进及变形也成功用于该问题的求解。b) 约束优化。粒子群优化算法己被有效应用于约束优化问题的求解。例如,工业下料中,要求在固定面积的材料上约束所需毛
16、坯个数而使整块材料浪费最小的优化问题等。c) 多目标优化。通过对粒子群算法中全局极值和个体极值选取方式的改进,可实现对多目标优化问题最优解集的搜索。(二) 人工神经网络训练应用采用一定的优化算法进行神经网络的训练可以提高神经网络的自学及自组织能力。目前,优化算法对神经网络的训练主要集中在网络拓扑结构和网络连接权重上。神经网络的训练问题是属于超高维的优化问题。常用的反射传播算法(BP)难以克服陷入局部最优问题,而遗传算法由于其操作的复杂,优化速度比较缓慢。实验研究表明,PSO是一种很有潜力的神经网络训练算法,PSO搜索速度快而且得到的优化结果较优,克服了上述两种算法的缺点。(三) 电力系统中的应
17、用粒子群优化算法在电力系统优化中有着广泛的应用,例如在配电网扩展规划、机组组合、检修计划、无菌优化控制、负荷经济分配、参数辨识、谐波分析与电容配置、优化设计等方面。口本的Fuji电力公司的研究人员将著名的RPVC(Reactive Power and Voltage Control)问题简化为求解函数的最小值问题,并用改进的PSO算法进行优化求解。与传统方法如专家系统、敏感性分析相比较,结果证明了PSO算法在解决该问题上的优势。1.3 图像分割方法概述图像分割是图像处理和计算机视觉领域的研究热点之一,也是图像识别的重要基础。图像分割技术6的优劣决定着最终的图像分析和图像理解的结果和质量,只有通
18、过细致精确的图像分割,才能使得更高层的图像分析和理解成为可能。图像分割问题实质上是一个在复杂的参数空间中寻求最优分割参数的问题。图像分割方法包括阈值法、边缘检测法7和区域增长法8等。其中阈值分割法实现最为简单,使用最普遍。阈值选取方法有多种如直方图双蜂法9、最大熵法10、Otsu法等以及这些方法在二维空间上的推广。在这些方法中,Otsu最大类间方差法11应用的是图像灰度的统计信息,该方法分割效果好、适用范围广得到了广泛的应用。但是和其它分割方法一样,它同样存在计算量大、计算时间长的问题。1.3.1区域生长和分裂合并法区域生长算法的基本思想是将具有相似性质的像素集合起来构成区域,即对每个要分割的
19、区域先找一个种子像素作为生长点,然后将其周围邻域中具有相似性质的像素合并到其所在的区域中。区域分裂合并算法是将输入图像先任意分成初始的区域,然后根据图像的统计特性设定区域的相似性准则,分裂或合并这些区域,满足分割的要求。区域生长和分裂合并法都能够将分割深入到像素级,可以保证较高的分割精度,由于同时考虑了像素的相似性和空间上的邻接性,能有效消除孤立噪声的干扰,具有一定的鲁棒性。但种子点的和相似性准则的设置是个难点,其设置的好坏在很大程度上直接影响到分割的效果。1.3.2分水岭法分水岭法是一种基于拓扑理论的数学形态学和区域增长的分割方法,得到的是连续、闭合但像素宽的目标的边界,它对于噪声和细密纹理
20、非常敏感,容易产生过分割问题,可通过分水岭变换前的预处理减少过分割区域的数量,或者分割后对结果图像进行区域合并解决这一问题。1.3.3 阈值法阈值法是基于区域的分割算法中的一种最常用的分割技术,其本质是按照某个准则自动求出最优阂值,把像素点按灰度级进行聚类实现分割的过程。早在1988年Sahoo等人就对阈值法作了回顾,1993年吴一全等对1962至1992三十年间图像处理中闲值方法的进展进行综述,2001年章毓晋也总结了阈值分割的方法。阈值法分为单阈值分割、双阈值分割和多阈值分割。常用的阈值法包括直方图法和直方图变换法、最大类间方差法及最小误差法、最大熵法、二维阈值化法和模糊阈值法等。1.3.
21、4边缘检测法基于边缘检测的分割方法是指利用不同区域间像素灰度或颜色的不连续性检测出区域的边缘,从而实现图像分割。边缘检测分为三个步骤:首先利用边缘检测算子检测出图像中可能的边缘点;其次对有一定厚度的边缘进行复杂的边缘细化;最后利用边缘闭合技术得到封闭的边缘。边缘检测法主要包括:基于局部图像函数的方法、基于边界曲线拟合的方法、图像滤波和多分辨率方法。基于边缘检测的图像分割方法的难点在于如何处理抗噪性和检测精度之间的关系。如果提高抗噪性则会产生轮廓漏检和位置偏差;若提高检测精度,则噪声产生的伪边缘会导致不合理的轮廓。因而很多学者提出各种多尺度边缘检测方法能较好地兼顾抗噪性和检测精度。1.4 本论文
22、的主要内容本文通过对粒子群优化算法的研究,采用Java编程,设计出一套用于图像分割的系统。基于粒子群优化算法的图像分割系统,可以将一幅给定的图像进行分割,然后将分割结果保存。在第二部分主要介绍了系统设计及环境配置情况;第三部分系统地介绍了两大类图像分割方法,是本文的主体部分,我参考资料着重介绍了阈值法中的3种图像分割方法,在了解阈值法法的原理后,然后对比最大类间方差方法,粒子群优化算法,通过eclipse仿真,得出基于粒子群优化算法的图像分割效果图像。第二章 图像分割方法2.1 阈值法阈值分割法实际上就是按照某个准则函数求最优阈值的过程,是一种广泛应用的分割技术,利用图像中要提取的目标物与其背
23、景在灰度特性上的差异,把图像视为具有不同灰度级的两类区域(目标和背景)的组合,选取一个合适的阈值,以确定图像中每个象素点应该属于目标还是背景区域,从而产生相应的二值图像。设是二维灰度图像上的点,图像灰度级(一般0代表最暗的像素点,代表最亮的像素点),坐标点上的像素点对应的灰度级为。设为分割阈值,代表二值灰度级,且。灰度函数在阈值上的分割结果为: (1)2.1.1最佳熵阈值法最大熵阈值法的基本依据是使得图像中目标与背景分布的信息量最大,即通过测量图像灰度直方图的熵,找出最佳阈值。信息论中,Shannon熵的定义: (2)其中是随机变量的概率密度函数,一般对应灰度图像的灰度值。将Shannon熵概
24、念用于图像分割时,通过研究图像灰度直方图的熵测量,由此自动找出分割图像的最佳阈值。根据Shannon熵概念,对于灰度范围在的图像,其熵为: (3)其中为灰度级出现的概率,对于图像灰度级的图像,为分割阈值,设,表示灰度级的像素个数,表示图像的像素总数。则图像的熵的最佳阈值使得总熵取最大值。其中,。2.1.2 最大类间方差法(Otsu)最大类间方差是由日本学者大津于1979年提出的一种自动确定阈值的方法,又叫大津法。该方法是在判别分析最小二乘法原理的基础上得到的,按照图像的灰度信息,将其分成几个不同的类别,且各类别间的类间方差越大,构成图像的各个类别间的差别就越大。最大类间方差以类间方差为依据,选
25、取类间方差最大的灰度值为最佳阈值,将图像分割成目标和背景两个区域。设图像灰度级为,第级像素个,第级灰度出现的概率为: (4)其中。设灰度阈值为,则图像像素按照灰度级被分为两类:。图像总平均灰度级为: (5)其中类的平均灰度级为:,像素数为:; 类的平均灰度级为:,像素数为:。图像的总均值为:,其中、分别表示、在图像中所占的比例,。对于给定图像类间方差为: (6)整理得: (7)从变化,使得最大的,即为最佳阈值,为最佳目标选择函数。2.1.3粒子群优化算法(PSO)粒子群优化算法7采用速度-位置搜索模型,每个粒子代表解空间的一个候选解,解的优劣程度由根据具体优化问题建立的适应度函数决定的。设目标
26、搜索空间为维,群体有个粒子,为第个粒子的位置,根据事先设定的适应度函数计算的适应度,用以衡量粒子位置的优劣; 为第个粒子的飞行速度,为粒子当前搜索到的最优位置,即为个体最优位置,记为;为整个种群当前搜索到的最优位置,即为全局最优位置,记为。在粒子群最优算法中,每个粒子的速度和位置按照以下公式进行更新: (8) (9)其中,为学习因子,是随机数。算法的主要步骤描述如下:Step1 初始化粒子群,设定群体规模,加速常数,以及最大迭代次数,随机产生每个粒子的初始位置和初始速度;Step2 计算并评价每个粒子的适应度值;Step3 将每个粒子的适应度值与其自身所经历的最好位置进行比较,若当前最优,则将
27、其作为当前的个体最优位置。对于每一个粒子,将其适应度值与全局所经历的最好位置的适应度进行比较,若当前较优,将其作为当前的全局最优位置;Step4 根据式(5)和式(6),对种群中粒子的速度及其位置进行更新,产生新的种群;Step5 如果达到最大迭代次数或者最小精度要求,则停止迭代,结束寻优,否则返回Step3。2.2基于边缘检测的图像分割图像的边界是图像的基本特征之一,基于边界的分割方法可以说是人们最早研究的方法。所谓边界是指其周围像素灰度有阶跃变化的像素的集合。边界广泛的存在于物体与物体之间、物体与背景之间,它是图像分割所依赖的重要特征。边缘检测试图通过检测不同区域间的边界来解决图像分割问题
28、。图像中相邻的不同区域间总存在边界,边界处像素的灰度值是不连续的,可以利用微分算子进行检测。常用的微分算子有Laplacian算子、LOG算子、Roberts算子、Sobel算子、Prewitt算子、Krisch算子等。Lapplacian算子是一种二阶导数算子,是不依赖于边缘方向的二阶微分算子,是一个标量,具有旋转不变性。LOG算子与高斯滤波器进行卷积,既平滑了图像又降低了噪声,孤立的噪声点和较小的结构组织将被滤除;所以很少直接用于边缘检测,通常用于边缘像素的区域属性判别以及辅助进行边缘的精确定位。Canny算子首先用2D高斯滤波模板进行卷积以平滑图像;然后利用微分算子,计算梯度的幅值和方向
29、;最接下来对梯度幅值进行非极大值抑制,即遍历图像,若某个像素的灰度值与其梯度方向上前后两个像素的灰度值相比不是最大,那么这个像素值置为0,即不是边缘;最后使用双阈值算法检测和连接边缘,即使用累计直方图计算两个阈值,大于高阈值的一定是边缘,小于低阈值的一定不是边缘。Krisch算子属于非线性微分算子,在保留边缘的细节上有一定的优势。第三章 系统设计3.1 环境配置在window7环境下安装和配置jdk-7u15-windows-i586,环境变量配置如下:安装好jdk-7u15-windows-i586后,直接右击【我的电脑】-【属性】,在弹出的对话框中选择【高级系统设置】图3_1 高级配置1)
30、 在弹出的对话框中选择【高级】选项卡下的【环境变量】图3_2 环境变量2) 在弹出的对话框,单击【系统变量】下的【新建】按钮,在弹出的对话框中填入变量名JAVA_HOME,变量值:C:Program FilesJava图3_3 变量配置3) 按照同样的方式创建系统变量classpath,变量名为classpath,变量值为:.;%JAVA_HOME%lib;%JAVA_HOME%libtools.jar (注意开头的.和;)3_4 变量配置4) 还要在已有的系统变量 path 的变量值的最后加入以下变量值:;%JAVA_HOME%bin;%JAVA_HOME%jrebin3_5 变量配置5)
31、配置结束配置好环境变量后,在“运行”中输入“java -version”,命令符出现下图所示的界面,说明环境安装成功。3_6 环境验证结果然后在eclipse官方网站下载Java版本的eclipse软件,如eclipse-SDK-4.2.1-win32,将其解压安装即可运行。3.2 系统模块3.2.1 界面设置该系统包含四个模块:文件模块(图像的输入输出),边缘检测模块(包含一些边缘检测的图像分割算法),阈值分割模块(包含基于阈值的图像分割方法)以及Hough变换。菜单界面部分代码如下:public ImageSegmentApp() setTitle( 基于粒子群优化算法的图像分割系统 );
32、 this.setBackground(Color.lightGray); /菜单界面 public void setMenu() Menu fileMenu = new Menu(文件); openItem = new MenuItem(打开); openItem.addActionListener(this); fileMenu.add(openItem); exitItem = new MenuItem(退出); exitItem.addActionListener(this); fileMenu.add(exitItem); Menu edgeMenu = new Menu(边缘检测)
33、; KirschItem = new MenuItem(Kirsch算子); KirschItem.addActionListener(this); edgeMenu.add(KirschItem); edgeMenu.addSeparator(); LaplaceItem = new MenuItem(Laplace算子); LaplaceItem.addActionListener(this); edgeMenu.add(LaplaceItem); LOGItem = new MenuItem(LOG算子); LOGItem.addActionListener(this); edgeMen
34、u.add(LOGItem); LOG1Item = new MenuItem(LOG算子(修正); LOG1Item.addActionListener(this); edgeMenu.add(LOG1Item); edgeMenu.addSeparator(); PrewittItem = new MenuItem(Prewitt算子); PrewittItem.addActionListener(this); edgeMenu.add(PrewittItem); edgeMenu.addSeparator(); RobertsItem = new MenuItem(Roberts算子);
35、 RobertsItem.addActionListener(this); edgeMenu.add(RobertsItem); Roberts1Item = new MenuItem(Roberts算子(平面拟合); Roberts1Item.addActionListener(this); edgeMenu.add(Roberts1Item); edgeMenu.addSeparator(); SobelItem = new MenuItem(Sobel算子); SobelItem.addActionListener(this); edgeMenu.add(SobelItem); Menu
36、 imSegMenu = new Menu(图像分割); otsuItem = new MenuItem(Otsu算法); otsuItem.addActionListener(this); imSegMenu.add(otsuItem); imSegMenu.addSeparator(); thresh1Item = new MenuItem(1维阈值分割); thresh1Item.addActionListener(this); imSegMenu.add(thresh1Item); thresh2Item = new MenuItem(2维阈值分割); thresh2Item.addA
37、ctionListener(this); imSegMenu.add(thresh2Item); imSegMenu.addSeparator(); bthreshItem = new MenuItem(最佳阈值分割); bthreshItem.addActionListener(this); imSegMenu.add(bthreshItem); imSegMenu.addSeparator(); psoItem = new MenuItem(PSO算法); psoItem.addActionListener(this); imSegMenu.add(psoItem); 所得的菜单界面如下图
38、所示:图3_7 系统模块3.2.2 算法部分代码本小节给出了最佳阈值分割、Otsu部分图像分割算法以及边缘检测算法的sobel和Robert算子的代码。a) 最佳阈值分割代码如下:/最佳阈值分割public int bestThresh(int pix, int w, int h)int i, j, t, thresh, newthresh, gmax, gmin; /最大,最小灰度值 double a1, a2, max, pt; double p = new double256; long num = new long256; int im = new intwh;for(j = 0; j
39、 h; j+) for(i = 0; i w; i+) imij = pixi+j*w&0xff; for (i = 0; i 256; i+) pi = 0; gmax = 0; gmin =255; for (j = 0; j h; j+) for (i = 0; i gmax) gmax = g; if(g gmin) gmin = g; thresh = 0; newthresh = (gmax+gmin)/2; int meangray1,meangray2; long p1, p2, s1, s2; for(i = 0; (thresh!=newthresh)&(i100);i+)
40、 thresh = newthresh; p1 = 0; p2 = 0; s1 = 0; s2 = 0; for(j = gmin; j thresh;j+) p1 += pj*j; s1 += pj; meangray1 = (int)(p1/s1); for(j = thresh+1; j gmax; j+) p2 += pj*j; s2 += pj; meangray2 = (int)(p2/s2); newthresh = (meangray1+meangray2)/2; return newthresh;在最佳阈值分割算法中,我们首先统计各灰度级出现的次数、灰度最大和最小值,然后求两
41、个区域的灰度平均值;最后计算出新的阈值。b) Otsu部分阈值分割代码: /Otsu分割 public int psoThresh(int pix, int iw, int ih) ColorModel cm = ColorModel.getRGBdefault(); int wh = iw * ih; int inIm = new intiwih; int i, j, t; int L = 256; double p = new doubleL; for (j = 0; j ih; j+) for (i = 0; i iw; i+) inImij = pixi+j*iw&0xff; for (i = 0; i L; i+) pi = 0; for (j = 0; j ih; j+) for (i = 0; i iw; i+) pinImij+; for (int m = 0; m L; m+) pm = pm / wh; double sigma = new doubleL; for (t = 0; t L; t+) double w0 = 0; for (int m = 0; m t+1; m+) w0 += pm; double w1 = 1 - w0; double