一、获取代码方式

获取代码方式1:
完整代码已上传我的资源:【图像分割】基于matlab蚁群优化模糊聚类图像分割【含Matlab源码 130期】

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

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

二、图像分割简介

理论知识参考:【基础教程】基于matlab图像处理图像分割【含Matlab源码 191期】

三、部分源代码

clc
clear all
close all
%The input image should have square size
%All parameters are set to be exactly same as that of the paper%Image Loading
%filename = 'flower';
I=imread('1.jpg');
%img = double(imread(['C:\Users\yxw\Desktop.jpg']));
img=double(I);
figure(1)
imshow(img/255);
[nrow, ncol, channel] = size(img);
R=img(:, :, 1);
G=img(:, :, 2);
B=img(:, :, 3);%将彩色图像转化成灰度图像
intensity_img=zeros(nrow, ncol);
for rr = 1 : nrowfor cc = 1 : ncolintensity_img(rr, cc)=(((R(rr, cc)).^2+(G(rr, cc)).^2+(B(rr, cc)).^2).^0.5)/(3.^0.5);end
endfigure(2)
imshow(intensity_img/255);%使用canny算子进行边缘检测
edge_img = edge(intensity_img, 'canny');
figure(3)
imshow(edge_img);%average = mean(mean(img))/255;%参数设置
alpha=1;
beta=1;
num=0;%监督聚类中心的初始数目,初始化为0
statistic=60;
radius=50;% 聚类半径
lumda=0.40;
rho=0.95;
p1=1;
p2=1;
p3=1;
d=50;%ACA图像分割程序%初始化带有分类信息的图像矩阵
cluster_img = zeros(nrow, ncol, 4);
for rr=1:nrowfor cc=1:ncolcluster_img(rr, cc, 1) = img(rr, cc, 1);cluster_img(rr, cc, 2) = img(rr, cc, 2);cluster_img(rr, cc, 3) = img(rr, cc, 3);cluster_img(rr, cc, 4) = 0;end
end%初始化蚂蚁归类操作矩阵
ant_matrix=zeros(rr, cc, 1);
for rr=1:nrowfor cc=1:ncolif ant_matrix(rr, cc, 1) == 0ant_matrix(rr, cc, 1) = 2;%ant_matrix(rr, cc, 1)代表该蚂蚁的状态,"0"表示未被归类,"1"表示已经被归类,"2"表示等待被归类, "3"表示在本次循环中成为类, "4"表示该点为边缘像素点endend
endfor rr = 1 : nrowfor cc = 1 : ncolif edge_img(rr, cc)==1ant_matrix(rr, cc, 1) = 4;%划分为边缘像素点cluster_img(rr, cc, 1)=255;cluster_img(rr, cc, 2)=255;cluster_img(rr, cc, 3)=255;%边缘像素全部设为白色;endend
end%初始化监督聚类中心
%对图像颜色进行统计color_statistic = zeros(1331, 5);%color_statistic(i, 1)存储像素数目,
%color_statistic(i, 2)、color_statistic(i, 3)、color_statistic(i, 4)分别存储颜色的三个分量,color_statistic(i, 5)存储是否被作为监督聚类中心的信息for rr = 1 : nrowfor cc = 1 : ncol%对每个颜色分量进行分段处理if R(rr, cc) < 12.75x=1;elseif R(rr, cc) >= 12.75 && R(rr, cc) < 38.25x=2;elseif R(rr, cc) >= 38.25 && R(rr, cc) < 63.75x=3;elseif R(rr, cc) >= 63.75 && R(rr, cc) < 89.25x=4;elseif R(rr, cc) >= 89.25 && R(rr, cc) < 114.75x=5;elseif R(rr, cc) >= 114.75 && R(rr, cc) < 140.25x=6;elseif R(rr, cc) >= 140.25 && R(rr, cc) < 165.75x=7;elseif R(rr, cc) >= 165.75 && R(rr, cc) < 191.25x=8;elseif R(rr, cc) >= 191.25 && R(rr, cc) < 216.75x=9;elseif R(rr, cc) >= 216.75 && R(rr, cc) < 241.25x=10;elseif R(rr, cc) >= 241.25x=11;endif G(rr, cc) < 12.75y=1;elseif G(rr, cc) >= 12.75 && G(rr, cc) < 38.25y=2;elseif G(rr, cc) >= 38.25 && G(rr, cc) < 63.75y=3;elseif G(rr, cc) >= 63.75 && G(rr, cc) < 89.25y=4;elseif G(rr, cc) >= 89.25 && G(rr, cc) < 114.75y=5;elseif G(rr, cc) >= 114.75 && G(rr, cc) < 140.25y=6;elseif G(rr, cc) >= 140.25 && G(rr, cc) < 165.75y=7;elseif G(rr, cc) >= 165.75 && G(rr, cc) < 191.25y=8;elseif G(rr, cc) >= 191.25 && G(rr, cc) < 216.75y=9;elseif G(rr, cc) >= 216.75 && G(rr, cc) < 241.25y=10;elseif G(rr, cc) >= 241.25y=11;endif B(rr, cc) < 12.75z=1;elseif B(rr, cc) >= 12.75 && B(rr, cc) < 38.25z=2;elseif B(rr, cc) >= 38.25 && B(rr, cc) < 63.75z=3;elseif B(rr, cc) >= 63.75 && B(rr, cc) < 89.25z=4;elseif B(rr, cc) >= 89.25 && B(rr, cc) < 114.75z=5;elseif B(rr, cc) >= 114.75 && B(rr, cc) < 140.25z=6;elseif B(rr, cc) >= 140.25 && B(rr, cc) < 165.75z=7;elseif B(rr, cc) >= 165.75 && B(rr, cc) < 191.25z=8;elseif B(rr, cc) >= 191.25 && B(rr, cc) < 216.75z=9;elseif B(rr, cc) >= 216.75 && B(rr, cc) < 241.25z=10;elseif B(rr, cc) >= 241.25z=11;end%更新统计信息color_statistic(((x-1)*121+(y-1)*11+z), 2) = (color_statistic(((x-1)*121+(y-1)*11+z), 2) * color_statistic(((x-1)*121+(y-1)*11+z), 1) + R(rr, cc)) / (color_statistic(((x-1)*121+(y-1)*11+z), 1) + 1);color_statistic(((x-1)*121+(y-1)*11+z), 3) = (color_statistic(((x-1)*121+(y-1)*11+z), 3) * color_statistic(((x-1)*121+(y-1)*11+z), 1) + G(rr, cc)) / (color_statistic(((x-1)*121+(y-1)*11+z), 1) + 1);color_statistic(((x-1)*121+(y-1)*11+z), 4) = (color_statistic(((x-1)*121+(y-1)*11+z), 4) * color_statistic(((x-1)*121+(y-1)*11+z), 1) + B(rr, cc)) / (color_statistic(((x-1)*121+(y-1)*11+z), 1) + 1);color_statistic(((x-1)*121+(y-1)*11+z), 1) = color_statistic(((x-1)*121+(y-1)*11+z), 1) + 1;end
endfor i = 1 : 1331if color_statistic(i, 1) >= statisticnum = num +1;%确定监督聚类中心的数目color_statistic(i, 5) = 1;end
endcenter_ACA=zeros(num, 5);
for i=1 : numfor j = 1 : 1331if (color_statistic(j, 1) >= statistic) && (color_statistic(j, 5)==1)center_ACA(i, 1) = color_statistic(j, 2);center_ACA(i, 2) = color_statistic(j, 3);center_ACA(i, 3) = color_statistic(j, 4);color_statistic(j, 5) = 0;%已被作为监督聚类中心center_ACA(i, 5)=1;%center_ACA(i, 4)用于储存该类具有的像素数,初始化为0,center_ACA(i, 5)用于储存该类具有的信息素浓度breakendend
endant_info = zeros (num, 5);
%ant_info((r-1)*ncol+c, 1) 储存到该点的距离;ant_info((r-1)*ncol+c, 2) 储存该点的信息素;ant_info((r-1)*ncol+c,3) 储存到该点的启发函数
%ant_info((r-1)*ncol+c, 4) 储存到该点的概率;ant_info((r-1)*ncol+c, 5)储存类别%主程序
sum_ph=0;%概率公式的分母
do=0;%判断主程序是否应继续循环
do2=1;%判断类合并程序是否应继续循环
judge=zeros(nrow, ncol);%判断该类是否与别的类可以合并的矩阵
n=0;%判断ACA主程序循环次数
m=0;%判断类合并程序循环次数while (do<=500)%像素点聚类for rr = 1 : nrowfor cc = 1 : ncolif ant_matrix(rr, cc, 1)==0ant_matrix(rr, cc, 1) = 2;%将前一个循环里未被归类的蚂蚁状态都改为待聚类endendendfor rr = 1 : nrowfor cc = 1 : ncol%计算像素(rr, cc)到各聚类中心的距离、信息素等多项信息if ant_matrix(rr, cc, 1)==2ant_info = zeros(num, 6);sum_ph=0;for i = 1 : numant_info(i, 1) = sqrt(p1 * (R(rr, cc) - center_ACA(i, 1)).^2 + p2 * (G(rr, cc) - center_ACA(i, 2)).^2 + p3 * (B(rr, cc) - center_ACA(i, 3)).^2);ant_info(i, 2) = center_ACA(i, 5);ant_info(i, 3)=radius/(ant_info(i, 1)+0.00001);%保证距离为0的时候,启发函数很大但不为无穷。sum_ph = sum_ph + ant_info(i, 2).^alpha + ant_info(i, 3).^beta;ant_info(i, 5) = i;end%计算到各聚类中心的概率for i=1:numant_info(i, 4) = (ant_info(i, 2).^alpha + ant_info(i, 3).^beta)/sum_ph;endrand('state', sum(100*clock));temp = find(cumsum(ant_info(:, 4)) >= rand(1), 1);%路径的概率选择计算if ant_info(temp, 4) >= lumdaant_matrix(rr, cc, 1) = 1;%该像素已经被归类cluster_img(rr, cc, 4) = temp;%记录该像素的类别center_ACA(temp, 4) = center_ACA(temp, 4) + 1;%该聚类中包含的像素数加1if ant_info(temp, 1) <= radiuscenter_ACA(temp, 5) = center_ACA(temp, 5) + 1;%若距离小于radius,则信息素加1endelseant_matrix(rr, cc, 1) = 0;%像素未被归类,状态变为0endendendend%更新聚类中心信息for i = 1 : numif ~(center_ACA(i, 4)==0)sum1=0;sum2=0;sum3=0;for rr = 1 : nrowfor cc = 1 : ncolif cluster_img(rr, cc, 4)==isum1 = sum1 + cluster_img(rr, cc, 1);sum2 = sum2 + cluster_img(rr, cc, 2);sum3 = sum3 + cluster_img(rr, cc, 3);endendendcenter_ACA(i, 1) = sum1 / center_ACA(i, 4);center_ACA(i, 2) = sum2 / center_ACA(i, 4);center_ACA(i, 3) = sum3 / center_ACA(i, 4);endend%类间合并%初始化判断矩阵while(do2==1)judge=zeros(num, 1);for i = 1 : numif ~(center_ACA(i, 4)==0)judge(i, 1)=1;endendfor i = 1 : numif ~(center_ACA(i, 4)==0)cluster_info = zeros(num, 2);%记录类间距离temp=[d; 0];%第一个记录上次的距离值,第二个记录类别for j = 1 : numif (~(j==i))&&(~(center_ACA(j, 4)==0))cluster_info(j, 1) = sqrt((center_ACA(i, 1) - center_ACA(j, 1)).^2 + (center_ACA(i, 2) - center_ACA(j, 2)).^2 + (center_ACA(i, 3) - center_ACA(j, 3)).^2);cluster_info(j, 2) = j;endendfor j = 1 : numif cluster_info(j, 1)<temp(1,1) && (~(j==i)) && (~(center_ACA(j, 4)==0))temp(1, 1)=cluster_info(j, 1);temp(2, 1)=cluster_info(j, 2);%计算最相近的类endendif temp(1,1)<dfor rr = 1 : nrowfor cc = 1 : ncolif cluster_img(rr, cc, 4)==i;cluster_img(rr, cc, 4) = temp(2,1);%像素分类矩阵中,(rr, cc)点的像素被归类endendendcenter_ACA(temp(2, 1), 1) = (center_ACA(temp(2, 1), 1) * center_ACA(temp(2, 1), 4) + center_ACA(i, 1) * center_ACA(i, 4)) / (center_ACA(temp(2, 1), 4) + center_ACA(i, 4));center_ACA(temp(2, 1), 2) = (center_ACA(temp(2, 1), 2) * center_ACA(temp(2, 1), 4) + center_ACA(i, 2) * center_ACA(i, 4)) / (center_ACA(temp(2, 1), 4) + center_ACA(i, 4));center_ACA(temp(2, 1), 3) = (center_ACA(temp(2, 1), 3) * center_ACA(temp(2, 1), 4) + center_ACA(i, 3) * center_ACA(i, 4)) / (center_ACA(temp(2, 1), 4) + center_ACA(i, 4));center_ACA(temp(2, 1), 4) = center_ACA(temp(2, 1), 4) + center_ACA(i, 4);center_ACA(temp(2, 1), 5) = center_ACA(temp(2, 1), 5) + center_ACA(i, 5);%max(center_ACA(temp(2, 1), 5), center_ACA(i, 5)) + 0.3 * min(center_ACA(temp(2, 1), 5), center_ACA(i, 5));center_ACA(i, 4) = 0;center_ACA(i, 5) = 0;judge(i, 1)=0;judge(temp(2, 1), 1)=1;elsejudge(i, 1)=0;endendenddo2=0;for i = 1 : numif judge(i, 1) == 1do2=1;breakendendend%信息素挥发for i = 1 : numcenter_ACA(i, 5) = center_ACA(i, 5) * rho;enddo = do + 1 %每循环一次,会显示一次do
endfor rr = 1 : nrowfor cc = 1 : ncolif ant_matrix(rr, cc, 1)==1cluster_img(rr, cc, 1) = center_ACA(cluster_img(rr, cc, 4), 1);cluster_img(rr, cc, 2) = center_ACA(cluster_img(rr, cc, 4), 2);cluster_img(rr, cc, 3) = center_ACA(cluster_img(rr, cc, 4), 3);elseif ant_matrix(rr, cc, 1)==0cluster_img(rr, cc, 1) = 0;cluster_img(rr, cc, 2) = 0;cluster_img(rr, cc, 3) = 0;endend
end
%figure(),imshow(cluster_img(:, :, 1:3)./255);
imwrite(cluster_img(:, :, 1:3)./255, 'Result1.bmp', 'bmp');%FCM主程序
C = num;%类的数目为C
m = 2;%类参数设置
e = nrow * ncol * C * (0.01).^2;
sum_d = e+1;%初始化类矩阵
center_FCM = zeros(C, 3);
for i = 1 : Ccenter_FCM(i, 1) = center_ACA(i, 1);center_FCM(i, 2) = center_ACA(i, 2);center_FCM(i, 3) = center_ACA(i, 3);
end%初始化距离矩阵
distance=zeros(C, 1);%利用ACA运行结果初始化隶属度矩阵
subjection = zeros(nrow, ncol, C);
subjection_temp = zeros(nrow, ncol, C);
for rr = 1 : nrowfor cc = 1 : ncolif ~(ant_matrix(rr, cc, 1)==4)for i = 1 : Cdistance(i, 1) = sqrt((R(rr, cc)-center_FCM(i, 1)).^2 + (G(rr, cc)-center_FCM(i, 2)).^2 + (B(rr, cc)-center_FCM(i, 3)).^2);enddo = 1;for i = 1 : Cif distance(i, 1) == 0subjection(rr, cc, i) = 1;%若某个像素到聚类中心的距离为0,则其隶属度为1for j = 1 : Cif ~(j==i)subjection(rr, cc, j) = 0;do = 0;endendendbreakendif do == 1normalize = 0;for i = 1 : Csum_distance = 0;for j = 1 : Csum_distance = sum_distance + (distance(i, 1)/distance(j, 1)).^(2/(m-1));endsubjection(rr, cc, i) = 1 / sum_distance;normalize = normalize + subjection (rr, cc, i);endfor i = 1 : Csubjection(rr, cc, i) = (1 / normalize) * subjection(rr, cc, i);%隶属度归一化endendendend
endend
figure
imshow(cluster_img2(:, :, 1:3)./255)
% center_FCM
%cluster_img2(:, :, 4)
imwrite(cluster_img2(:, :, 1:3)./255, 'Result2.bmp', 'bmp');

四、运行结果


五、matlab版本及参考文献

1 matlab版本
2014a

2 参考文献
[1] 蔡利梅.MATLAB图像处理——理论、算法与实例分析[M].清华大学出版社,2020.
[2]杨丹,赵海滨,龙哲.MATLAB图像处理实例详解[M].清华大学出版社,2013.
[3]周品.MATLAB图像处理与图形用户界面设计[M].清华大学出版社,2013.
[4]刘成龙.精通MATLAB图像处理[M].清华大学出版社,2015.
[5]赵勇,方宗德,庞辉,王侃伟.基于量子粒子群优化算法的最小交叉熵多阈值图像分割[J].计算机应用研究. 2008,(04)

【图像分割】基于matlab蚁群优化模糊聚类图像分割【含Matlab源码 130期】相关推荐

  1. 【Matlab肌电信号】肌电信号处理【含GUI源码 966期】

    一.代码运行视频(哔哩哔哩) [Matlab肌电信号]肌电信号处理[含GUI源码 966期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1] 包子阳,余继周,杨 ...

  2. 【Matlab语音处理】声音信号频谱分析仪【含GUI源码 325期】

    一.代码运行视频(哔哩哔哩) [Matlab语音处理]声音信号频谱分析仪[含GUI源码 325期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1]韩纪庆,张磊, ...

  3. 【Matlab图像检索】综合特征图像检索【含GUI源码 395期】

    一.代码运行视频(哔哩哔哩) [Matlab图像检索]综合特征图像检索[含GUI源码 395期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1] 蔡利梅.MAT ...

  4. 【Matlab条形码识别】二维条形码识别【含GUI源码 607期】

    一.代码运行视频(哔哩哔哩) [Matlab条形码识别]二维条形码识别[含GUI源码 607期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1] 蔡利梅.MAT ...

  5. 【优化求解】基于matlab蚁群算法配电网故障定位【含Matlab源码 165期】

    ⛄一.蚁群算法简介 1 引言 在自然界中各种生物群体显现出来的智能近几十年来得到了学者们的广泛关注,学者们通过对简单生物体的群体行为进行模拟,进而提出了群智能算法.其中, 模拟蚁群觅食过程的蚁群优化算 ...

  6. 基于沙猫群优化算法的线性规划求解matlab程序

    基于沙猫群优化算法的线性规划求解matlab程序 1 沙猫群优化算法 沙猫的中文学名叫沙丘猫,俗名沙漠猫,与荒漠猫名字相似,但却是两种不同的猫科动物.沙猫生活在茫茫沙漠里,主要分布在分布于非洲北部,阿 ...

  7. 【优化算法】粒子群优化灰狼算法【含Matlab源码 006期】

    一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[优化算法]粒子群优化灰狼算法[含Matlab源码 006期] 点击上面蓝色字体,直接付费下载,即可. 获取代码方式2: 付费专栏优化求解( ...

  8. 【Matlab电力负荷预测】粒子群优化支持向量机短期电力负荷预测【含GUI源码 751期】

    一.代码运行视频(哔哩哔哩) [Matlab电力负荷预测]粒子群优化支持向量机短期电力负荷预测[含GUI源码 751期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 ...

  9. 【优化算法】基于matlab象鼻虫损害优化算法 (WDOA)【含Matlab源码 2228期】

    ⛄一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[优化算法]基于matlab象鼻虫损害优化算法 (WDOA)[含Matlab源码 2228期] 点击上面蓝色字体,直接付费下载,即可. 获 ...

  10. 【Matlab验证码识别】遗传算法和最大熵优化+大津法(OTSU)+自定义阈值数字验证码识别【含GUI源码 1694期】

    一.代码运行视频(哔哩哔哩) [Matlab验证码识别]遗传算法和最大熵优化+大津法(OTSU)+自定义阈值数字验证码识别[含GUI源码 1694期] 二.matlab版本及参考文献 1 matlab ...

最新文章

  1. Linux下多路复用IO接口epoll/select/poll的区别
  2. 简单python画圣诞树图片-python圣诞树代码
  3. WD1600AAJS AAKS 固件 数据恢复
  4. iOS开发UI篇--UIScrollView思维导图[不断更新]
  5. 【yii2调试神器】yii2-debug能力分析和配置项解析
  6. 忘记了root密码怎么办?
  7. vsftpd使用方法小结、Linux安装JDK出现“NoClassDefFoundError: /Object”的解决方案、ubuntu 12.04安装jdk
  8. 问题 B: 调整表中元素顺序(线性表)
  9. 今天的解放过后的蜡笔小新
  10. oracle安装 插件的执行方法失败_解决 VS Code 中 golang.org 被墙导致的 Go 插件安装失败问题...
  11. 思维导图 基础篇(07)擎绘系统-阅读导图
  12. java oracle spool,Oracle 数据导出工具 Spool | 学步园
  13. 在 Linux 下用 CMAKE 编译安装 OpenCV 3.2.0
  14. python时间模块详解(time模块)
  15. C++统计一个文件的行数,大写字母数,小写字母数,数字数
  16. OpenCv视频读与存
  17. 初中生适合学计算机智能吗,人工智能的原理是什么,初中生可以看懂
  18. Delphi实现多线程
  19. 初识MySQL数据库(MySQL数据库的基础操作)
  20. 2009中国翻译服务产业论坛志愿者招募公告

热门文章

  1. JavaScript中unescape函数
  2. labelImg安装小记
  3. 传智播客 朴素贝叶斯 算法评估 交叉验证与网格搜索 学习
  4. 增强现实:原理算法与应用 第一章增强现实概论笔记
  5. 20191109每日一句
  6. matlab绘图把横坐标修改为自己想的标签 并保存对应图的代码以便下次修改
  7. LaTeX 注释一行的某一部分
  8. Atitit WatchService 使用和不能监控抓取到的解决 原因是生成速度太快,但处理速度慢,导致许多event 忽视了.. How to solu??? asyn to process
  9. Atitit 人员级别评定法 目录 1.1. 十级评定法1--10 vs 年级评定法 1 1.2. 工龄评定 职级 岗位级别 1 2. 修订系数 学历*授课+绩效 1 3. 计算方法 1
  10. Atitit 查找轮廓 findContours