跪求 PSO算法在图像分割中的应用(MATLAB)
1个回答

clear all

t1=clock;

I=imread('7.jpg');

subplot(1,2,1);

J=rgb2gray(I);title('pso算法图像分割的结果');

[a,b]=size(J);

[p,x]=imhist(J,256);

L=x';

LP=p'/(a*b);

n=256;

c1=2;

c2=2;

wmax=0.9;

wmin=0.4;

G=10;

M=15;

X=min(L)+fix((max(L)-min(L))*rand(1,M));

V=min(L)+(max(L)-min(L))*rand(1,M);

m=0;

for i=1:1:n

m=m+L(i)*LP(i);

end

pbest=zeros(M,2);

gbest1=0;

gbest2=0;

GG=0;

t2=clock;

for k=1:1:G

w(k)=wmax-(wmax-wmin)*k/G;

for i=1:1:M

t=length(find(X(i)>=L));

r=0;

s=0;

for j=1:1:t

r=r+LP(j);

s=s+L(j)*LP(j);

end

W0(i)=r;

W1(i)=1-r;

U0(i)=s/r;

U1(i)=(m-s)/(1-r);

end

for i0=1:1:M

BB(i0)=W0(i0)*W1(i0)*((U1(i0)-U0(i0))^2);

end

for i=1:1:M

if pbest(i,2)=gbest2

gbest2=MAX;

gbest1=X(CC);

end

GG(k)=gbest2;

for i=1:1:M

V(i)=round(w(k)*V(i)+c1*rand*(pbest(i,1)-X(i))+c2*rand*(gbest1-X(i)));

X(i)=V(i)+X(i);

end

end

for i=1:1:a

for j=1:1:b

if J(i,j)>gbest1

J(i,j)=250;

else J(i,j)=0;

end

end

end

kk=1:1:G;

gbest1

figure(1)

imshow(J)

figure(2)

plot(kk,GG)

tt=etime(clock,t1)