毕设示例2:测试distfcm函数

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



猜你喜欢

转载自blog.csdn.net/weixin_42072280/article/details/80264624