⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pcnn.m

📁 脉冲偶合神经网络除去噪声算法,效果不错不错不错不错
💻 M
字号:
function[Edge,Numberofaera] = pcnn(X)
% X:输入的灰度图像,Edge:为检测到的一些边界点
% Numberofaera:表明了在各次迭代激活的块区域
X = (imread('C:\shi.BMP'));
ADD = imnoise(X,'salt & pepper', 0.1);
%X=ADD./max(max(ADD))
figure,imshow(ADD);
X = double(ADD);
Weight = [0.5 1 0.5;1 0 1;0.5 1 0.5];
Beta = 0.4;
Yuzhi = 240;
Decay = 0.3;
[a,b] = size(X);
Threshold = zeros(a,b);
S = zeros(a+2,b+2);
B = zeros(a,b); %标记样板,表明该pixel是否被激活过
Y = zeros(a,b);
T = zeros(a,b);

Edge = zeros(a,b);
Numberofaera = zeros(a,b);
Numberofaera_1 = zeros(a,b);
Num_1 = 0;
Num = 0;
n=1;

while (sum(sum(B))~=256*256)
    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-1,i1+1);
                S(i0+1,i1-1) S(i0+1,i1) S(i0+1,i1+1)];
            L=sum(sum(V.*Weight));
            F=X(i0-1,i1-1);
            U=double(F)*(1+Beta*double(L));
            if U>=Threshold(i0-1,i1-1)|Threshold(i0-1,i1-1)<60
                T(i0-1,i1-1) = Yuzhi;
                Y(i0-1,i1-1) = 1;
                if n==1
                    B(i0-1,i1-1) = 0;
                else
                    B(i0-1,i1-1) = 1;%已发射过的标记
                    Threshold(i0-1,i1-1) = 1000000;
                end
            else
                T(i0-1,i1-1) = 0;
                Y(i0-1,i1-1) = 0;
            end
        end
    end
    Threshold(find(B~=1)) = exp(-Decay)*Threshold(find(B~=1));
    %被激活过的象素不再参与迭代过程
    if(n~=1)
        Edge=Edge+judge_edge(Y,n);
        
        %边界点被置零,Y本身是激发的象素,现在边界被置零,也不能说是白激发了
        %B矩阵有记录!当然下次不能再被激发了
        Y(find(Edge<0)) = 0;
        [ Numberofaera_1,Num_1] = bwlabel(Y,4);
        for i=1:a
            for j=1:b
                if Numberofaera_1(i,j) ~= 0
                    Numberofaera_1(i,j) = Numberofaera_1(i,j)+Num;
                end
            end
        end
        
        Numberofaera = Numberofaera + Numberofaera_1;
        Num = Num_1;
    end
    if n == 1
        S = zeros(a+2,b+2);
    else
        S = Bianhuan(T);
    end
    n = n + 1;
    Numberofaera_1 = zeros(a,b);
end
figure,imshow(Y);


        
        
                
            
        
        
                
            

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -