distfcm函数:计算欧式距离(matlab自带函数)
代码示例(1):
clc,clear all;
center = [0;5;10]
data = 0:9
data1 = data'
out = distfcm(center,data1)
结果(1):
center =
0
5
10
data =
0 1 2 3 4 5 6 7 8 9
data1 =
0
1
2
3
4
5
6
7
8
9
out =
0 1 2 3 4 5 6 7 8 9
5 4 3 2 1 0 1 2 3 4
10 9 8 7 6 5 4 3 2 1
>>
代码示例(2):
%测试distfcm函数:计算欧几里德距离
clc,clear all;
nClusters = 3;
data = 0 : 4
clc,clear all;
center = [0;5;10]
data = 0:9
out = distfcm(center,data')
U = inithcm(nClusters, length(data)) %见示例1b = imread('CT.tif'); %b是一个矩阵[m1,n1]=size(b) %显示矩阵b的信息[pxy,xb]=imhist(b
,5) %在0~255中
5个灰度级上的像素的个数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))) % 新聚类中心out = distfcm(center, data)
%(原代码)data = 0 : 255%(原代码)[pxy,xb]=imhist(b) %在0~255每一个灰度级上的像素的个数结果如下:
data =
0 1 2 3 4
U =
0.1044 0.3514 0.3763 0.4842 0.4313
0.6064 0 0.5968 0.0695 0.4947
0.2892 0.6486 0.0269 0.4463 0.0740
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.0109 0.1234 0.1416 0.2345 0.1860
0.3678 0 0.3561 0.0048 0.2447
0.0836 0.4207 0.0007 0.1992 0.0055
data =
0
1
2
3
4
center =
2.7005
0.7371
1.3374
out =
2.7005 1.7005 0.7005 0.2995 1.2995
0.7371 0.2629 1.2629 2.2629 3.2629
1.3374 0.3374 0.6626 1.6626 2.6626
>>
distfcm源代码(matlab自带)
function out = distfcm(center, data)
%distfcm 模糊c均值聚类中的距离度量。
%out = distfcm(center, data) 计算center中的每一行与data中的每一行之间的欧几里德距离,
%并返回一个大小为M*N的距离矩阵,其中M和N是center和data的行维数,
%out(I,J)分别为center(I,:)和data(J,:)之间的距离。
out = zeros(size(center, 1), size(data, 1));
% fill the output matrix
if size(center, 2) > 1,
for k = 1:size(center, 1),
out(k, :) = sqrt(sum(((data-ones(size(data, 1), 1)*center(k, :)).^2)'));
end
else % 1-D data
for k = 1:size(center, 1),
out(k, :) = abs(center(k)-data)';
end
end