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

Posted MatlabQQ1575304183

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了图像分割基于脉冲耦合神经网络的图像分割相关的知识,希望对你有一定的参考价值。

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

 

 

完整代码或者代写添加QQ1575304183

 

以上是关于图像分割基于脉冲耦合神经网络的图像分割的主要内容,如果未能解决你的问题,请参考以下文章

图像特征提取基于matlab脉冲耦合神经网络(PCNN)图像特征提取含Matlab源码 1868期

基于SVM的图像分割-真彩色图像分割

图像分割方法综述

手把手教你搭建神经网络(图像分割)

图像分割技术及经典实例分割网络Mask R-CNN(含基于Keras Python源码定义)

基于U-Net网络的图像分割的MindStudio实践