粒子群算法优化的OTSU图像分割

article/2025/9/23 10:08:29

文章目录

  • 1 基本概念
  • 2 算法实现
  • 3 算法优化举例
  • 4 算法构成要素分析
  • 5算法优缺点分析
  • 6 算法图像分割中应用

1 基本概念

粒子群优化算法(PSO):它是进化算法的一种,它源于鸟群捕食的行为研究,基本思想是通过群体中个体之间的协作和信息共享来寻找最优解。在PSO中,每个优化问题的潜在解都是搜索空间中的一只鸟,抽象为粒子,每个粒子都有一个由目标函数决定的适应值,以及决定它们飞行的方向和距离。
粒子几点解释:
1、每个寻优问题的解被称为“粒子”,所有粒子都在一个D维空间内进行搜索
2、每个粒子都由一个适应度函数确定适应值以判断目前位置的好坏
3、每一个粒子都有记忆功能,能记住它经过的最佳位置
4、每一个粒子有一个速度以决定其移动的距离和方向

2 算法实现

算法流程
在这里插入图片描述
1、初始化:
初始化粒子群,给每个粒子赋予随机的初始位置和速度
2、计算适应值:
根据适应度函数,计算每个粒子的适应值
3、求个体最佳适应值:
对每个粒子,将其当前位置适应值与其历史最佳位置对应适应值比较,若当前位置适应值更高,则用当前位置更新历史最佳位置
4、求群体最佳适应值:
对每一个粒子,将其当前位置适应值与其全局最佳位置对应适应值比较,如果当前位置的适应值更高,则用当前位置更新全局最佳位置
5、更新粒子位置和速度:
根据公式更新每个粒子的速度与位置
6、判断算法是否结束:
通常算法达到最大迭代次数或者最佳适应度值的增量小于某个给定的阈值时算法停止
速度位置更新公式:
粒子i的第D维速度更新公式:在这里插入图片描述
粒子i的第D维位置更新公式:
在这里插入图片描述
几点说明:
在这里插入图片描述
第一部分为粒子先前的速度
第二部分为“认知部分”,表示粒子本身的思考,可理解为粒子i当前位置与自己最好位置之间的距离
第三部分为“社会部分”,表示粒子间的信息共享和合作,可理解为粒子i当前位置与群体最好位置之间的距离。
粒子的速度是三个方向速度的加权矢量和
在这里插入图片描述

3 算法优化举例

y = (Asin(A) cos(2A) - 2 A sin(3 A))×(B sin(B) cos(2 B) - 2 Bsin(3 B))
Matlab代码实现

//粒子群算法Matlab代码实现
clc;clear;close all;
%% 初始化种群
f= @(a,b)(a .* sin(a) .* cos(2 * a) - 2 * a .* sin(3 * a)).*(b .* sin(b) .* cos(2 * b) - 2 * b .* sin(3 * b)); % 函数表达式
figure(1);
[x0_1, x0_2]=meshgrid(0:.2:20);
y0=f(x0_1,x0_2);
mesh(x0_1, x0_2, y0);
hold on;N = 500;                         % 初始种群个数
d = 2;                          % 空间维数
ger = 300;                      % 最大迭代次数     
limit = [0, 20;0,20];                % 设置位置参数限制(矩阵的形式可以多维)
vlimit = [-1.5, 1.5;-1.5, 1.5];               % 设置速度限制
c_1 = 0.8;                        % 惯性权重
c_2 = 0.5;                       % 自我学习因子
c_3 = 0.5;                       % 群体学习因子 for i = 1:dx(:,i) = limit(i, 1) + (limit(i, 2) - limit(i, 1)) * rand(N, 1);%初始种群的位置
end    
v = rand(N, d);                  % 初始种群的速度
xm = x;                          % 每个个体的历史最佳位置
ym = zeros(1, d);                % 种群的历史最佳位置
fxm = zeros(N, 1);               % 每个个体的历史最佳适应度
fym = -inf;                      % 种群历史最佳适应度plot3(xm(:,1),xm(:,2),f(xm(:,1),xm(:,2)), 'ro');title('初始状态图');
hold on;
figure(2);
mesh(x0_1, x0_2, y0);
hold on;
plot3(xm(:,1),xm(:,2),f(xm(:,1),xm(:,2)), 'ro');
hold on;
%% 粒子群工作
iter = 1;
times = 1; 
record = zeros(ger, 1);          % 记录器
while iter <= gerfx = f(x(:,1),x(:,2)) ; % 个体当前适应度   for i = 1:N      if fxm(i) < fx(i)fxm(i) = fx(i);     % 更新个体历史最佳适应度xm(i,:) = x(i,:);   % 更新个体历史最佳位置end end
if fym < max(fxm)[fym, nmax] = max(fxm);   % 更新群体历史最佳适应度ym = xm(nmax, :);      % 更新群体历史最佳位置endv = v * c_1 + c_2 * rand *(xm - x) + c_3 * rand *(repmat(ym, N, 1) - x);% 速度更新% 边界速度处理for i=1:d for j=1:Nif  v(j,i)>vlimit(i,2)v(j,i)=vlimit(i,2);endif  v(j,i) < vlimit(i,1)v(j,i)=vlimit(i,1);endendend       x = x + v;% 位置更新% 边界位置处理for i=1:d for j=1:Nif  x(j,i)>limit(i,2)x(j,i)=limit(i,2);endif  x(j,i) < limit(i,1)x(j,i)=limit(i,1);endendendrecord(iter) = fym;%最大值记录if times >= 10cla;mesh(x0_1, x0_2, y0);plot3(x(:,1),x(:,2),f(x(:,1),x(:,2)), 'ro');title('状态位置变化');pause(0.5);times=0;enditer = iter+1;times=times+1;
end
figure(3);plot(record);title('收敛过程')
figure(4);
mesh(x0_1, x0_2, y0);
hold on;
plot3(x(:,1),x(:,2),f(x(:,1),x(:,2)), 'ro');title('最终状态图');disp(['最大值:',num2str(fym)]);
disp(['变量取值:',num2str(ym)]);

在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4 算法构成要素分析

1.种群大小N
N过小,陷入局优的可能性很大; N过大,优化能力很好,但计算时间大幅提高,收敛速度慢。
2.权重因子w
w较大,有利于跳出局部极小点,增强粒子的全局搜索能力。w较小,利于粒子的局部搜索能力
3.最大速度
作用在于维护算法的探索能力与开发能力的平衡, Vm较大时,增强了全局搜素能力,但粒子容易飞过最优解,导致局部搜索能力下降。较小时,开发能力增强,但会极大地增加全局搜索的时间,容易陷入局部最优。速度取值一般为优化变量范围的10-20%。
4.学习因子c1、c2
c1=0,“只有社会,没有自我”迅速丧失群体多样性,易陷入局优而无法跳出。c2=0,“只有自我,没有社会”完全没有信息的社会共享,导致算法收敛速度缓慢 。

5算法优缺点分析

PSO算法的优点:
算法通用性强,不依赖于问题信息,全局搜索精度高。
群体搜索,并具有记忆功能,保留局部个体和全局种群的最优信息,无需梯度信息。
原理结构简单,设置参数少,容易实现。
协同搜索,同时利用个体局部信息和群体全局信息指导搜索,收敛速度快。
PSO算法的缺点:
算法局部搜索能力较差,搜索精度不够高。
算法不能够绝对保证搜索到全局最优解,容易陷入局部最优解。
算法搜索性能对参数具有一定的依赖性。

6 算法图像分割中应用

粒子群算法优化OTSU图像分割:
1.粒子群的个体初始化
确定种群数量,在OTSU图像分割中一般设定粒子群数量为15,这15个粒子代表15个不同的灰度值(15个不同的阈值),这15个粒子的灰度值只能在0-255内的整数
2.设置每个粒子的初始速度
初始速度就相当于每次改变位置的步长,不能太大也不能太小,更不能超出0-255范围
3.计算每个粒子的最佳位置和全局最佳位置
根据最大类间方差公式,计算每个粒子的最大类间方差,并找到全局最大类间方差确定其位置
4.判断算法是否结束
如果全局最大方差对应的位置不是你最终要的位置就重复1~3步骤,直到找到最佳分割阈值。
PSO算法已在图像分割、图像配准、图像融合、图像识别、图像压缩和图像合成等方面发挥作用
在这里插入图片描述
在这里插入图片描述


http://chatgpt.dhexx.cn/article/W9WIp1bD.shtml

相关文章

【机器学习】K-Means算法优化

K-Means算法优化 学习目标1. Canopy算法配合初始聚类1.1 Canopy算法配合初始聚类实现流程1.2 Canopy算法的优缺点 2. K-means3. 二分k-means4. k-medoids&#xff08;k-中心聚类算法&#xff09;5. Kernel k-means6. ISODATA7. Mini Batch K-Means8. 小结 学习目标 知道K-mean…

鲸鱼算法优化PID参数优化附matlab代码

第一 章 鲸鱼优化算法 算法介绍参考文献:Seyedali Mirjalili,Andrew Lewis. The Whale Optimization Algorithm[J]. Advances in Engineering Software,2016,95. 第二章 鲸鱼优化PID参数 首先我们需要建立一个直流电机PID控制系统&#xff0c;WOA算法通过将系统上的误差作为…

麻雀优化算法 优化XGBoost的参数 python代码

文章目录 麻雀优化算法麻雀优化算法的改进加入Ten混沌序列 XGBoost原理麻雀优化算法优化XGBoost参数范围部分代码画图 优化结果评价结果和运行时间适应度曲线训练集结果测试集结果 麻雀优化算法 麻雀优化算法是2020年提出来的&#xff0c;该算法利用麻雀的角色分工和协作机制高…

KNN算法优化

在之前所写的KNN算法python实现里&#xff0c;KNN对k的选取很敏感&#xff0c;因为它给所有的近邻分配相同权重&#xff0c;无论距离测试样本有多远。为了降低该敏感性&#xff0c;可以使用加权KNN&#xff0c;给更近的近邻分配更大的权重&#xff0c;给较远的样本权重相应减少…

【常见的优化算法介绍】

常见的优化算法介绍 1. 批量梯度下降算法&#xff08;batch gradient descent BGD&#xff09; 每次迭代都需要把所有样本都送入&#xff0c;这样的好处是每次迭代都顾及了全部的样本&#xff0c;做的是全局最优化,但是有可能达到局部最优。 2. 随机梯度下降算法&#xff08;…

常用优化算法介绍

作者:Walker 在机器学习的世界中,通常我们会发现有很多问题并没有最优的解,或是要计算出最优的解要花费很大的计算量,面对这类问题一般的做法是利用迭代的思想尽可能的逼近问题的最优解。我们把解决此类优化问题的方法叫做优化算法,优化算法本质上是一种数学方法,常见的…

十大经典算法及其优化

本文转自&#xff1a;https://blog.csdn.net/qq_40803710/article/details/80642703 算法概述 0.1 算法分类 十种常见排序算法可以分为两大类&#xff1a; 非线性时间比较类排序&#xff1a;通过比较来决定元素间的相对次序&#xff0c;由于其时间复杂度不能突破O(nlogn)&#…

虚拟机里CDlinux 里的水滴 minidwep-gtk

假如什么都没有使用虚拟机打开这个系统&#xff0c;就搞这个 会显示 下方 表示 网卡 必须是3070 或者 8187的 网卡&#xff0c;自带的网卡是不支持的

CDLINUX——minidwep-gtk

1.下载CDLinux http://fastsoft.onlinedown.net/down/minidwep.zip 解压后是 2.使用虚拟机安装iso 注&#xff1a;版本选择“其他linux 2.6x内核” 安装参考&#xff1a;http://www.downza.cn/soft/12715.html 3.使用 使用参考&#xff1a;http://soft.onlinedown.net/s…

CDliux--minidwep 无线密码渗透测试

CDliux–minidwep 无线密码破解渗透测试 一. 工具准备 1.首先下载CDLinux 用虚拟机安装&#xff0c;教程有很多 CDLINUX&#xff1a;cdlinux 2.支持cdlinux 的无线网卡选择RT 3070/或者 RT8187 某宝上有很多 二.渗透测试 1.cdlinux 安装好后链接无线网卡 2.打开minidwep-gtk …

IPWorks S/MIME Delphi Edition

IPWorks S/MIME是一套用于电子邮件加密和文档安全的综合组件。IPWorks S/MIME使用公钥密码标准&#xff08;PKCS&#xff09;实现加密和解密的S/MIME标准。 IPWorks S/MIME包括通用的S/MIME组件以及支持S/MIME的IPWorks POP3、IMAP、SMTP、FileMailer和HTMLMailer组件版本。还…

MinIO客户端mc使用

官网&#xff1a; 英文网址&#xff08;最好查看英文网址&#xff09;&#xff1a;https://min.io/中文网址&#xff08;没有及时更新&#xff0c;容易被坑&#xff09;&#xff1a;http://www.minio.org.cn/ 使用的 minio 版本是&#xff1a;RELEASE.2021-11-* 一、MinIO 客…

MinIO的介绍以及简单的使用

什么是MinIO MinIO是在GUN Affero通用公共许可证 v3.0 下发布的高性能对象存储.他与AmazonS3云存储服务API兼容.使用MinIO为机器学习,分析和应用程序数据工作负载构建高性能基础架构. MinIO是一个高兴能的对象存储,什么是对象存储(Object Storage Service),对象存储是支持海量用…

【LWIP】stm32用CubeMX(6.4版)配置LwIP+Ping+TCPclient+TCPserver发送信息到PC(操作部分)

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言零、更新&#xff08;2022.08.07&#xff09;一、实验平台二、手把手全程配置步骤1.配置电脑环境2.配置cubeMX3.配置MDK&#xff08;Keil5&#xff09;4.配置TC…

minicap介绍

从WEB 端批量移动设备管理控制工具 STF 的环境搭建和运行文章了解到STF这个工具&#xff0c;然后试用了一下。最近在做一个测试工具&#xff0c;发现Android原生的截图工具截图非常缓慢&#xff0c;然后想起了stf工具中截图非常快&#xff0c;甚至连执行monkey的动作都能在web端…

​ MinIO​使用

引言&#xff1a;为什么要使用minio MinIO是对象存储服务,它基于Apache License 开源协议&#xff0c;兼容Amazon S3云存储接口。适合存储非结构化数据&#xff0c;如图片&#xff0c;音频&#xff0c;视频&#xff0c;日志等。对象文件最大可以达到5TB。类似于腾讯的oss或者阿…

MiniApp Dev

小程序开发 MiniApp Dev 2_WinkeyTseng_YongTai的博客-CSDN博客 MiniApp Dev 3_WinkeyTseng_YongTai的博客-CSDN博客 MiniApp Dev 4_spencer_tseng的博客-CSDN博客

MinIO的简单实用(一)

一、什么是MinIO MinIO是在GNU Affero 通用公共许可证v3.0下发布的高性能对象存储。它与AmazonS3云存储服务API兼容。使用MinIO为机器学习、分析和应用程序工作负载构建高性能基础架构。 MinIO是高性能对象存储&#xff0c;什么是对象存储&#xff08;Object Storage Service&…

取代奶瓶Minidwep-gtk破解WPA 全攻略

原文地址为&#xff1a; 取代奶瓶Minidwep-gtk破解WPA 全攻略 取代奶瓶Minidwep-gtk 破 WPA 全攻略 目录 1、 CDlinux 下使用 minidwepgtk 获取握手包并使用自带的字典破解 2、 自带的字典破解不出密码时使用 U 盘外挂字典继续暴力破解密码 3、 将握手包拷贝到 Windows 系统下…

Minidwep-gtk字典 破 WPA

取代奶瓶Minidwep-gtk 破 WPA 全攻略 目录 1、 CDlinux 下使用 minidwepgtk 获取握手包并使用自带的字典破解 2、 自带的字典破解不出密码时使用 U 盘外挂字典继续暴力破解密码 3、 将握手包拷贝到 Windows 系统下使用 ewsa 工具高速破解密码 4、破解 WPA 加密“握手包”字典的…