工学]基于粒子群优化算法的图像分割系统的设计内容摘要:

。 图像总平均灰度级为:  Mi iiP1 ( 5) 其中 0C 类的平均灰度级为:   ti iiPt 1,像素数为: ki inN 10; 1C 类的平均灰度级为: t ,像素数为: 0NN。 图像的总均值为: 1100   ,其中 0 、 1 分别表示 0C 、 1C 在图像中基于粒子群优化算法的图像分割系统的设计 12 所占的比例, 00  t ,  01 1   t。 对于给定图像类间方差为:       2112020  t ( 6) 整理得:      002021    tt ( 7) t 从 M~1 变化,使得 t2 最大的 *t ,即为最佳阈值,  *2t 为最佳目标选择函数。 粒子群优化算法( PSO) 粒子群优化算法 [7]采用速度 位置搜索模型,每个粒子代表解空间的一个候选解,解的优劣程度由根据具体优化问题建立的适应度函数决定的。 设目标搜索空间为 D 维,群体有 M 个粒子,  iDiii xxxx ,.. ., 21 为第),...,2,1( Mii  个粒子的位置,根据事先设定的适应度函数计算 ix 的适应度,用以衡量粒子位置的优劣;  iDiii vvvv ,.. ., 21 为第 i 个粒子的飞行速度, iDiii pppp ,. .. , 21 为粒子 i 当前搜索到的最优位置,即为个体最优位置,记为pbest ;  gDggg pppp ,. .., 21 为整个种群当前搜索到的最优位置,即为全局最优位置,记为 gbest。 在粒子群最优算法中,每个粒子的速度和位置按照以下公式进行更新:    kidgdkididkidkid xprcxprcvv  22111 ( 8) 11   kidkidkid vxx ( 9) 其中, MiDd ,...,2,1,...,2,1  , 21,cc 为学习因子,  10, 21 ,rr 是随机数。 算法的主要步骤描述如下: Step1 初始化粒子群,设定群体规模,加速常数,以及最大迭代次数,随机产生每个粒子的初始位置和初始速度; 基于粒子群优化算法的图像分割系统的设计 13 Step2 计算并评价每个粒子的适应度值; Step3 将每个粒子的适应度值与其自身所经历的 最好位置 pbest 进行比较,若当前最优,则将其作为当前的个体最优位置。 对于每一个粒子,将其适应度值与全局所经历的最好位置 gbest 的适应度进行比较,若当前较优,将其作为当前的全局最优位置; Step4 根据式( 5)和式( 6),对种群中粒子的速度及其位置进行更新,产生新的种群; Step5 如果达到最大迭代次数或者最小精度要求,则停止迭代,结束寻优,否则返回 Step3。 基于边缘检测的图像分割 图像的边界是图像的基本特征之一,基于边 界的分割方法可以说是人们最早研究的方法。 所谓边界是指其周围像素灰度有阶跃变化的像素的集合。 边界广泛的存在于物体与物体之间、物体与背景之间,它是图像分割所依赖的重要特征。 边缘检测试图通过检测不同区域间的边界来解决图像分割问题。 图像中相邻的不同区域间总存在边界,边界处像素的灰度值是不连续的,可以利用微分算子进行检测。 常用的微分算子 有 Laplacian 算子、 LOG 算子、 Roberts 算子、 Sobel 算子、Prewitt 算子、 Krisch 算子等。 Lapplacian 算子是一种二阶 导数算子,是不依赖于边缘方向的二阶微 分算子,是一个标量,具有旋转不变性。 LOG 算子与高斯滤波器进行卷积,既平滑了图像又降低了噪声,孤立的噪声点和较小的结构组织将被滤除;所以很少直接用于边缘检测,通常用于边缘像素的区域属性判别以及辅助进行边缘的精确定位。 Canny 算子首先用 2D高斯滤波 模板进行卷积以平滑图像;然后利用微分算子,计算梯度的幅值和方向;最接下 来对梯度幅值进行非极大值抑制,即遍历图像,若某个像素的灰度值与其梯度方向上前后两个像素的灰度值相比不是最大,那么这个像素值置为 0,即不是边缘;最后使用双阈值算法检测和连接边缘,即使用累计直方图计 算两个阈值,大于高阈值的一定是边缘,小于低阈值的一定不是边缘。 Krisch 算子属于非线性微分算子,在保留边缘的细节上有一定的优势。 基于粒子群优化算法的图像分割系统的设计 14 第三章 系统设计 环境配置 在 window7 环境下安装和配置 jdk7u15windowsi586,环境变量配置如下: 安装好 jdk7u15windowsi586 后,直接右击【我的电脑】 【属性】,在弹出的对话框中选择【高级系统设置】 图 3_1 高级配置 1) 在弹出的对话框中选择【高级】选项卡下的【环境变量】 基于粒子群优化算法的图像分割系统的设计 15 图 3_2 环境变量 2) 在弹出的 对话框,单击【系统变量】下的【新建】按钮,在弹出的对话框中填入变量名 JAVA_HOME ,变量值: C:\Program Files\Java 基于粒子群优化算法的图像分割系统的设计 16 图 3_3 变量配置 3) 按 照同样的方式创建系统变量 classpath,变量名为 classpath,变量值为: .。 %JAVA_HOME%\lib。 %JAVA_HOME%\lib\ (注意开头的 .和。 ) 基于粒子群优化算法的图像分割系统的设计 17 3_4 变量配置 4) 还要在已有的系统变量 path 的变量值的最后加入以下变量值:。 %JAVA_HOME%\bin。 %JAVA_HOME%\jre\bin 基于粒子群优化算法的图像分割系统的设计 18 3_5 变量配置 5) 配置结束 配置好环境变量后,在“运行”中 输入 “java version”, 命 令符出现下图所示的界面,说明环境安装成功。 3_6 环境验证结果 然后在 eclipse 官方网站下载 Java 版本的 eclipse 软件,如,将其解压安装即可运行。 基于粒子群优化算法的图像分割系统的设计 19 系统模块 界面设置 该系统包含四个模块:文件模块(图像的输入输出),边缘检测模块(包含一些边缘检测的图像分割算法),阈值分割模块(包含基于阈值的图像分割方法)以 及 Hough 变 换。 菜单界面部分代码如下: public ImageSegmentApp() { setTitle( 基于粒子群优化算法的图像分割系统 )。 ()。 //菜单界面 public void setMenu() { Menu fileMenu = new Menu(文件 )。 openItem = new MenuItem(打开 )。 (this)。 (openItem)。 exitItem = new MenuItem(退出 )。 (this)。 (exitItem)。 Menu edgeMenu = new Menu(边缘检测 )。 KirschItem = new MenuItem(Kirsch算子 )。 (this)。 (KirschItem)。 ()。 基于粒子群优化算法的图像分割系统的设计 20 LaplaceItem = new MenuItem(Laplace算子 )。 (this)。 (LaplaceItem)。 LOGItem = new MenuItem(LOG算子 )。 (this)。 (LOGItem)。 LOG1Item = new MenuItem(LOG算子 (修正 ))。 (this)。 (LOG1Item)。 ()。 PrewittItem = new MenuItem(Prewitt算子 )。 (this)。 (PrewittItem)。 ()。 RobertsItem = new MenuItem(Roberts算子 )。 (this)。 (RobertsItem)。 Roberts1Item = new MenuItem(Roberts算子 (平面拟合 ))。 (this)。 (Roberts1Item)。 ()。 SobelItem = new MenuItem(Sobel算子 )。 (this)。 (SobelItem)。 基于粒子群优化算法的图像分割系统的设计 21 Menu imSegMenu = new Menu(图像分割 )。 otsuItem = new MenuItem(Otsu算法 )。 (this)。 (otsuItem)。 ()。 thresh1Item = new MenuItem(1维阈值分割 )。 (this)。 (thresh1Item)。 thresh2Item = new MenuItem(2维阈值分割 )。 (this)。 (thresh2Item)。 ()。 bthreshItem = new MenuItem(最佳阈值分割 )。 (this)。 (bthreshItem)。 ()。 psoItem = new MenuItem(PSO算法 )。 (this)。 (psoItem)。 } } 所得的菜单界面如下图所示: 基于粒子群优化算法的图像分割系统的设计 22 图 3_7 系统模块 算法部分代码 本小节给出了最佳阈值分割、 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 double[256]。 long[] num = new long[256]。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。