[发明专利]一种基于蝙蝠算法优化模糊熵的双阈值图像分割方法有效

专利信息
申请号: 201410040869.9 申请日: 2014-01-27
公开(公告)号: CN103745482B 公开(公告)日: 2017-06-09
发明(设计)人: 叶志伟;王明威;刘伟;靳华中;王春枝;陈宏伟;徐慧;宗欣露;尹宇洁 申请(专利权)人: 湖北工业大学
主分类号: G06T7/136 分类号: G06T7/136
代理公司: 武汉科皓知识产权代理事务所(特殊普通合伙)42222 代理人: 张火春
地址: 430068 湖北*** 国省代码: 湖北;42
权利要求书: 查看更多 说明书: 查看更多
摘要:
搜索关键词: 一种 基于 蝙蝠 算法 优化 模糊 阈值 图像 分割 方法
【权利要求书】:

1.一种基于蝙蝠算法优化模糊熵的双阈值图像分割方法,其特征在于,包括下述步骤:

步骤1,输入待分割图像,种群规模S以及停机条件;

所述停机条件设置方式为:设置一个最优解集和一个计数变量m,将每次得到的全局最优解存入到所述最优解集中,在程序运行中,如果第i代所述全局最优解与上一代所述全局最优解保持不变的话,计数变量加1,如果连续m代所述全局最优解保持不变的话,即为满足停机条件;

步骤2,依据设定的种群规模S,运行蝙蝠算法,初始种群的各变量,产生初始种群Gk,对于第i个个体而言,其位置向量xi、速度vi、声波频率fi、脉冲响度Ai、发射速率ri五个变量随机产生,其中i值范围是1≤i≤S,S表示种群规模,其取值范围为(0,255),代数n表示蝙蝠算法的运行代数,在初始条件下,令n=0;

步骤3,对不满足大小关系的个体进行扰动;

每个个体需满足0≤a1<b1<c1<a2<b2<c2≤255的大小关系,各参数的取值范围均为(0,255),在初始化的过程中需要对不满足大小关系的个体进行如下的顺序扰动:

3.1.对a1产生扰动,得到a11,如果a11<0,则令a11=0,如果a11>250,则令a11=250;

3.2.对b1产生扰动,得到b11,如果b11<a11+1,则令b11=a11+1,如果b11>251,则令b11=251;

3.3.对c1产生扰动,得到c11,如果c11<b11+1,则令c11=b11+1,如果c11>252,则令c11=252;

3.4.对a2产生扰动,得到a21,如果a21<c11+1,则令a21=c11+1,如果a21>253,则令a21=253;

3.5.对b2产生扰动,得到b21,如果b21<a21+1,则令b21=a21+1,如果b21>254,则令b21=254;

3.6.对c2产生扰动,得到c21,如果c21<b21+1,则令c21=b21+1,如果c21>255,则令c21=255;

步骤4,计算灰度值为k的像素属于暗、灰、亮的隶属度值和条件概率;

<mrow><msub><mi>&mu;</mi><mi>d</mi></msub><mrow><mo>(</mo><mi>k</mi><mo>)</mo></mrow><mo>=</mo><mfenced open = "{" close = ""><mtable><mtr><mtd><mn>1</mn></mtd><mtd><mrow><mi>k</mi><mo>&le;</mo><msub><mi>a</mi><mn>1</mn></msub></mrow></mtd></mtr><mtr><mtd><mrow><mn>1</mn><mo>-</mo><mfrac><msup><mrow><mo>(</mo><mi>k</mi><mo>-</mo><msub><mi>a</mi><mn>1</mn></msub><mo>)</mo></mrow><mn>2</mn></msup><mrow><mo>(</mo><msub><mi>c</mi><mn>1</mn></msub><mo>-</mo><msub><mi>a</mi><mn>1</mn></msub><mo>)</mo><mo>*</mo><mo>(</mo><msub><mi>b</mi><mn>1</mn></msub><mo>-</mo><msub><mi>a</mi><mn>1</mn></msub><mo>)</mo></mrow></mfrac></mrow></mtd><mtd><mrow><msub><mi>a</mi><mn>1</mn></msub><mo>&lt;</mo><mi>k</mi><mo>&le;</mo><msub><mi>b</mi><mn>1</mn></msub></mrow></mtd></mtr><mtr><mtd><mfrac><msup><mrow><mo>(</mo><mi>k</mi><mo>-</mo><msub><mi>c</mi><mn>1</mn></msub><mo>)</mo></mrow><mn>2</mn></msup><mrow><mo>(</mo><msub><mi>c</mi><mn>1</mn></msub><mo>-</mo><msub><mi>a</mi><mn>1</mn></msub><mo>)</mo><mo>*</mo><mo>(</mo><msub><mi>c</mi><mn>1</mn></msub><mo>-</mo><msub><mi>b</mi><mn>1</mn></msub><mo>)</mo></mrow></mfrac></mtd><mtd><mrow><msub><mi>b</mi><mn>1</mn></msub><mo>&lt;</mo><mi>k</mi><mo>&le;</mo><msub><mi>c</mi><mn>1</mn></msub></mrow></mtd></mtr><mtr><mtd><mn>0</mn></mtd><mtd><mrow><mi>k</mi><mo>&gt;</mo><msub><mi>c</mi><mn>1</mn></msub></mrow></mtd></mtr></mtable></mfenced></mrow>

<mrow><msub><mi>&mu;</mi><mi>m</mi></msub><mrow><mo>(</mo><mi>k</mi><mo>)</mo></mrow><mo>=</mo><mfenced open = "{" close = ""><mtable><mtr><mtd><mn>0</mn></mtd><mtd><mrow><mi>k</mi><mo>&le;</mo><msub><mi>a</mi><mn>1</mn></msub></mrow></mtd></mtr><mtr><mtd><mfrac><msup><mrow><mo>(</mo><mi>k</mi><mo>-</mo><msub><mi>a</mi><mn>1</mn></msub><mo>)</mo></mrow><mn>2</mn></msup><mrow><mo>(</mo><msub><mi>c</mi><mn>1</mn></msub><mo>-</mo><msub><mi>a</mi><mn>1</mn></msub><mo>)</mo><mo>*</mo><mo>(</mo><msub><mi>c</mi><mn>1</mn></msub><mo>-</mo><msub><mi>b</mi><mn>1</mn></msub><mo>)</mo></mrow></mfrac></mtd><mtd><mrow><msub><mi>a</mi><mn>1</mn></msub><mo>&lt;</mo><mi>k</mi><mo>&le;</mo><msub><mi>b</mi><mn>1</mn></msub></mrow></mtd></mtr><mtr><mtd><mrow><mn>1</mn><mo>-</mo><mfrac><msup><mrow><mo>(</mo><mi>k</mi><mo>-</mo><msub><mi>c</mi><mn>1</mn></msub><mo>)</mo></mrow><mn>2</mn></msup><mrow><mo>(</mo><msub><mi>c</mi><mn>1</mn></msub><mo>-</mo><msub><mi>a</mi><mn>1</mn></msub><mo>)</mo><mo>*</mo><mo>(</mo><msub><mi>c</mi><mn>1</mn></msub><mo>-</mo><msub><mi>b</mi><mn>1</mn></msub><mo>)</mo></mrow></mfrac></mrow></mtd><mtd><mrow><msub><mi>b</mi><mn>1</mn></msub><mo>&lt;</mo><mi>k</mi><mo>&le;</mo><msub><mi>c</mi><mn>1</mn></msub></mrow></mtd></mtr><mtr><mtd><mn>1</mn></mtd><mtd><mrow></mrow></mtd></mtr><mtr><mtd><mrow><mn>1</mn><mo>-</mo><mfrac><msup><mrow><mo>(</mo><mi>k</mi><mo>-</mo><msub><mi>a</mi><mn>2</mn></msub><mo>)</mo></mrow><mn>2</mn></msup><mrow><mo>(</mo><msub><mi>c</mi><mn>2</mn></msub><mo>-</mo><msub><mi>a</mi><mn>2</mn></msub><mo>)</mo><mo>*</mo><mo>(</mo><msub><mi>b</mi><mn>2</mn></msub><mo>-</mo><msub><mi>a</mi><mn>2</mn></msub><mo>)</mo></mrow></mfrac></mrow></mtd><mtd><mrow><msub><mi>a</mi><mn>2</mn></msub><mo>&lt;</mo><mi>k</mi><mo>&le;</mo><msub><mi>b</mi><mn>2</mn></msub></mrow></mtd></mtr><mtr><mtd><mfrac><msup><mrow><mo>(</mo><mi>k</mi><mo>-</mo><msub><mi>c</mi><mn>2</mn></msub><mo>)</mo></mrow><mn>2</mn></msup><mrow><mo>(</mo><msub><mi>c</mi><mn>2</mn></msub><mo>-</mo><msub><mi>a</mi><mn>2</mn></msub><mo>)</mo><mo>*</mo><mo>(</mo><msub><mi>c</mi><mn>2</mn></msub><mo>-</mo><msub><mi>b</mi><mn>2</mn></msub><mo>)</mo></mrow></mfrac></mtd><mtd><mrow><msub><mi>b</mi><mn>2</mn></msub><mo>&lt;</mo><mi>k</mi><mo>&le;</mo><msub><mi>c</mi><mn>2</mn></msub></mrow></mtd></mtr><mtr><mtd><mn>0</mn></mtd><mtd><mrow><mi>k</mi><mo>&gt;</mo><msub><mi>c</mi><mn>2</mn></msub></mrow></mtd></mtr></mtable></mfenced></mrow>

<mrow><msub><mi>&mu;</mi><mi>b</mi></msub><mrow><mo>(</mo><mi>k</mi><mo>)</mo></mrow><mo>=</mo><mfenced open = "{" close = ""><mtable><mtr><mtd><mn>0</mn></mtd><mtd><mrow><mi>k</mi><mo>&le;</mo><msub><mi>a</mi><mn>2</mn></msub></mrow></mtd></mtr><mtr><mtd><mfrac><msup><mrow><mo>(</mo><mi>k</mi><mo>-</mo><msub><mi>a</mi><mn>2</mn></msub><mo>)</mo></mrow><mn>2</mn></msup><mrow><mo>(</mo><msub><mi>c</mi><mn>2</mn></msub><mo>-</mo><msub><mi>a</mi><mn>2</mn></msub><mo>)</mo><mo>*</mo><mo>(</mo><msub><mi>c</mi><mn>2</mn></msub><mo>-</mo><msub><mi>b</mi><mn>2</mn></msub><mo>)</mo></mrow></mfrac></mtd><mtd><mrow><msub><mi>a</mi><mn>2</mn></msub><mo>&lt;</mo><mi>k</mi><mo>&le;</mo><msub><mi>b</mi><mn>2</mn></msub></mrow></mtd></mtr><mtr><mtd><mrow><mn>1</mn><mo>-</mo><mfrac><msup><mrow><mo>(</mo><mi>k</mi><mo>-</mo><msub><mi>c</mi><mn>2</mn></msub><mo>)</mo></mrow><mn>2</mn></msup><mrow><mo>(</mo><msub><mi>c</mi><mn>2</mn></msub><mo>-</mo><msub><mi>a</mi><mn>2</mn></msub><mo>)</mo><mo>*</mo><mo>(</mo><msub><mi>c</mi><mn>2</mn></msub><mo>-</mo><msub><mi>b</mi><mn>2</mn></msub><mo>)</mo></mrow></mfrac></mrow></mtd><mtd><mrow><msub><mi>b</mi><mn>2</mn></msub><mo>&lt;</mo><mi>k</mi><mo>&le;</mo><msub><mi>c</mi><mn>2</mn></msub></mrow></mtd></mtr><mtr><mtd><mn>1</mn></mtd><mtd><mrow><mi>k</mi><mo>&gt;</mo><msub><mi>c</mi><mn>2</mn></msub></mrow></mtd></mtr></mtable></mfenced></mrow>

<mrow><msub><mi>p</mi><mi>d</mi></msub><mo>=</mo><munderover><mo>&Sigma;</mo><mrow><mi>k</mi><mo>=</mo><mn>0</mn></mrow><mn>255</mn></munderover><msub><mi>p</mi><mi>k</mi></msub><mo>*</mo><msub><mi>&mu;</mi><mi>d</mi></msub><mrow><mo>(</mo><mi>k</mi><mo>)</mo></mrow></mrow>

<mrow><msub><mi>p</mi><mi>m</mi></msub><mo>=</mo><munderover><mo>&Sigma;</mo><mrow><mi>k</mi><mo>=</mo><mn>0</mn></mrow><mn>255</mn></munderover><msub><mi>p</mi><mi>k</mi></msub><mo>*</mo><msub><mi>&mu;</mi><mi>m</mi></msub><mrow><mo>(</mo><mi>k</mi><mo>)</mo></mrow></mrow>

<mrow><msub><mi>p</mi><mi>b</mi></msub><mo>=</mo><munderover><mo>&Sigma;</mo><mrow><mi>k</mi><mo>=</mo><mn>0</mn></mrow><mn>255</mn></munderover><msub><mi>p</mi><mi>k</mi></msub><mo>*</mo><msub><mi>&mu;</mi><mi>b</mi></msub><mrow><mo>(</mo><mi>k</mi><mo>)</mo></mrow></mrow>

其中,μd(k)、μm(k)、μb(k)分别表示灰度值为k的像素属于暗、灰、亮的隶属度,其中0≤k≤255;pk为图像灰度直方图的概率分布,pd、pm、pb分别表示灰度值为k的像素属于暗、灰、亮的条件概率,其中0≤k≤255;

步骤5,计算种群中个体的适应度并找出其全局最优解;

根据每个个体对应的像素属于暗、灰、亮隶属度和条件概率,通过模糊熵公式计算每个个体的适应度值,将每个个体适应度值Hs(i)表中最大的值fitnessgeneration作为种群的全局最优解,并存入最优解集,其中i值范围是1≤i≤S,S表示种群规模;

步骤6,采用蝙蝠算法对种群中各变量进行更新;

调整声波频率fi产生新的解并更新速度vi和位置xi,更新公式如下:

fi=fmin+(fmax-fmin)*β

vin=vin-1+(xin-xglobalbest)*fi

xin=xin-1+vin

其中,n表示蝙蝠算法的运行代数,fmin和fmax分别表示声波频率的范围,β∈[0,1]是一个随机向量,保证fi在[fmin,fmax]范围内,xglobalbest为全局最优解的位置向量,速度vi为正值或负值,位置向量xi可任意方向移动;

步骤7,从最优解集中选择一个解,并在该最优解附近形成一个局部解,进而在该局部解附近形成一个新解;

若n=1,局部解取步骤5中全局最优解所对应的位置变量,若n≠1,局部解直接取前一代个体适应度的全局最优解所对应的位置变量xglobalbest,新解的计算公式如下:

xnew=xglobalbest*avgAk

其中,xnew表示得到的新解,ε∈[-1,1]是一个任意的实数,avgAk是个体在当前代的平均脉冲响度,由脉冲响度Ai计算所得;

步骤8,计算新解中个体的适应度;

步骤9,判断是否对个体参数进行更新;

用新解xnew中个体的适应度Hs_new(i)与Hs(i)进行比较,若Hs(i)<Hs_new(i)且脉冲响度Ai大于人为设定阈值RA,则进入步骤10;否,则进入步骤11;其中1≤i≤S,若n=1,Hs(i)取步骤5中全局最优解的个体适应度Hs(i),若n≠1,Hs(i)取算法上一代计算产生的最优解集的个体适应度Hs(i);

步骤10,对原解x中第i个个体的位置变量用新解xnew中第i个个体的位置变量进行替换并对脉冲响度Ai和发射速率ri进行更新后,进入步骤11,脉冲响度Ai和发射速率ri的更新公式如下;

<mrow><msubsup><mi>A</mi><mi>i</mi><mrow><mi>n</mi><mo>+</mo><mn>1</mn></mrow></msubsup><mo>=</mo><msubsup><mi>&alpha;A</mi><mi>i</mi><mi>n</mi></msubsup><mo>,</mo><msubsup><mi>r</mi><mi>i</mi><mrow><mi>n</mi><mo>+</mo><mn>1</mn></mrow></msubsup><mo>=</mo><msubsup><mi>r</mi><mi>i</mi><mn>0</mn></msubsup><mo>&lsqb;</mo><mn>1</mn><mo>-</mo><mi>exp</mi><mrow><mo>(</mo><mo>-</mo><mi>&gamma;</mi><mi>n</mi><mo>)</mo></mrow><mo>&rsqb;</mo></mrow>

其中n表示蝙蝠算法的运行代数,exp表示以自然对数e为底的指数函数,α和γ是两个常量;

步骤11,计算种群全局最优解,通过与先前全局最优解的比较,对全局最优解进行更新;

计算种群中个体的适应度,得到当前的全局最优解fitnessnew_gen与先前的fitnessgeneration进行比较,若fitnessnew_gen>fitnessgeneration,则将其更新为种群新的全局最优解;否则,将保留原先的全局最优解fitnessgeneration

步骤12,判断是否满足停机条件,若是,则进入步骤13,否则返回步骤6;

步骤13,根据最终得到的全局最优解fitnessgeneration对应的6个参数a1、b1、c1、a2、b2、c2,得到最终分割阈值;

阈值t1和阈值t2的公式如下:

若(a1+c1)/2≤b1≤c1,则

若a1≤b1<(a1+c1)/2,则

若(a2+c2)/2≤b2≤c2,则

若a2≤b2<(a2+c2)/2,则

使用t1和t2对图像进行分割,即将图像中灰度值在[0,t1)范围内的像素作为第一类,图像中灰度值在[t1,t2)范围内的像素作为第二类,图像中灰度值在[t2,255]范围内的像素作为第三类,并将最终分割图像输出。

下载完整专利技术内容需要扣除积分,VIP会员可以免费下载。

该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于湖北工业大学,未经湖北工业大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服

本文链接:http://www.vipzhuanli.com/pat/books/201410040869.9/1.html,转载请声明来源钻瓜专利网。

×

专利文献下载

说明:

1、专利原文基于中国国家知识产权局专利说明书;

2、支持发明专利 、实用新型专利、外观设计专利(升级中);

3、专利数据每周两次同步更新,支持Adobe PDF格式;

4、内容包括专利技术的结构示意图流程工艺图技术构造图

5、已全新升级为极速版,下载速度显著提升!欢迎使用!

请您登陆后,进行下载,点击【登陆】 【注册】

关于我们 寻求报道 投稿须知 广告合作 版权声明 网站地图 友情链接 企业标识 联系我们

钻瓜专利网在线咨询

周一至周五 9:00-18:00

咨询在线客服咨询在线客服
tel code back_top