1 简介

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

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

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

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(1, 500);
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 仿真结果

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

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

4 参考文献

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

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

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