資源簡介
分享基于蟻群算法圖像分割的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)?>=?
評論
共有 條評論