【图像分割】基于脉冲耦合神经网络的图像分割

PCNN在图像融合中应用广泛\ 1、脉冲耦合的神经元之间有有耦合和无耦合两种形式。,有耦合的神经元之间存在能量传播,产生同步脉冲发放,从而将输入相似的神经元在同一时刻点火。\ 3、脉冲神经网络–第三代人工神经网络。\ 4、PCNN是由多个PCNN神经元构成的单层反馈型网络,因此适合实时的图像处理环境,每个神经元由三个部分组成:接受部分、调制部分、脉冲产生部分。\ 5、PCNN神经元的个数和像素的个数相同,它们是一一对应的。且神经元的外部刺激等于图像的灰度值或者归一化之后的灰度值。当β=0时,这时候是没有耦合的。\ 6、PCNN如何工作:\ 一、不存在耦合:\ 1、假设神经元的反馈输入只有外部刺激一项,Sij>0;n=0时,时间t=0;Uij(0)=Sij-Tij >0,那么神经元(i.j)输出为高电平。这里的Tij是动态门限。\ 2、当高电平被输出时,Tij迅速增加到设定的常数VT,VT>Sij,从而使得Sij-Tij<0,输出低电平。\ 3、经过步骤1、2,神经元(i,j)输出了一个脉冲,这称为点火一次。在门限值Tij从VT衰减到Sij期间,神经元(i,j)是一直保持低电平的,而后当Uij>0时,重新点火,如此往复下去。\ 于是,神经元(i,j)的运行是这样的,在外部刺激Sij的作用下,以频率发送脉冲,频率为:在这里插入图片描述\ 。所以,灰度值越大,点火频率就越高。,不同灰度值输入的神经元也会在不同的时刻被点火,而输入相同的神经元将在同一时间被点火。\ 4、经过1,2,3步之后,PCNN就把图像变成了一个和时间相关的点火图了。\ 在这里插入图片描述二、存在耦合:\ 当β/=0时,神经元是否点火要受周围神经元的影响。\ 1、假设这里有一个强刺激神经元(i,j),在第n次迭代点火的时候,它的邻近神经元(p,n),其刺激spq由spq变为(1+βLpq)spq,【Lpq是神经元内部参数之一,连接输入】也就是神经元(p,q)的刺激被提高了。\ 2、如果此时,更新的spq大于阈值T,这会导致神经元(p,q)在第n次迭代的时候被提前点火。这个过程称为神经元(p.q)被神经元(i,j)捕获。\ 3、如此,当链接强度β和链接输入L越大,和神经元(i,j)同步点火的神经元就越多。那么,像素值越接近,就越容易被捕获。\ 4、于是,在存在耦合的情况下,耦合的神经元很有可能会出现集体的点火行为,发放同步脉冲:总结为空间近邻、强度相似的神经元倾向于在同一时刻点火。\ 5、这时PCNN的点火图就是有特征地将图像变成时间轴的点火图。\ 在这里插入图片描述PCNN的特性:1、构成PCNN系统的每一个神经元是动态的\ 2、PCNN不需要训练,是强自适应系统。

最后回顾一下PCNN的神经元结构:\ 在这里插入图片描述\ 在这里插入图片描述\ 在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

M,W为权值;F,L,T分别是反馈,链接,阈值的意义;V是放大系数,a是常数,U是内部行为,Y是输出,S是外部刺激(像素值)。

``` function [Edge,Numberofaera]=pcnn(X) % 功能:采用PCNN算法进行边缘检测 % 输入:X—输入的灰度图像 % 输出:Edge—检测到的 Numberofaera—表明了在各次迭代时激活的块区域 X=imread('lena.JPG'); figure(1); imshow(X); X=double(X); % 设定权值 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;

imshow(Firate); %%%%%%子函数 %%%%%%% function Y=Jiabian(X) [m,n]=size(X); Y=zeros(m+2,n+2); for i=1:m+2 for j=1:n+2 if i==1&j~=1&j~=n+2 Y(i,j)=X(1,j-1); elseif j==1&i~=1&i~=m+2 Y(i,j)=X(i-1,1); elseif i~=1&j==n+2&i~=m+2 Y(i,j)=X(i-1,n); elseif i==m+2&j~=1&j~=n+2 Y(i,j)=X(m,j-1); elseif i==1&j==1 Y(i,j)=X(i,j); elseif i==1&j==n+2 Y(i,j)=X(1,n); elseif i==(m+2)&j==1 Y(i,j)=X(m,1); elseif i==m+2&j==n+2 Y(i,j)=X(m,n); else Y(i,j)=X(i-1,j-1); end end end %%%%%%子函数%%%%%% function Y=Bianhuan(X) [m,n]=size(X); Y=zeros(m+2,n+2); for i=1:m+2 for j=1:n+2 if i==1|j==1|i==m+2|j==n+2 Y(i,j)=0; else Y(i,j)=X(i-1,j-1); end end end %%%%%%子函数%%%%%% function Y=judge_edge(X,n) %X:每次迭代后PCNN输出的二值图像,如何准确判断边界点是关键 [a,b]=size(X); T=Jiabian(X); Y=zeros(a,b); W=zeros(a,b); for i=2:a+1 for j=2:b+1 if (T(i,j)==1)&((T(i-1,j)==0&T(i+1,j)==0)|(T(i,j-1)==0&T(i,j+1)==0)|(T(i-1,j-1)==0&T(i+1,j+1)==0)|(T(i+1,j-1)==0&T(i-1,j+1)==0)) Y(i-1,j-1)=-n; end end end ```

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Matlab科研辅导帮

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值