【图像分割】基于麻雀算法优化Kmeans实现图像分割附Matlab代码
1 内容介绍
提出一种基于K-Means聚类的麻雀算法,该算法利用麻雀算法鲁棒性较强且不易陷入局部最优值的特点,动态的确定了聚类的数目和中心,解决了K-Means聚类初始点选择不稳定的缺陷,在此两种算法融合的基础上进行图像分割处理,经试验证明该算法效果理想.
2 仿真代码
%_________________________________________________________________________%
% 麻雀优化算法 %
%_________________________________________________________________________%
function [Best_pos,Best_score,curve]=SSA(pop,Max_iter,lb,ub,dim,fobj)
ST = 0.6;%预警值
PD = 0.7;%发现者的比列,剩下的是加入者
SD = 0.2;%意识到有危险麻雀的比重
PDNumber = pop*PD; %发现者数量
SDNumber = pop - pop*PD;%意识到有危险麻雀数量
if(max(size(ub)) == 1)
ub = ub.*ones(1,dim);
lb = lb.*ones(1,dim);
end
%种群初始化
X0=initialization(pop,dim,ub,lb);
X = X0;
%计算初始适应度值
fitness = zeros(1,pop);
for i = 1:pop
fitness(i) = fobj(X(i,:));
end
[fitness, index]= sort(fitness);%排序
BestF = fitness(1);
WorstF = fitness(end);
GBestF = fitness(1);%全局最优适应度值
for i = 1:pop
X(i,:) = X0(index(i),:);
end
curve=zeros(1,Max_iter);
GBestX = X(1,:);%全局最优位置
X_new = X;
for i = 1: Max_iter
BestF = fitness(1);
WorstF = fitness(end);
R2 = rand(1);
for j = 1:PDNumber
if(R2<ST)
X_new(j,:) = X(j,:).*exp(-j/(rand(1)*Max_iter));
else
X_new(j,:) = X(j,:) + randn()*ones(1,dim);
end
end
for j = PDNumber+1:pop
% if(j>(pop/2))
if(j>(pop - PDNumber)/2 + PDNumber)
X_new(j,:)= randn().*exp((X(end,:) - X(j,:))/j^2);
else
%产生-1,1的随机数
A = ones(1,dim);
for a = 1:dim
if(rand()>0.5)
A(a) = -1;
end
end
AA = A'*inv(A*A');
X_new(j,:)= X(1,:) + abs(X(j,:) - X(1,:)).*AA';
end
end
Temp = randperm(pop);
SDchooseIndex = Temp(1:SDNumber);
for j = 1:SDNumber
if(fitness(SDchooseIndex(j))>BestF)
X_new(SDchooseIndex(j),:) = X(1,:) + randn().*abs(X(SDchooseIndex(j),:) - X(1,:));
elseif(fitness(SDchooseIndex(j))== BestF)
K = 2*rand() -1;
X_new(SDchooseIndex(j),:) = X(SDchooseIndex(j),:) + K.*(abs( X(SDchooseIndex(j),:) - X(end,:))./(fitness(SDchooseIndex(j)) - fitness(end) + 10^-8));
end
end
%边界控制
for j = 1:pop
for a = 1: dim
if(X_new(j,a)>ub)
X_new(j,a) =ub(a);
end
if(X_new(j,a)<lb)
X_new(j,a) =lb(a);
end
end
end
%更新位置
for j=1:pop
fitness_new(j) = fobj(X_new(j,:));
end
for j = 1:pop
if(fitness_new(j) < GBestF)
GBestF = fitness_new(j);
GBestX = X_new(j,:);
end
end
X = X_new;
fitness = fitness_new;
%排序更新
[fitness, index]= sort(fitness);%排序
BestF = fitness(1);
WorstF = fitness(end);
for j = 1:pop
X(j,:) = X(index(j),:);
end
curve(i) = GBestF;
end
Best_pos =GBestX;
Best_score = curve(end);
end
3 运行结果
4 参考文献
[1]杨雨航. "动态粒子群优化K-means的图像分割算法研究." 现代计算机 8(2019):5.
[2]张宏峰, 倪受东, 赵亮,等. 基于麻雀搜索算法的摄像机标定优化方法[J]. 激光与光电子学进展, 2021, 58(22):2215004.
[3]李志杰, 王力, 张习恒. 改进樽海鞘群优化K-means算法的图像分割[J]. 包装工程, 2022, 43(9):10.
博主简介:擅长智能优化算法、神经网络预测、信号处理、元胞自动机、图像处理、路径规划、无人机等多种领域的Matlab仿真,相关matlab代码问题可私信交流。
部分理论引用网络文献,若有侵权联系博主删除。
【图像分割】基于麻雀算法优化Kmeans实现图像分割附Matlab代码相关推荐
- 【预测模型-ELM预测】基于麻雀算法优化极限学习机预测附matlab代码
1 内容介绍 一种基于麻雀搜索算法优化极限学习机的风电功率预测方法,具体包括如下步骤:步骤1,确定影响风电功率的主导影响因子:步骤2,构建麻雀搜索算法优化核极限学习机预测模型,通过该模型对风电功率进行 ...
- 基于萤火虫算法优化的lssvm回归预测附matlab代码
✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信.
- 【优化求解】基于蝗虫算法求解单目标问题附matlab代码
1 简介 蝗虫算法( Grasshopper Optimization Algorithm,GOA ) 是 由 Saremi 等[1]于2017 年提出的一种元启发式仿生优化算法.具体原理如下: 2 ...
- 【智能优化算法】基于蚁狮算法求解多目标问题附Matlab代码
1 简介 蚁狮算法( ALO) 通过对随机解的探索,逐渐寻找近似最优解.与粒子群等优化算法不同的是,在 ALO 算法中有两类种群个体,即蚂蚁和蚁狮.ALO 算法的寻优过程模拟蚁狮捕食的六个基本步骤: ...
- 【图像增强】基于萤火虫算法实现图像对比度增强附matlab代码
1 内容介绍 由于图像本身的复杂性和数据量大,传统的图像处理和分析技术常存在计算复杂度高的问题,因此基于进化算法的图像处理方法得到广泛研究和关注.萤火虫算法(Firefly Algorithm,FA) ...
- 【樽海鞘算法】基于樽海鞘算法求解单目标问题附matlab代码(Salp Swarm Algorithm,SSA)
1 简介 2 部分代码 %_________________________________________________________________________________% Salp ...
- 【WSN通信】基于注水算法实现宽带无线通信资源分配附matlab代码
1 简介 功率分配技术能有效提高认知网络传输链路的信道容量,而注水算法利用凸优化的思想能实现功率分配最优化.针对认知网络中使用注水算法分配信道功率时未考虑邻近认知信道干扰的情况,对认知网络中邻近认知信 ...
- 【图像检测】基于AC算法实现图像显著性检测附matlab代码
1 简介 AC算法也是Achanta等提出的,与FT算法类似,只是在求欧式距离时使用的均值不再是整幅图像的均值,而是选取不同大小邻域内的均值(三种大小)分别求取欧式距离,再相加得到. 2 部分代码 ...
- 【预测模型】基于鲸鱼算法优化最小二乘支持向量机实现数据分类matlab代码
1 简介 Mirjalili和Lewis在2016年从座头鲸的猎食行为中得到启示,提出一种新的元启发式优化算法--鲸鱼优化算法.该算法仿照座头鲸的泡泡网觅食方法,通过收缩包围.螺旋位置更新以及随机捕食 ...
最新文章
- 网易云音乐消息队列改造之路
- Android(Xamarin)之旅(三)
- mysql router安装教程_MySQL Router 安装与配置
- BERT源码分析(PART III)
- 如何让listview或者gridview设置到底刷新新数据
- 远程研发能有多高效?手淘新版本上线只用了5天!
- Angular input decorator学习笔记
- 教你3行代码坑崩系统(哈哈哈哈)
- oracle报609,ORA-609 错误分析及解决方法
- webpack对模块查找的优化
- 卷积神经网络(CNN)与深度卷积神经网络(DCNN)
- 计算机图像识别的原理、过程、应用前景
- “天才少女”谷爱凌:奥运金牌在左,量子物理在右
- java math 三角函数_Java Math类的常用方法,三角函数运算
- 从零开始玩PT-新人指南
- 基于matlab的科学计算器设计,MATLAB科学计算器设计
- python影评_用Python分析18万条《八佰》影评,看看观众怎么说?
- 【C/C++基础进阶系列】实战记录 -- Dump 文件生成与分析
- AltiumDesigner绘制PCB(四)
- 微型计算机开不了机,联想C225微型计算机怎么开不起机呢?