1.算法描述
脉冲耦合神经网络(PCNN-Pulse Coupled Neural Network)与传统神经网络相比,有着根本的不同。PCNN有生物学的背景,它是依据猫、猴等动物的大脑皮层上的同步脉冲发放现象提出的。PCNN有着广泛的应用,可应用于图像分割,边缘检测、细化、识别等方面。
PCNN是Eckhorn于20世纪90年代开始提出的一种基于猫的视觉原理构建的简化神经网络模型,与BP神经网络和Kohonen神经网络相比,PCNN不需要学习或者训练,能从复杂背景下提取有效信息,具有同步脉冲发放和全局耦合等特性,其信号形式和处理机制更符合人类视觉神经系统的生理学基础。
一个生理激励的人工神经网络,脉冲耦合神经网络(PCNN),可以连接起来创建一个高度灵活的生理滤波器。PCNN对灵长类视觉皮层中观察到的脉冲高度、持续时间、重复频率和神经间联系进行建模。该模型不仅能满足我们视觉模型的滤波要求,还能产生所需的连接和脉冲,以模拟依赖于状态的调制和时间同步。图4显示了PCNN中单个神经元的框图。
有关PCNN的更多讨论,请参见参考文献[3]和[5]。表2显示了实现离散时间PCNN所需的方程式。在该模型中,PCNN神经元接收来自前一层次结构层的馈电输入(X2),并接收来自其自身和其他层的链接输入(Y)。可重入输入将被视为链接输入。图5显示了样本PCNN中单个神经元的馈电和连接。
单个PCNN神经元的滤波特性由馈电输入的模式和应用于这些输入的权重决定。滤光片的感受野由前一层馈电输入连接的形状决定。滤波特性由应用于进给输入的权重确定。例如,一个具有高斯(椭圆形)感受野的神经元将具有以椭圆形模式连接到前一层的馈电输入。在该椭圆模式中,应用于进给输入的权重(M2)在中心处为单位,并随着朝向椭圆边缘的高斯曲线而减小。
PCNN的特征提取和对象分割特性来自神经元的脉冲频率。具有相关进食输入特征(颜色、强度等)的神经元具有相似的脉冲率。连接连接导致神经元紧密接近,相关特征一致脉冲(同步)。连接模式、权重(Wf)和连接系数(i:3)决定了连接输入影响神经元输出的接近度和程度。较大的链接字段往往会对图像产生平滑效果。较大的权重和连接系数(假设标准化,接近1)往往会导致相关特征较少的神经元同步。PCNN神经元(无连接)的脉冲重复率由馈电输入的大小决定。输入较大的神经元比输入较小的神经元脉冲频率更高。缺乏连接输入将导致具有相同馈电输入强度的神经元一致脉冲。对象分割高度依赖于链接系数8的值。
PCNN中的神经元数量等于输入图像中的像素数量。神经元被排列成一个具有横向连接的单层网络。每个神经元接收R半径内所有相邻神经元的链接输入。每个神经元只接收一个馈电输入,即输入图像中对应像素的强度。馈电输入上没有泄漏积分器。所有权重都设置为统一。
2.仿真效果预览
matlab2022a仿真结果如下:
3.MATLAB核心程序
Weight=[0.07 0.1 0.07;0.1 0 0.1;0.07 0.1 0.07]; WeightLI2=[-0.03 -0.03 -0.03;-0.03 0 -0.03;-0.03 -0.03 -0.03]; d=1/(1+sum(sum(WeightLI2))); %%%%%%测试权值%%%%%% WeightLI=[-0.03 -0.03 -0.03;-0.03 0.5 -0.03;-0.03 -0.03 -0.03]; d1=1/(sum(sum(WeightLI))); %%%%%%%%%%%%%%%%%% Beta=0.4; Yuzhi=245; %衰减系数 Decay=0.3; [a,b]=size(X); V_T=0.2; %门限值 Threshold=zeros(a,b); S=zeros(a+2,b+2); Y=zeros(a,b); %点火频率 Firate=zeros(a,b); n=1; %统计循环次数 count=0; Tempu1=zeros(a,b); Tempu2=zeros(a+2,b+2); %%%%%%图像增强部分%%%%%% Out=zeros(a,b); Out=uint8(Out); for i=1:a for j=1:b if(i==1|j==1|i==a|j==b) Out(i,j)=X(i,j); else H=[X(i-1,j-1) X(i-1,j) X(i-1,j+1); X(i,j-1) X(i,j) X(i,j+1); X(i+1,j-1) X(i+1,j) X(i+1,j+1)]; temp=d1*sum(sum(H.*WeightLI)); Out(i,j)=temp; end end end figure(2); imshow(Out); %%%%%%%%%%%%%%%%%%% for count=1:30 for i0=2:a+1 for i1=2:b+1 V=[S(i0-1,i1-1) S(i0-1,i1) S(i0-1,i1+1); S(i0,i1-1) S(i0,i1) S(i0,i1+1); S(i0+1,i1-1) S(i0+1,i1) S(i0+1,i1+1)]; L=sum(sum(V.*Weight)); V2=[Tempu2(i0-1,i1-1) Tempu2(i0-1,i1) Tempu2(i0-1,i1+1); Tempu2(i0,i1-1) Tempu2(i0,i1) Tempu2(i0,i1+1); Tempu2(i0+1,i1-1) Tempu2(i0+1,i1) Tempu2(i0+1,i1+1)]; F=X(i0-1,i1-1)+sum(sum(V2.*WeightLI2)); %保证侧抑制图像无能量损失 F=d*F; U=double(F)*(1+Beta*double(L)); Tempu1(i0-1,i1-1)=U; if U>=Threshold(i0-1,i1-1)|Threshold(i0-1,i1-1)<60 T(i0-1,i1-1)=1; Threshold(i0-1,i1-1)=Yuzhi; %点火后一直置为1 Y(i0-1,i1-1)=1; else T(i0-1,i1-1)=0; Y(i0-1,i1-1)=0; end end end Threshold=exp(-Decay)*Threshold+V_T*Y; %被激活过的像素不再参与迭代过程 if n==1 S=zeros(a+2,b+2); else S=Bianhuan(T); end n=n+1; count=count+1; Firate=Firate+Y; figure(3); imshow(Y); Tempu2=Bianhuan(Tempu1); end Firate(find(Firate<10))=0; Firate(find(Firate>=10))=10; figure(4); imshow(Firate);
标签:i1,i0,PCNN,神经网络,0.03,耦合,输入,神经元 From: https://www.cnblogs.com/51matlab/p/17164552.html