%讀入灰度影像,模糊c均值分割
close all;
clear all;
clc;
data=https://bbs.csdn.net/topics/imread('4.jpg');
[m,n,r]=size(data);
if r>1
data1=rgb2gray(data);
else
data1=data;
end
% data=https://bbs.csdn.net/topics/imnoise(data,'gaussian',0,0.02);
% data=https://bbs.csdn.net/topics/ imnoise(data,'salt & pepper',0.05);
data1=imresize(data1,[256 256]);
[m,n]=size(data1);
figure(1);
% subplot(1,2,1);%圖排成1行2列,將圖畫在figure 中第一幅圖上
imshow(data1);
title('原影像');
data1=double(data1);
% 確定引數
% c=3;
c=2;
mc=2.0;
e=0.01;%精度
ct=0;%迭代次數ct
%初始化距離
d=zeros(m,n,c);
% 初始化隸屬度
u=zeros(m,n,c);
v1(1)=75;
% v1(2)=180;
v1(2)=260;
while e>0.0001 && ct<1000 %回圈條件
v=v1;
% 算距離:樣本data(i,j)到第k類的距離
for k=1:c
for i=1:m
for j=1:n
d(i,j,k)=(data1(i,j)-v1(k))^2+0.0001;
end
end
end
% 算隸屬度
for j=1:n
for i=1:m
tp1=0.0;
for k=1:c
tp1=tp1+(1/d(i,j,k))^(1/(mc-1));
end
for k=1:c
u(i,j,k)=(1/d(i,j,k))^(1/(mc-1))/tp1;
end
end
end
% 更新聚類中心
for k=1:c
tp1=0.0;
tp2=0.0;
for j=1:n
for i=1:m
tp1=tp1+u(i,j,k)^mc*data1(i,j);
tp2=tp2+u(i,j,k)^mc;
end
end
v1(k)=tp1/tp2; %聚類中心
end
% 終止條件
temp=0.0;
for k=1:c
temp=temp+(v(k)-v1(k))^2;
end
if temp<0.0001
e=0.0001;
end
ct=ct+1;
end
% 聚類
I=zeros(m,n);
% for i=1:m
% for j=1:n
% if u(i,j,1)>u(i,j,2)&& u(i,j,1)>u(i,j,3)
% I(i,j)=0;
% else
% if u(i,j,2)>u(i,j,3)&& u(i,j,2)>u(i,j,1)
% I(i,j)=128;
% else
% I(i,j)=255;
% end
% end
% end
% end
for i=1:m
for j=1:n
if u(i,j,1)>u(i,j,2)
I(i,j)=0;
else
I(i,j)=255;
end
end
end
figure(2);
% subplot(1,2,2)%圖排成2行2列,將圖畫在figure 中第一幅圖上
imshow(uint8(I));
title('分割后的影像')
% f=getimage(figure(2));
% imwrite(f,'D:\圖片\picture\1.png');
% tp1=0.0;
% for i=1:m
% for j=1:n
% for k=1:c
% tp1=tp1+u(i,j,k)*log(u(i,j,k));
% end
% end
% end
% V=tp1/(-m*n);
uj5u.com熱心網友回復:
大佬能不能解釋下轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/46749.html
標籤:其他開發語言
