【图像分割】基于粒子群算法实现图像的自适应多阈值快速分割matlab代码

335 阅读2分钟

1 简介

为确定图像分割的最佳阈值,基于粒子群优化算法提出了一种多阈值图像分割方法.由最大熵或最大类间方差法得到优化的目标函数,用粒子群算法对其进行优化,得到分割的最佳阈值,并用该阈值对图像进行分割.将分割结果与遗传算法的多阈值分割结果相比较可以看出,该算法不仅可实现正确的图像分割,并可使分割速度大大提高.

2 部分代码

clc;clear;close all;                %清屏,删除已有的变量和窗口,tic和toc用来给程序计时

%% 输入图像;
Imag = imread('24063.jpg');%296059   
Imag=rgb2gray(Imag);
Image_Shangmax=Imag;

%% 开始种群等基本定义
N = 500;                           % 初始种群个数
d = 3;                             % 阈值个数(参看上述的函数表达式)
ger = 300;                         % 最大迭代次数     
plimit = [1,256];
         

%% 作图
figure(3);
plot(record);                %画出最大值的变化过程
title('收敛过程')

threshold1 = ym(1);
threshold2 = ym(2);threshold3 = ym(3);
[height,length]=size(Image_Shangmax);

for i=1:length
   for j=1:height
       if Image_Shangmax(j,i)>threshold3
           Image_Shangmax(j,i)=255;
       elseif Image_Shangmax(j,i)>threshold2 && Image_Shangmax(j,i)<=threshold3
           Image_Shangmax(j,i)=165;
       elseif Image_Shangmax(j,i)>threshold1 && Image_Shangmax(j,i)<=threshold2
           Image_Shangmax(j,i)=80;
       else  
           Image_Shangmax(j,i)=0;
       end
   end
end

figure(4);
imshow(Image_Shangmax);
xlabel(['最大熵法阈值',num2str(ym)]);


%% 适应度函数
function fx = f(x)
Imag = imread('24063.jpg');%296059   
Imag=rgb2gray(Imag);

[height,length]=size(Imag);
totalNum=height*length;

pixelCount=zeros(1,256);%统计各个像素值的个数
for i=1:length
   for j=1:height
       number=Imag(j,i)+1;
       pixelCount(number)=pixelCount(number)+1;
   end
end

pi=pixelCount/totalNum;  %pi 灰度级为i的像素出现的概率 

fx = zeros(1500)

for i=1:500
   m=x(i,1);
   n=x(i,2); k=x(i,3);
   w0=sum(pi(1:m));
   w1=sum(pi(m+1:n));
   w2=sum(pi(n+1:256));    w3=sum(pi(k+1:256));
  H0=0;
  H1=0;
  H2=0;   H3=0;
   for j=1:m
       if w0 > 0 && pi(1,j)/w0 ~=0
           H0 = H0 - (pi(1,j)/w0).*log(pi(1,j)/w0); %计算各个阈值下的前景熵
       else
           H0 = H0;
       end  
   end
   
   for j=m+1:n
       if w1 > 0 && pi(1,j)/w1 ~=0
           H1 = H1 - (pi(1,j)/w1).*log(pi(1,j)/w1); %计算各个阈值下的背景熵
       else
           H1 = H1;
       end  
   end
   
   for j=n+1:k
       if w2 > 0 && pi(1,j)/w2 ~=0
           H2 = H2 - (pi(1,j)/w2).*log(pi(1,j)/w2); %计算各个阈值下的背景熵
       else
           H2 = H2;
       end  
   end
       for j=k+1:256
       if w3 > 0 && pi(1,j)/w3 ~=0
           H3 = H3 - (pi(1,j)/w3).*log(pi(1,j)/w3); %计算各个阈值下的背景熵
       else
           H3 = H3;
       end  
   end
   fx(i)=H0+H1+H2+H3;
   
end

end

3 仿真结果

4 参考文献

[1]韦苗苗,江铭炎. (2005). 基于粒子群优化算法的多阈值图像分割. 山东大学学报:工学版, 35(6), 4.

部分理论引用网络文献,若有侵权联系博主删除​。

5 MATLAB代码与数据下载地址

见博客主页