资源简介

很好的mATLAB代码,利用最大交叉熵,确定迭代次数,完成pcnn脉冲耦合神经网络的图像分割,效果很好

资源截图

代码片段和文件信息

clc
clear all
close all
%%
%参数设置
np = 50;%迭代次数
alpha_F = 0.5;
alpha_L = 0.1;
alpha_T = 0.5;
vF = 0.5;
vL = 1.0;
vT = 95.4;%对于5用155;对于4用120;对于2\3用110
M = [0.5 1 0.5; 1 0 1; 0.5 1 0.5];
%%
im=imread(‘u3.jpg‘);
if length(size(im)) == 3
    im = rgb2gray(im);
end
im=imresize(im0.5);
figureimshow(uint8(im));
title(‘原始图像‘);

%%
[p q]=size(im);
New = zeros(p q);
%%
beta = 0.3;
deta = 3;
%% 
L = zeros(p q);
T = vT * ones(p q);
Y = zeros(p q np);
Y0 = zeros(p q);
F = double(im);
H = zeros(1 np);
R = zeros(p q);
Res = zeros(p q);
for i = 1:np
    L = exp(-alpha_L) * L + conv2(Y(: : i) M ‘same‘);
    U = F .* (1 + beta * L);
    Y(: : i + 1) = im2double(U > T);
    T = T - deta + vT * Y(: : i + 1);
    P1 = sum(sum(Y(: : i + 1))) / (p * q);
    P0 = 1 - P1;
    H(i) = -P1 * log10(P1) - P0 * log10(P0);
end
%%
n_best = find(H == max(H));
for n = 1:n_best
    R = R + Y(: : n);
end
for i=1:p
    for j=1:q
        if R(ij)>1
            Res(ij)=1;
        end
    end
end
%%

Pa_AreaMin = 1024;
BwImgArea  = bwareaopen(Res Pa_AreaMin  8);
BwImgArea=double(BwImgArea);

for i=1:p
    for j=1:q
        if Res(ij)==BwImgArea(ij)
            out(ij)=0;
        else out(ij)=1;
        end
    end
end

out=out*255;

figure imshow(uint8(out));
title(‘PCNN分割效果‘);




 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件       1399  2011-12-15 14:56  codeandpaper\pcnn_seg.m

     文件     408597  2012-09-03 23:07  codeandpaper\一种基于交叉熵的改进型PCNN图像自动分割新方法.caj

     目录          0  2012-09-03 23:06  codeandpaper

----------- ---------  ---------- -----  ----

               409996                    3


评论

共有 条评论