【边缘检测】蚁群算法图像边缘检测【含Matlab源码 1189期】

news2024/9/24 12:19:09

⛄一、获取代码方式

获取代码方式1:
完整代码已上传我的资源:【边缘检测】基于matlab蚁群算法图像边缘检测【含Matlab源码 1189期】

获取代码方式2:
通过订阅紫极神光博客付费专栏,凭支付凭证,私信博主,可获得此代码。

备注:
订阅紫极神光博客付费专栏,可免费获得1份代码(有效期为订阅日起,三天内有效);

⛄二、蚁群算法图像边缘检测简介

1 蚁群优化算法原理
蚁群优化算法(ACO) 由意大利学者 Macro Dori- go于1992年在他的博士论文中首次提出,是一种用来在图中寻找最优化路径的概率型算法。生物学研究表明: 蚂蚁在运动时会在所经过的路径上释放出一种称为“信息素”的化学物质,后续的蚂蚁可根据此选择路径。前面的蚂蚁遇到一个路口时,会随机选择其中的一条路径并释放出相应的信息素,路径越长信
息素越少。后面的蚂蚁来到相同的路口时,就会根据信息素的多少做出路径选择,信息量大的路径被选择的概率相对较大,同时释放信息素,这样就形成了信息正反馈。最优路径上的信息量越来越大,而其他路径上的信息量越来越少,最终整个蚁群会找到最佳路径。采用蚁群优化算法的边缘检测N-S流程图,如图1所示。

2 蚁群优化算法图像边缘检测过程
基于蚁群优化算法的图像边缘检测方法,将图像中的每个像素看作一个点,利用若干只蚂蚁在一副二维图像上运动来构建信息素矩阵,其中矩阵的每个元代表了图像每个像素点位置的边缘信息。此外,蚂蚁们的移动方向可由图像强度值的局部变化来调整。
下面详细介绍各个过程。
在这里插入图片描述
2.1 初始化过程
在这里插入图片描述
2.2 执行过程
在这里插入图片描述
在这里插入图片描述
2.3 更新过程
在这里插入图片描述
2.4 决策过程
在这里插入图片描述
在这里插入图片描述

⛄三、部分源代码

function edge_ACO
%参考文献:"An Ant Colony Optimization Algorithm For Image Edge
close all; clear all; clc;
% 读入图像
filename = ‘ant128’;
raw=imread(‘ant.jpg’);
img=rgb2gray(raw);
img = double(img)./255;
[nrow, ncol] = size(img);
subplot(2,3,1);
imshow(raw); %显示源图像
%公式(3.24.4)初始化
for nMethod = 2:5;
%四种不同的核函数, 参见式 (3.24.7)-(3.24.10)
%E: exponential; F: flat; G: gaussian; S:Sine; T:Turkey; W:Wave
fprintf(‘Image edge detection using ant colony.\nPlease wait…\n’);
v = zeros(size(img));
v_norm = 0;
for rr =1:nrow
for cc=1:ncol
%定义像素团
temp1 = [rr-2 cc-1; rr-2 cc+1; rr-1 cc-2; rr-1 cc-1; rr-1 cc; rr-1 cc+1; rr-1 cc+2; rr cc-1];
temp2 = [rr+2 cc+1; rr+2 cc-1; rr+1 cc+2; rr+1 cc+1; rr+1 cc; rr+1 cc-1; rr+1 cc-2; rr cc+1];
temp0 = find(temp1(:,1)>=1 & temp1(:,1)<=nrow & temp1(:,2)>=1 & temp1(:,2)<=ncol & temp2(:,1)>=1 & temp2(:,1)<=nrow & temp2(:,2)>=1 & temp2(:,2)<=ncol);
temp11 = temp1(temp0, 😃;
temp22 = temp2(temp0, 😃;
temp00 = zeros(size(temp11,1));
for kk = 1:size(temp11,1)
temp00(kk) = abs(img(temp11(kk,1), temp11(kk,2))-img(temp22(kk,1), temp22(kk,2)));
end
if size(temp11,1) == 0
v(rr, cc) = 0;
v_norm = v_norm + v(rr, cc);
else
lambda = 10;
switch nMethod
case 1%‘F’
temp00 = lambda .* temp00;
case 2%‘Q’
temp00 = lambda .* temp00.^2;
case 3%‘S’
temp00 = sin(pi .* temp00./2./lambda);
case 4%‘W’
temp00 = sin(pi.temp00./lambda).pi.temp00./lambda;
end
v(rr, cc) = sum(sum(temp00.^2));
v_norm = v_norm + v(rr, cc);
end
end
end
% 归一化
v = v./v_norm;
v = v.100;
p = 0.0001 .
ones(size(img)); % 信息素函数初始化
%参数设置。
alpha = 1; %式(3.24.4)中的参数
beta = 0.1; %式(3.24.4)中的参数
rho = 0.1; %式(3.24.11)中的参数
%式(3.24.12)中的参数
phi = 0.05; %equation (12), i.e., (9) in IEEE-CIM-06
ant_total_num = round(sqrt(nrow
ncol));
% 记录蚂蚁的位置
ant_pos_idx = zeros(ant_total_num, 2);
% 初始化蚂蚁的位置
rand(‘state’, sum(clock));
temp = rand(ant_total_num, 2);
ant_pos_idx(:,1) = round(1 + (nrow-1) * temp(:,1)); %行坐标
ant_pos_idx(:,2) = round(1 + (ncol-1) * temp(:,2)); %列坐标
search_clique_mode = ‘8’; %Figure 1
% 定义存储空间容量
if nrow
ncol == 128
128
A = 40;
memory_length = round(rand(1).(1.15A-0.85A)+0.85A);
elseif nrowncol == 256256
A = 30;
memory_length = round(rand(1).(1.15A-0.85A)+0.85A);
elseif nrowncol == 512512
A = 20;
memory_length = round(rand(1).(1.15A-0.85A)+0.85A);
end
ant_memory = zeros(ant_total_num, memory_length);
% 实施算法
if nrowncol == 128128
% 迭代的次数
total_step_num = 300;
elseif nrowncol == 256256
total_step_num = 900;
elseif nrowncol == 512512
total_step_num = 1500;
end

total_iteration_num = 3;

for iteration_idx = 1: total_iteration_num
delta_p = zeros(nrow, ncol);
for step_idx = 1: total_step_num
delta_p_current = zeros(nrow, ncol);
for ant_idx = 1:ant_total_num
ant_current_row_idx = ant_pos_idx(ant_idx,1);
ant_current_col_idx = ant_pos_idx(ant_idx,2);
% 找出当前位置的邻域
if search_clique_mode == ‘4’
rr = ant_current_row_idx;
cc = ant_current_col_idx;
ant_search_range_temp = [rr-1 cc; rr cc+1; rr+1 cc; rr cc-1];
elseif search_clique_mode == ‘8’
rr = ant_current_row_idx;
cc = ant_current_col_idx;
ant_search_range_temp = [rr-1 cc-1; rr-1 cc; rr-1 cc+1; rr cc-1; rr cc+1; rr+1 cc-1; rr+1 cc; rr+1 cc+1];
end
%移除图像外的位置
temp = find(ant_search_range_temp(:,1)>=1 & ant_search_range_temp(:,1)<=nrow & ant_search_range_temp(:,2)>=1 & ant_search_range_temp(:,2)<=ncol);
ant_search_range = ant_search_range_temp(temp, 😃;
%计算概率转换函数
ant_transit_prob_v = zeros(size(ant_search_range,1),1);
ant_transit_prob_p = zeros(size(ant_search_range,1),1);
for kk = 1:size(ant_search_range,1)
temp = (ant_search_range(kk,1)-1)ncol + ant_search_range(kk,2);
if length(find(ant_memory(ant_idx,:)==temp))==0 ant_transit_prob_v(kk) = v(ant_search_range(kk,1), ant_search_range(kk,2));
ant_transit_prob_p(kk) = p(ant_search_range(kk,1), ant_search_range(kk,2));
else
ant_transit_prob_v(kk) = 0;
ant_transit_prob_p(kk) = 0;
end
end
if (sum(sum(ant_transit_prob_v))==0) | (sum(sum(ant_transit_prob_p))==0)
for kk = 1:size(ant_search_range,1)
temp = (ant_search_range(kk,1)-1)ncol + ant_search_range(kk,2);
ant_transit_prob_v(kk) = v(ant_search_range(kk,1), ant_search_range(kk,2));
ant_transit_prob_p(kk) = p(ant_search_range(kk,1), ant_search_range(kk,2));
end
end
ant_transit_prob = (ant_transit_prob_v.^alpha) .
(ant_transit_prob_p.^beta) ./ ((sum(sum((ant_transit_prob_v.^alpha) .
(ant_transit_prob_p.^beta))))+eps);
% 产生一个随机数来确定下一个位置
rand(‘state’, sum(100*clock));
temp = find(cumsum(ant_transit_prob)>=rand(1), 1);
ant_next_row_idx = ant_search_range(temp,1);
ant_next_col_idx = ant_search_range(temp,2);
if length(ant_next_row_idx) == 0
ant_next_row_idx = ant_current_row_idx;
ant_next_col_idx = ant_current_col_idx;
end
ant_pos_idx(ant_idx,1) = ant_next_row_idx;
ant_pos_idx(ant_idx,2) = ant_next_col_idx;
delta_p_current(ant_pos_idx(ant_idx,1), ant_pos_idx(ant_idx,2)) = 1;
if step_idx <= memory_length
ant_memory(ant_idx,step_idx) = (ant_pos_idx(ant_idx,1)-1)*ncol + ant_pos_idx(ant_idx,2);
elseif step_idx > memory_length
ant_memory(ant_idx,:) = circshift(ant_memory(ant_idx,:),[0 -1]);
ant_memory(ant_idx,end) = (ant_pos_idx(ant_idx,1)-1)*ncol + ant_pos_idx(ant_idx,2);
end
%更新信息素函数
p = ((1-rho).*p + rho.*delta_p_current.*v).delta_p_current + p.(abs(1-delta_p_current));
end
delta_p = (delta_p + (delta_p_current>0))>0;
p = (1-phi).*p;
end
end

⛄四、运行结果

在这里插入图片描述

⛄五、matlab版本及参考文献

1 matlab版本
2014a

2 参考文献
[1]陈浩,方勇,朱大洲,王成,陈子龙.基于蚁群算法的玉米植株热红外图像边缘检测[J].农机化研究. 2015,37(06)

3 备注
简介此部分摘自互联网,仅供参考,若侵权,联系删除

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/98180.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

12.17 - 每日一题 - 408

每日一句&#xff1a; 我们生活在行动中&#xff0c;而不是生活在岁月里;我们生活在思想中&#xff0c;而不是生活在呼吸里。 数据结构 1 在有向图G的拓扑序列中&#xff0c;若顶点Vi在顶点Vj之前&#xff0c;则下列情形不可能出现的是______ A.G中有弧<Vi,Vj>B.G中有…

sqli-labs 通关笔记详解 Less1 - Less10

文章目录GET显错注入流程前置知识注入步骤GET盲注基本流程前置知识注入步骤Less - 1Less - 2Less - 3Less - 4Less - 5Less - 6Less - 7Less - 8Less - 10做sqli-labs靶场之前建议补一下基础 SQL注入简介和注入方法教学 Web安全基础-SQL MySQL SQLMAP工具 详细使用方法 GET显…

动态规划问题——换钱的最少货币数

题目&#xff1a; 给定数组arr&#xff0c;arr中所有的值都为正数且不重复。每个值代表一种面值的货币&#xff0c;每种面值的货币可以使用任意张&#xff0c;在给定一个整数aim&#xff0c;代表要找的钱数&#xff0c;求组成aim的最少货币数。 示例&#xff1a; arr [5,2,…

自动生成MySQL DDL建表语句

简介项目中大部分情况下都是使用MySQL数据&#xff0c;而且主要使用的数据库类型是char、varchar、date、datetime、timestamp、int、tinyint等几种常见的数据类型&#xff1b;而且进行表设计时&#xff0c;一般都要出一份表设计文档&#xff0c;例如表设计模板如下因为有了如此…

[附源码]Nodejs计算机毕业设计基于移动端的药方收集系统Express(程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程。欢迎交流 项目运行 环境配置&#xff1a; Node.js Vscode Mysql5.7 HBuilderXNavicat11VueExpress。 项目技术&#xff1a; Express框架 Node.js Vue 等等组成&#xff0c;B/S模式 Vscode管理前后端分…

【Spring】一文带你吃透IOC容器技术

目录 一、前言 二、IOC容器技术 1、ioc概念 2、DI依赖注入 2.1、构造注入依赖 2.2、setter注入依赖 3、ioc底层实现 4、基于xml配置声明Bean以及使用 4.1、根节点标签beans 4.2、声明Bean 4.3、Bean的使用 5、面向接口编程 5.1、新增接口IOrderService 5.2、Order…

非零基础自学Golang 第11章 文件操作 11.2 文件基本操作 11.2.2 文件读取

非零基础自学Golang 文章目录非零基础自学Golang第11章 文件操作11.2 文件基本操作11.2.2 文件读取第11章 文件操作 11.2 文件基本操作 11.2.2 文件读取 想要读取文件可以使用os库中的Read接口&#xff1a; func (f &#xff0a;File) Read(b []byte) (n int, err error)Re…

RCNN网络源码解读(Ⅳ) --- 训练SVM二分类模型的准备过程

目录 1.回忆上一讲及本讲我们要做什么 2.回顾finetune是怎么训练的&#xff08;finetune.py&#xff09; 3. 训练SVM二分类模型 &#xff08;linear_svm.py&#xff09; 3.1 load_data 3.2 custom_classifier_dataset.py 3.3 custom_batch_sampler.py 3.4 hinge_loss 1…

python制作问题搜索解答器,从此学习无忧

前言 大家早好、午好、晚好吖 ❤ ~ 今天博主给大家带来一个问题搜索解答器&#xff01;&#xff01; 需要素材 以及一双慧手和一个灵活的脑子~ 效果展示 代码展示 导入模块 import requests import tkinter as tk from tkinter import ttk import webbrowserdef search(wor…

北京车牌那么难摇为什么还能那么受欢迎?

在北京生活的人来说一块北京车牌真的影响正常生活&#xff0c;特别是这两年的疫情反复...&#xff0c;面对房贷房租&#xff0c;衣食住行&#xff0c;就算外面世界再纷纷扰扰&#xff0c;也要面对...所以在北京生活没有一辆北京车牌汽车真的很麻烦。 对于在北京生活的人来说就…

【C语言刷题】PTA基础编程题目集精选

作者&#xff1a;匿名者Unit 专栏&#xff1a; 《C语言刷题》 目录题目精选6-7 统计某类完全平方数6-9 统计个位数字6-10 阶乘计算升级版6-11 求自定类型元素序列的中位数题目精选 6-7 统计某类完全平方数 我们先看一下题目要求&#xff1a; 根据题目给出的要求&#xff1a…

瑞格科技IPO被终止:曾拟募资5.6亿 江振翔三兄弟为实控人

雷递网 雷建平 12月17日浙江瑞格智能科技股份有限公司&#xff08;简称&#xff1a;“瑞格科技”&#xff09;日前IPO被终止。瑞格科技计划募资5.59亿元&#xff0c;其中&#xff0c;2.55亿元用于年产1000万套汽车配件技改项目&#xff0c;9240万元用于年产500万件智能传感器及…

css深度选择器deep

1.为什么要有deep 1.当我们给组件设置scoped的时候&#xff0c;此时我们组件的css样式只会对自己的内容生效&#xff0c;不会对子组件里面的内容生效。 <style lang"scss" scoped> .login-page {min-height: 100vh;background: url(/assets/login-bg.svg) no-r…

大脑网络的图论分析

利用图论测量大脑结构和功能网络的四个步骤: 定义网络节点——在脑电研究中&#xff0c;电极天然形成节点&#xff1b;在磁共振研究中&#xff0c;可以使用不同的脑图谱作为节点或者基于体素水平进行研究估计节点之间的连接性——结构上&#xff0c;可以由DTI计算两个脑区之间…

一文深度剖析扩散模型究竟学到了什么?

Title: <Diffusion Art or Digital Forgery? Investigating Data Replication in Diffusion Models> Paper: https://arxiv.org/pdf/2212.03860.pdf Github: Just get the point. 文章目录导读技术提升动机贡献背景图像检索与复制检测深度学习中的记忆语言模型中的记忆扩…

Linux Qt连接达梦数据库

最近因为工作需要&#xff0c;需要使用Qt连接达梦数据库&#xff0c;在Linux上比较麻烦&#xff0c;首先需要自己编译UnixODBC和Qt的QODBC库&#xff0c;其次还有各种环境配置。这里在安装好后记录一下&#xff0c;以后找起来方便。 先说下我的电脑是麒麟V10系统飞腾的CPU&…

共享SimpleDateFormat的并发问题

1、问题提出 梳理订单逻辑时发现对日期格式进行format的代码有如下写法 OneDateUtil中定义了一个全局static的SimpleDateFormat对象。SimpleDateFormat对象不是线程安全的&#xff0c;在多线程环境下容易造成数据转换和处理错误。 2、为什么SimpleDateFormat线程不安全 Sim…

[附源码]Node.js计算机毕业设计红色景点自驾游网站管理系统Express

项目运行 环境配置&#xff1a; Node.js最新版 Vscode Mysql5.7 HBuilderXNavicat11Vue。 项目技术&#xff1a; Express框架 Node.js Vue 等等组成&#xff0c;B/S模式 Vscode管理前后端分离等等。 环境需要 1.运行环境&#xff1a;最好是Nodejs最新版&#xff0c;我…

MySQL~索引

7、索引 MySQL官方对索引的定义为&#xff1a;索引&#xff08;Index&#xff09;是帮助MySQL高效获取数据的数据结构。 提取句子主干&#xff0c;就可以得到索引的本质&#xff1a;索引是数据结构。 7.1、索引的分类 在一个表中&#xff0c;主键索引只能有一个&#xff0c;唯一…

微机原理与接口技术笔记(持续更新)

文章目录前言储存系统与技术材料高速储存器缓冲储存器&#xff08;Cache&#xff09;材料&#xff0c;局部性&#xff0c;访问方式Cache全相联映射Cache交换与一致性单核CPU一致性处理多核CPU的MESI协议主储存器&#xff08;内存&#xff09;主要技术指标容量带宽内存模组与内存…