基于布谷鸟算法的灰度图像增强算法

本文介绍了一种结合布谷鸟算法的灰度图像增强方法,首先对图像进行预处理,然后通过布谷鸟算法的迭代优化,利用Levy飞行策略和适应度函数来提升图像边缘清晰度和对比度。研究了不同参数设置对图像增强效果的影响,并详细展示了算法的步骤和关键代码实现,最后讨论了可能出现的问题及解决方案。
摘要由CSDN通过智能技术生成

基于布谷鸟算法的灰度图像增强算法

相关百度网盘资源:链接: https://pan.baidu.com/s/1Si64ENFB3d16l9tra4bWWw 提取码: krwd 复制这段内容后打开百度网盘手机App,操作更方便哦

如果需要运行代码,只需在提交的文件夹里找到input_images文件,
将jpg格式文件放入,将图像文件名改为piture即可。

算法部分正式开始

先导入图像并进行初步处理(进行灰度化,均值滤波和求标准差                公式(10)m(u, v) = 1/n^2*[∑∑f (u + i, v + j)]  
公式(11)σ(u, v) = √{1/n^2*∑∑[f (u + i, v + j) - m(u + i, v + j)]^2}
部分代码:
inputimage =imread(str2) ;%导入图像
inputimage=rgb2gray(inputimage);%图像灰度化
%对图像进行均值滤波 m(u, v) = 1/n^2*[∑∑f (u + i, v + j)]
m=colfilt(gray_image,[window_size window_size],'sliding',@mean);
%求标准差 σ(u, v) = √{1/n^2*∑∑[f (u + i, v + j) - m(u + i, v + j)]^2}
snd=stdfilt(gray_image);


布谷鸟算法正式开始

初始化参数:解的取值范围,鸟巢(解)的总数,鸟巢中蛋被发现的概率,随机初始化鸟巢
参数名称	参数值
图像大小	256 X 256
Levy飞行策略	Λ=1.5,a0 = 0.01
最大迭代次数	tmax = 15
鸟巢被抛弃的概率Pa	0.25
鸟巢总数	25
说明:对应解的取值范围,论文对b,c的范围进行调整产生的效果进行探索,设置了三组取值范围。
参数组	a	b	c	k
组1	0< a <1.5	0 <b <0.5	0 < c < 1	0.5<k<1.5
组2	0< a <1.5	1<b <Gm/2	0 < c < 1	0.5<k<1.5
组3	0< a <1.5	Gm/2<b<Gm	0.5 < c < 1.5	0.5<k<1.5
组4	0< a <1.5	Gm/2<b<Gm	0< c < 1	0.5<k<1.5
组5	0<a <1.5	1 < b < Gm/2	0.5 < c <1.5	0.5<k<1.5


使用适应度函数计算解对应的函数值。
适应度函数: out=ln(ln(E(Ie))+exp)*(edgels(Ie)/(N*M))*exp(H(Ie));

部分代码:
function [out]=fobj_test(Ie)
X=edge(Ie);%使用sobel边缘检测,目的是计算√[Sh1(u, v)^2 + Sv1(u, v)^2]
size(Ie(X));
E_Is=sum(Ie(X));
n_edgels=sum(sum(X));
[M, N]=size(Ie);
 
H=entropy(Ie);
 
 out=log(log(E_Is+exp(1)))*(n_edgels/(N*M))*exp(H);
 
end

计算得到最好的鸟巢(解)和解对应的函数值。

代码:
[fmax,best,nest,fitness]=get_best_nest(nest,newnest,fitness,A,m)

进入迭代循环。
While tmax not reached do    

代码:while (iter<=Max_iter)

      end



产生一个新的鸟巢(解)通过Levy飞行搜索机制  

公式(2):Xit+1=Xit+stepsize.*step;
公式(3):stepsize=0.01*(Xjt-Xi(t));
          
beta=λ=3/2

公式(7):σ=[Γ(1+λ)*sin(pi*λ/2)]/(Γ((1+λ)/2)*λ*2^((λ-1)/2)))^(1/λ)

公式(5)
s=u./abs(v).^(1/λ);

公式(4)
step = (λ* Γ(λ)*sin(pi*λ/2))/(pi*s^(1+λ));

上述公式为原文的公式,按照上述公式编写的代码为:
 s=nest(j,:);
    u=randn(size(s))*sigma;
    v=randn(size(s));
    step=u.*abs(v).^(0-1/beta)
    step=(beta*gamma(beta)*sin(pi*beta/2))./(step.^(1+beta))
   
    stepsize=0.01*step.*(s-best);
    
    s=s+stepsize;


结果:
step =

  12.3816 + 0.0000i   0.0000 - 1.0050i   0.0000 - 2.3552i   0.0000 -17.4377i

居然出现了虚数,导致了程序报错,应该是原文的公式(4)出了问题,于是去寻找公式(4)所在的论文。在借用论文中《Cuckoo Search (CS) algorithm by Xin-She Yang and Suash Deb  Programmed by Xin-She Yang at Cambridge University 》
 所使用的部分代码:
beta=3/2;
sigma=(gamma(1+beta)*sin(pi*beta/2)/(gamma((1+beta)/2)*beta*2^((beta-1)/2)))^(1/beta);


u=randn(size(s))*sigma;
v=randn(size(s));
step=u./abs(v).^(1/beta);
    
stepsize=0.01*step.*(s-best);
% factor 0.01 comes from the fact that L/100 should be the typical step
% size of walk,where L is the typical lenghtscale
s=s+stepsize.*randn(size(s));
    
nest(j,:)=simplebounds(s,Lb,Ub);

使用适应度函数计算新解对应的函数值Fi
评估新解与原来的解
if Fi(新解对应的函数值) > Fj(原解对应的函数值) then 
|
|  用新解代替原解
|
end

代码:
if fnew>fmax
        fmax=fnew;
        bestnest=best;
end

使用贪心选择算法产生新的解(鸟巢),这是论文的重要创新点:在原有Levy搜索算法基础上再加上贪心搜索算法。

公式(19) xipt+1 = xtip + r(xtip - xtkp)

Xit+1 = [xt+1i1 , xt+2i2 , . . . , xt+1iD ]

部分代码:
       r=(rand-0.5)*2*1;
     % 产生一个新解        
        modifPos=nest(i,j)+r*(nest(i,j)-nest(Xk,j));
        new=nest(i,:);
        new(j)=modifPos;
     % 限辐
         new=simplebounds(new,Lb,Ub);
        
        G=trasform(A,GM,snd,m,new);
        evFit=fobj_test(G);

计算新解的函数值 Fˆi = F (Xit+1) 
比较新解与旧解的函数值

if Fˆi > Fi then
|    用新的解取代原来的解
end

以一定概率抛弃鸟巢并且新建新的鸟巢

到这里发现,论文可能真的存在一点问题,因为如果完完全全按照论文的公式进行编程,在Levy步骤就会产生虚数值(直接导致程序报错),网上编程的常用方法是借用类似论文公式(8)(具体公式没找到),来进行Levy步骤的编程。而在抛弃旧鸟巢新建新鸟巢时也是用公式(8),真的是奇怪,如果后面有时间,可能会进一步探索。

公式(8):Xi(t+1) = Xit + α0 ⊗ H(Pa - r) ⊗ (Xjt - Xtk ),

部分代码:
n=size(nest,1);
%是否发现鸟蛋
K=rand(size(nest))>pa;
 
stepsize=rand*(nest(randperm(n),:)-nest(randperm(n),:);
new_nest=nest+stepsize.*K;

保留最好的解(鸟巢)

找到目前所有鸟巢中,最好的鸟巢(解)

if Fnew(目前最好的) > Fmax(历史最好的) then
| Fmax=Fnew and Xmax = Xnew
End

部分代码:
if fnew>fmax
        fmax=fnew;
        bestnest=best;
end

迭代次数加1

部分代码:
iter=iter+1

end 布谷鸟算法结束

Return Xmax(解), Fmax(解对应的函数值)
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值