资源简介

分享基于蚁群算法图像分割的matlab代码,亲测可用。

资源截图

代码片段和文件信息

function ACA_FCM
%The input image should have square size
%All parameters are set to be exactly same as that of the paper

%Image Loading
filename = ‘flower‘;
img = double(imread([filename ‘.jpg‘]));
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 : nrow
    for cc = 1 : ncol
        intensity_img(rr cc)=(((R(rr cc)).^2+(G(rr cc)).^2+(B(rr cc)).^2).^0.5)/(3.^0.5);
    end
end

figure(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:nrow
    for cc=1:ncol
        cluster_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:nrow
    for cc=1:ncol
        if ant_matrix(rr cc 1) == 0
            ant_matrix(rr cc 1) = 2;%ant_matrix(rr cc 1)代表该蚂蚁的状态,“0“表示未被归类,“1“表示已经被归类,“2“表示等待被归类 “3“表示在本次循环中成为类 “4“表示该点为边缘像素点
        end
    end
end

for rr = 1 : nrow
    for cc = 1 : ncol
        if edge_img(rr cc)==1
            ant_matrix(rr cc 1) = 4;%划分为边缘像素点
            cluster_img(rr cc 1)=255;
            cluster_img(rr cc 2)=255;
            cluster_img(rr cc 3)=255;%边缘像素全部设为白色;
        end
    end
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 : nrow
    for cc = 1 : ncol
        %对每个颜色分量进行分段处理
        if R(rr cc) < 12.75
            x=1;
        elseif R(rr cc) >= 12.75 && R(rr cc) < 38.25
            x=2;
        elseif R(rr cc) >= 38.25 && R(rr cc) < 63.75
            x=3;
        elseif R(rr cc) >= 63.75 && R(rr cc) < 89.25
            x=4;
        elseif R(rr cc) >= 89.25 && R(rr cc) < 114.75
            x=5;
        elseif R(rr cc) >= 114.75 && R(rr cc) < 140.25
            x=6;
        elseif R(rr cc) >= 140.25 && R(rr cc) < 165.75
            x=7;
        elseif R(rr cc) >= 165.75 && R(rr cc) < 191.25
            x=8;
        elseif R(rr cc) >= 191.25 && R(rr cc) < 216.75
            x=9;
        elseif R(rr cc) >= 216.75 && R(rr cc) < 241.25
            x=10;
        elseif R(rr cc) >= 241.25
            x=11;
        end

        if G(rr cc) < 12.75
            y=1;
        elseif G(rr cc) >= 12.75 && G(rr cc) < 38.25
            y=2;
        elseif G(rr cc) >= 38.25 && G(rr cc) < 63.75
            y=3;
        elseif G(rr cc) >= 

评论

共有 条评论