首页 > 化工知识 > 【图像边缘检测】基于蚁群算法实现图像边缘检测matlab代码

【图像边缘检测】基于蚁群算法实现图像边缘检测matlab代码

时间:2021-12-11 来源: 浏览:

【图像边缘检测】基于蚁群算法实现图像边缘检测matlab代码

原创 天天Matlab 天天Matlab
天天Matlab

TT_Matlab

每天分享一点Matlab资料,一起成长进步。需要定制程序添加qq1575304183

收录于话题 #图像处理matlab源码 286个 内容

1 简介

目的提出基于蚂蚁算法的图像分割技术,解决传统的图像分割算法分割图像的效果不理想、不能满足图像分割要求等问题。方法将图像的灰度、梯度和邻域特征组合成蚂蚁,通过MATLAB实现蚁群图像分割算法对图像的外廓提取。结果与结论相对于传统的图像分割算法,基于蚂蚁算法的图像分割算法的外廓提取具有更高的仿真精度,得到的图形外廓更为理想。

蚁群算法是由意 大利科 学 家A.Colorni、M.Dorigo和V.Maniezzo等人提出的一种通过模仿蚂蚁的觅食行为来寻找复杂优化问题近似解的启发式算法。

蚂蚁是一种社会性群居昆虫,个体非常简单,但通过多数蚂蚁之间的团结与合作,是能够完成非常复杂的、具有“智能”的活动,它们都可以找到由巢穴到食物之间的最佳的路径,例如:当有障碍物突然出现在蚂蚁运动路线上时,它们能够迅速的再次找到最佳路径。那么,这样一个庞大的工作量,小小的蚂蚁是通过什么来完成的呢?在许多科学研究者不懈的努力下,他们得知,蚂蚁个体间是通过一种被称之为信息激素(pheromone)的物质进行信息传送的,其可以相互合作来完成困难的任务。

在对昆虫进行一段时间的观察之后,我们发现,虽然真实的蚂蚁没有视觉构造,但是蚂蚁在寻找食物源时,途中释 放信 息激 素[15],而且它们分泌的信息量会随着所走路线的增长和时间的推迟而不断挥发,在附近的其他蚂蚁能够在这个过程当中,随着时间的流逝,渐渐感知到信息素的存在和它的强弱,并由此决定它们以后的行为。从同一个地方快速启动时一群蚂蚁选择适合自己的方式找到了相同的各路径的食物来源,,找到最短路径的蚂蚁,能够更快的将食物搬回巢穴。信息素会随着时间的推移而蒸发。当一只蚂蚁经过很长一段路程的旅行,信息素蒸发的时间就更长。因此,时间短就更有利于在更快速的行进中更大的弥补蒸发的信息素。信息素密度能够在较短路径内维持高水平是因为它蒸发快。如此往复,就形成了一 个正 反馈的系统,最后大部分蚂蚁会根据这个正反馈系统选择一个最短的运输路线,这就是蚁群算法搜索寻优的过程。

2 部分代码

function edge_ACO %参考文献:"An Ant Colony Optimization Algorithm For Image Edge close all ; clear all ; clc ; % 读入图像 filename = ’ant128’ ; % img=rgb2gray(imread(’ant.jpg’)); img = imread ( ’rice.png’ ); img = double ( img ) ./ 255 ; [ nrow , ncol ] = size ( img ); %公式(3.24.4)初始化     % 产生边缘图矩阵,运用信息素函数判断是否是边缘     % 调用子函数进行二值分割 T = func_seperate_two_class ( p );     fprintf ( ’Done! ’ );     imwrite ( uint8 ( abs (( p > = T ) .* 255-255 )), gray ( 256 ), [ filename ’_edge_aco_’ num2str ( nMethod ) ’.jpg’ ], ’jpg’ ); end %%%%%%%%子函数%%%%%%% function level = func_seperate_two_class ( I ) % 功能:进行二值分割 I = I (:); % STEP 1: 通过直方图计算灰度均值, 设定T=mean(I) [ counts , N ]= hist ( I , 256 ); i = 1 ; mu = cumsum ( counts ); T ( i )=( sum ( N .* counts )) / mu ( end ); % STEP 2: 计算灰度值大于 T (MAT)像素的均值和灰度值小于 T(MBT)像素的均值 % step 1 mu2 = cumsum ( counts ( N < = T ( i ))); MBT = sum ( N ( N < = T ( i )) .* counts ( N < = T ( i ))) / mu2 ( end ); mu3 = cumsum ( counts ( N > T ( i ))); MAT = sum ( N ( N > T ( i )) .* counts ( N > T ( i ))) / mu3 ( end ); i = i +1 ; T ( i )=( MAT + MBT ) / 2 ; % STEP 3 :当T(i)~=T(i-1),重复STEP 2 Threshold = T ( i ); while abs ( T ( i ) - T ( i -1 )) > = 1     mu2 = cumsum ( counts ( N < = T ( i )));     MBT = sum ( N ( N < = T ( i )) .* counts ( N < = T ( i ))) / mu2 ( end );     mu3 = cumsum ( counts ( N > T ( i )));     MAT = sum ( N ( N > T ( i )) .* counts ( N > T ( i ))) / mu3 ( end );     i = i +1 ;     T ( i )=( MAT + MBT ) / 2 ;     Threshold = T ( i ); end % 归一化均值到 [i, 1]之间. level = Threshold ;

3 仿真结果

4 参考文献

[1]高蕊, and 马磊. "基于蚁群算法的图像分割方法." 宝鸡文理学院学报(自然科学版) (2018).

部分理论引用网络文献,若有侵权联系博主删除。

天天Matlab

赞赏二维码 微信扫一扫赞赏作者 赞赏

已喜欢, 对作者说句悄悄话
最多40字,当前共

  人赞赏

1 / 3

长按二维码向我转账

赞赏二维码

受苹果公司新规定影响,微信 iOS 版的赞赏功能被关闭,可通过二维码转账支持公众号。

版权:如无特殊注明,文章转载自网络,侵权请联系cnmhg168#163.com删除!文件均为网友上传,仅供研究和学习使用,务必24小时内删除。
相关推荐