测试mystepfcm函数:迭代过程中的每一次迭代
示例代码如下:
% 测试mystepfcm函数:
% function [U_new, center, obj_fcn] = mystepfcm(data, U, cluster_n, expo,hg)
% 迭代过程中的每一步迭代。
% 输入:data是要被聚类的矩阵,这里是灰度级矩阵。 U是划分矩阵。
% cluster_n是要聚类的类别数。 expo是矩阵的指数。
% hg是每一个灰度级的像素个数占总像素个数的百分比。
% 输出: U_NEW是新的划分矩阵。center是聚类中心。obj_fcn是目标函数。
clc,clear all;
cluster_n = 3;
data = 0 : 4
U = inithcm(cluster_n, length(data))
b = imread('CT.tif');
[m1,n1]=size(b) %显示矩阵b的信息
[pxy,xb]=imhist(b,5 ) %在0~255每一个灰度级上的像素的个数
hg=pxy/m1/n1 %每个灰度级的像素个数/宽度/高度=每个灰度级上的像素占总像素的百分比
b=double(b);
expo = 2;
mf = U.^expo % 给矩阵U指数化(每个元素都平方)
data = data'
center = mf*(data.*hg)./(((ones(size(data, 2), 1))*(mf*hg))) % 新聚类中心
dist = distfcm(center, data)
obj_fcn = sum(sum((dist.^2).*mf)) % 目标函数
tmp = dist.^(-2/(expo-1)) % calculate new U, suppose expo != 1
aaa = ones(cluster_n, 1)*sum(tmp) %为了观察结果自己引入
U_new = tmp./(ones(cluster_n, 1)*sum(tmp)) %新的划分矩阵 对tpm进行归一化
%(原代码)data = 0 : 255
%(原代码)[pxy,xb]=imhist(b)
输出结果如下:
data =
0 1 2 3 4
U =
0.3092 0.4072 0.4541 0.0748 0.2945
0.2818 0.4344 0.4383 0.3167 0.5103
0.4090 0.1584 0.1076 0.6085 0.1952
m1 =
512
n1 =
512
pxy =
142161
5345
40985
49151
24502
xb =
0
63.7500
127.5000
191.2500
255.0000
hg =
0.5423
0.0204
0.1563
0.1875
0.0935
mf =
0.0956 0.1658 0.2062 0.0056 0.0867
0.0794 0.1887 0.1921 0.1003 0.2604
0.1673 0.0251 0.0116 0.3702 0.0381
data =
0
1
2
3
4
center =
1.0704
1.8127
1.3652
dist =
1.0704 0.0704 0.9296 1.9296 2.9296
1.8127 0.8127 0.1873 1.1873 2.1873
1.3652 0.3652 0.6348 1.6348 2.6348
obj_fcn =
4.4071
tmp =
0.8728 201.8642 1.1572 0.2686 0.1165
0.3043 1.5141 28.5048 0.7094 0.2090
0.5365 7.4976 2.4816 0.3742 0.1440
aaa =
1.7137 210.8758 32.1436 1.3521 0.4696
1.7137 210.8758 32.1436 1.3521 0.4696
1.7137 210.8758 32.1436 1.3521 0.4696
U_new =
0.5093 0.9573 0.0360 0.1986 0.2481
0.1776 0.0072 0.8868 0.5246 0.4451
0.3131 0.0356 0.0772 0.2767 0.3068
其中,0.8728 / 1.7137 = 0.5093