当前位置: 首页 > news >正文

基于粒子群优化和模拟退火算法增强传统聚类研究(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥

🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。

⛳️座右铭:行百里者,半于九十。

目录

💥1 概述

📚2 运行结果

🎉3 参考文献

🌈4 Matlab代码实现

💥1 概述

图像分割是图像处理中最重要的环节,利用聚类算法进行图像分割被广泛应用。为进一步提高图像分割精度,改善传统多阈值图像分割方法计算量大、分割慢的问题。本文利用PSO + SA 算法对图像进行分割,并且通过渐进式增强传统聚类技术。

📚2 运行结果

部分代码:

%% Cleaning the Stage
clc;
clear;
close all;
warning('off');

%% Reading Image
MainOrg=imread('tst.jpg');
Gray=rgb2gray(MainOrg);
InpMat= double(MainOrg);

%% Basics
[s1,s2,s3]=size(InpMat);
R = InpMat(:,:,1);
G = InpMat(:,:,2);
B = InpMat(:,:,3);
X1 = (R-min(R(:)))/(max(R(:))-min(R(:)));
X2 = (G-min(G(:)))/(max(G(:))-min(G(:)));
X3 = (B-min(B(:)))/(max(B(:))-min(B(:)));
X = [X1(:) X2(:) X3(:)];

%% Cluster Numbers
clusteres = 7;

%% Cost Function and Parameters
% Cost Function
CostFunction=@(m) CLuCosPSOSA(m, X, clusteres);  
% Decision Variables
VarSize=[clusteres size(X,2)];  
% Number of Decision Variables
nVar=prod(VarSize);
% Lower Bound of Variables
VarMin= repmat(min(X),1,clusteres);      
% Upper Bound of Variables
VarMax= repmat(max(X),1,clusteres);     

%% PSO-SA Clustering Option and Run
% PSO-SA Options
% Iterations (more value means: slower runtime but, better result)
Itr=50;
% SA solver + PSO body
SA_opts = optimoptions('simulannealbnd','display','iter','MaxTime',Itr,'PlotFcn',@pswplotbestf);
options.SwarmSize = 250;
% PSO-SA Run
disp(['SA-PSO Segmentation Is Started ... ']);
[centers, Error] = particleswarm(CostFunction, nVar,VarMin,VarMax,SA_opts);
disp(['SA-PSO Segmentation Is Ended. ']);

%% Calculate Distance Matrix
% Create the Cluster Center 
g=reshape(centers,3,clusteres)'; 
% Create a Distance Matrix
d = pdist2(X, g); 
% Assign Clusters and Find Closest Distances
[dmin, ind] = min(d, [], 2);
% Sum of Cluster Distance
WCD = sum(dmin);
% Fitness Function of Centers Sum
z=WCD; 
% Final Segmented Image
SA_Segmented=reshape(ind,s1,s2);
PSOSAuint=uint8(SA_Segmented);
ColorSeg = labeloverlay(Gray,PSOSAuint);
%
medgray = medfilt2(SA_Segmented,[5 5]);
%
redChannel = ColorSeg(:,:,1); % Red channel
greenChannel = ColorSeg(:,:,2); % Green channel
blueChannel = ColorSeg(:,:,3); % Blue channel
medcolor1 = medfilt2(redChannel,[4 6]);
medcolor2 = medfilt2(greenChannel,[4 6]);
medcolor3 = medfilt2(blueChannel,[4 6]);
medrgb = cat(3, medcolor1, medcolor2, medcolor3);

🎉3 参考文献

[1]林国宇.基于聚类的图像分割研究综述[J].电脑知识与技术,2022,18(26):17-18+24.DOI:10.14004/j.cnki.ckt.2022.1713.

🌈4 Matlab代码实现

相关文章:

  • 前端经典面试题 | 性能优化之图片优化
  • 这些包括我在内都有的Python编程陋习,趁早改掉
  • 基于FPGA的数据采集系统
  • 10道不得不会的 Java容器 面试题
  • CPU的睿频、超线程、SIMD指令集等特性对密码算法性能的影响
  • python基于PHP+MySQL的论坛管理系统
  • 修改寄存器值的方法
  • 网络工具Netwox和Wireshark详解
  • Linux如何写C语言
  • PyTorch1.13 亮点一览,TorchEval、MultiPy 、TorchSnapshot 新库大解读
  • VCS工具学习笔记(3)
  • 初识C++(三)
  • C++ 【多态】
  • Codeforces 1750A. Indirect Sort
  • 7.10 操作系统的启动
  • 项目计划要趁早
  • 【阅读笔记】理解表驱动设计
  • [C语言、C++]数据结构作业:用递归实现走迷宫(打印正确通路即可)
  • JVM垃圾回收系列之垃圾收集器二
  • 2023年,前端开发未来可期
  • 上海浪琴环球马术冠军赛明日启幕!五一假期在这里感受精彩
  • 11家券商一季度净利翻番:9家利润超20亿,国泰海通居首
  • 对谈|《对工作说不》,究竟是要对什么说不?
  • 网商银行2024年年报发布,客户资产管理规模超过1万亿
  • 中国农业国际交流协会会长王守聪失联已逾半年,协会启动罢免
  • 【社论】人工智能,年轻的事业