matlab:C语言逻辑实现模糊C均值聚类分割法。
代码:
close all;
clear all;
clc;
data=imread('E:\matlabCX\图片\7.jpg');
[m,n,r]=size(data);
if r>1
data1=rgb2gray(data);
else
data1=data;
end
% data=imnoise(data,'gaussian',0,0.02);
% data= 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