clear all%清除workspace中的所有变量
I=imread('4.bmp');%读入图像文件
figure(1);
imshow(I);title('原图像'); %显示原来的图像
count=imhist(I); %灰度频率
[m,n]=size(I);%测矩阵的大小
h=count/(m*n)%求灰度级数
V1=zeros(2); %确定对称矩阵A
V2=zeros(2);
U1=zeros(2,256); %设定分区矩阵U
m1=2; %确定加权指数m
V1(1)=20; %初始化聚类中心V,C=2
V1(2)=250;
l=length(h)
I=double(I);%转换变量的类型
diedai=1;
while (diedai==1)
for i=1:l %修改迭代过程中的分区矩阵
if (i-V1(1))^2>0.01&(i-V1(2))^2>0.01
tep1=(i-V1(1))^2;
tep2=(i-V1(2))^2;
U1(1,i)=1.0/(1+(tep1/tep2)^(1.0/(m1-1)));
U1(2,i)=1.0/(1+(tep2/tep1)^(1.0/(m1-1)));
else
if (i-V1(1))^2<0.01
U1(1,i)=1.0;
else
U1(2,i)=0.0;
end
if (i-V1(2))^2<0.01
U1(1,i)=0.0;
else
U1(2,i)=1.0;
end
end
end
tep1=0.0;
tep2=0.0;
tep3=0.0;
tep4=0.0;
for i=1:l %求迭代过程中的聚类中心
tep1=tep1+h(i)*(i)*U1(1,i)^m1;
tep2=tep2+h(i)*U1(1,i)^m1;
tep3=tep3+h(i)*(i)*U1(2,i)^m1;
tep4=tep4+h(i)*U1(2,i)^m1;
end
V2(1)=tep1/tep2;
V2(2)=tep3/tep4;
if (V1(1)-V2(1))^2<0.01&(V1(2)-V2(2))^2<0.01
diedai=0; %迭代停止判断 阈值取ε=0.01
else
V1(1)=V2(1);
V1(2)=V2(2);
end
end
I1=zeros(m,n); % m ,n 为图像的尺度
for i=1:m % 二值化图像
for j=1:n
if (I(i,j)-V2(1))^2>(I(i,j)-V2(2))^2 % 距离聚类中心近,则将二值图数值置为1(250), 否则,置为0(黑色)
I1(i,j)=250;
else I1(i,j)=0;
end
end
end
figure(2);
I1=uint8(I1); % 转换为无符号型整数 8表示8位二进制整数 范围0~255
imshow(I1);title('分割后的图像'); %显示分割后的图像
- 1
- 2
- 3
前往页