一、多级阈值分割简介(具体理论见参考文献)
1 引言 图像分割是计算机视觉领域的一个前沿研究领域,是图像分析中非常重要的预处理步骤。分割的目标是将图像的表示简化或更改为更有意义且更易于分析的内容。多年来,该领域已经取得了大量的研究成果。一般而言,目前使用的图像分割方法可概括为基于区域的方法、基于边界的方法、基于聚类的方法以及基于阈值的方法四大类。阈值技术是用于分割各种类型图像的几种方法中最为流行的一种。图像阈值即从背景中提取场景中的对象,这有助于分析和解释图像。传统的多层次阈值法对于双层阈值处理是有效的,因为其简单、鲁棒性好。然而,由于利用穷举搜索寻找最优阈值,所以需要大量计算成本。近年来,研究人员提出了许多卓越的阈值分割技术,试图应用进化算法和智能优化法来获得最优阈值。
基于此,本文建立了一种基于粒子群优化算法的多级图像阈值分割。
2 粒子群优化算法概述 粒子群优化 (PSO) 算法是一种常用的进化寻优技术,它起源于对鸟群捕食行为的研究。其基本思想是通过群体中各个个体之间的协作以及信息共享来寻找最优解。
在PSO算法中,鸟群演变为一群没有质量也没有体积的微粒,并将其延伸到了N维空间中。在N维空间中,每个粒子i的位置由矢量Xi= (x1, x2,…,xN) 表示,而飞行速度则由矢量Vi= (v1, v2,…,vN) 表示。其中每个粒子都会对应一个适应值 (fitness value) ,这个适应值是根据目标函数设定的。
在这一过程中,每个粒子都知道当前发现的最佳位置pbest以及现在所处的位置Xi。而且粒子i还知道当前群体中所有粒子发现的最佳位置gbest (gbest即pbest中的最好值) 。各个粒子通过自身的位置信息,并结合其他粒子的位置信息来决定自己的运动方向。PSO算法的初始化就是一群随机粒子,即随机解。而在每一次的迭代过程中,粒子将通过分析pbest和gbest两个极值随时改变运动方向。粒子通过以下公式对速度vi和位置xi进行实时更新以寻求迭代过程中的最优解。 其中:rand () 是介于0与1的随机数;ω为惯性因子;c1和c2是学习因子,通常c1=c2=2。
二、部分源代码
% 用于多级图像阈值的 CPSOGSA
%
clear all
close all
clc
% 参数初始化
% I = imread('Aeroplane.tiff');
I = imread('Cameraman.tiff');
level = 5; %% Threshold = level-1
%
N_PAR = level; %阈值数(级别数-1)(维度)
dim = N_PAR;
%
n = 15; % 群的大小“对象数”%%% 默认值 (n = 15)
Max_Iteration = 300; % “迭代”的最大数量 %%% 默认(Max_Iteration = 300)
%
if size(I,3) == 1 %灰度图像
[n_countR, x_valueR] = imhist(I(:,:,1));
end
Nt = size(I,1) * size(I,2);
% %Lmax 表示颜色段 0 - 256
Lmax = 256; %图像中考虑了 256 个不同的最大级别(即 0 到 255)
for i = 1:Lmax
if size(I,3) == 1
%灰度图像
probR(i) = n_countR(i) / Nt;
end
end
if size(I,3) == 1
up = ones(n,dim) * Lmax;
low = ones(n,dim);
end
tic
RunNo = 1;
for k = [ 1 : RunNo ]
[CPSOGSA_bestit,CPSOGSA_bestF,CPSOGSA_Fit_bests]= CPSOGSA(I, Lmax, n,Max_Iteration,low,up,dim, level, probR);
BestSolutions1(k) = CPSOGSA_bestF;
disp(['Run # ' , num2str(k),'::' 'Best estimates =',num2str(CPSOGSA_bestit)]); % CPSOGSA
end
%
figure
boxplot([BestSolutions1'],{'CPSOGSA'});
color = [([1 0 0])];
h = findobj(gca,'Tag','Box');
for j=1:length(h)
patch(get(h(j),'XData'),get(h(j),'YData'),color(j));
end
title ('\fontsize{15}\bf 飞机 (k=2)');
% % title ('\fontsize{15}\bf Cameraman (k=2)');
xlabel('\fontsize{15}\bf 算法');
ylabel('\fontsize{15}\bf 最优适度值');
box on
% % %
%
figure
plot(CPSOGSA_Fit_bests,'DisplayName','CPSOGSA','Color','b','LineStyle','-','LineWidth',3);
disp( ['Time_CPSOGSA =', num2str(toc)]);
title ('\fontsize{15}\bf Aeroplane (k=2)'); % k=2,4,6,8,10
% % title ('\fontsize{15}\bf Cameraman (k=2)');
xlabel('\fontsize{15}\bf 迭代');
ylabel('\fontsize{15}\bf 适度值');
legend('\fontsize{12}\bf CPSOGSA');
%
%
gBestR = sort(CPSOGSA_bestit);
Iout = imageGRAY(I,gBestR);
Iout2 = mat2gray(Iout);
% % Show results on images
figure
imshow(Iout)
figure
imshow(I)
% % 结果显示
intensity = gBestR(1:dim-1);
STDR = std(CPSOGSA_Fit_bests) %Standard deviation of fitness values
MSEV = MSE(I, Iout) %Mean Square Error
PSNRV = PSNR(I, Iout) %PSNR between original image I and the segmented image Iout
SSIMV = ssim (I, Iout) %SSIM Quality Measure
FSIMV = FeatureSIM (I, Iout) %FSIM Quality Measure
Best_Fitness_Value= CPSOGSA_Fit_bests(k) %Best fitness
% % 在直方图上绘制阈值
figure
plot(probR)
hold on
vmax = max(probR);
for i = 1:dim-1
line([intensity(i), intensity(i)],[0 vmax],[1 1],'Color','r','Marker','.','LineStyle','-')
title ('\fontsize{15}\bf 飞机 (k=2)');
% title ('\fontsize{15}\bf Cameraman (k=2)');
xlabel('\fontsize{15}\bf 灰度级');
ylabel('\fontsize{15}\bf 频率');
hold off
end
三、运行结果
四、matlab版本及参考文献
1 matlab版本 2014a
2 参考文献 [1] 蔡利梅.MATLAB图像处理——理论、算法与实例分析[M].清华大学出版社,2020. [2]杨丹,赵海滨,龙哲.MATLAB图像处理实例详解[M].清华大学出版社,2013. [3]周品.MATLAB图像处理与图形用户界面设计[M].清华大学出版社,2013. [4]刘成龙.精通MATLAB图像处理[M].清华大学出版社,2015. [5]吕福起,李霄民.基于粒子群优化算法和模糊熵的多级阈值图像分割算法[J].计算机应用研究. 2019,36(09)
3 备注 简介此部分摘自互联网,仅供参考,若侵权,联系删除
|