一、优化函数

FCM算法的数学模型其实是一个条件极值问题:

matlab基于局部信息的模糊C均值聚类算法(FLICM)实现图像分割_matlab

把上面的条件极值问题转化为无条件的极值问题,这个在数学分析上经常用到的一种方法就是拉格朗日乘数法把条件极值转化为无条件极值问题,

需要引入n个拉格朗日因子,如下所示:

 matlab基于局部信息的模糊C均值聚类算法(FLICM)实现图像分割_matlab_02

然后对各个变量进行求导,从而得到各个变量的极值点。

二、对聚类质心Ck进行求导

matlab基于局部信息的模糊C均值聚类算法(FLICM)实现图像分割_图像处理_03

其中,

matlab基于局部信息的模糊C均值聚类算法(FLICM)实现图像分割_图像处理_04

所以,

matlab基于局部信息的模糊C均值聚类算法(FLICM)实现图像分割_图像处理_05

matlab基于局部信息的模糊C均值聚类算法(FLICM)实现图像分割_matlab_06

matlab基于局部信息的模糊C均值聚类算法(FLICM)实现图像分割_图像处理_07

其中,所选取的距离dij对质心求解不影响。

 matlab基于局部信息的模糊C均值聚类算法(FLICM)实现图像分割_图像处理_08

拉格朗日函数分为两部分,我们需要分别对其进行求导,先算简单的,对后一部分进行求导:

1)后半部分

matlab基于局部信息的模糊C均值聚类算法(FLICM)实现图像分割_图像处理_09

2)前半部分

对前一部分进行求导就比较复杂和困难了:

 matlab基于局部信息的模糊C均值聚类算法(FLICM)实现图像分割_图像处理_10

 3)把两部分放到一起

 matlab基于局部信息的模糊C均值聚类算法(FLICM)实现图像分割_图像处理_11

matlab基于局部信息的模糊C均值聚类算法(FLICM)实现图像分割_matlab_12

matlab基于局部信息的模糊C均值聚类算法(FLICM)实现图像分割_图像处理_13

matlab基于局部信息的模糊C均值聚类算法(FLICM)实现图像分割_matlab_14

clear;
clc;

data=randn(310,2);
[center,U,obj_fcn] = fcm(data,2);
plot(data(:,1), data(:,2),'o');
hold on;
maxU = max(U);
% Find the data points with highest grade of membership in cluster 1
index1 = find(U(1,:) == maxU);
% Find the data points with highest grade of membership in cluster 2
index2 = find(U(2,:) == maxU);
%line(data(index1,1),data(index1,2),'marker','*','color','g');
%line(data(index2,1),data(index2,2),'marker','*','color','r');
% Plot the cluster centers
plot([center([1 2],1)],[center([1 2],2)],'*','color','k');
hold off;


% I = imread('lena.jpg');
%I = imread('eight.tif');
%  I = imread('romantic.jpg');
I = imread('bacteria.jpg');
I=rgb2gray(I);
figure,imshow(I,[]);
title('原图');
g=imnoise(I,'salt & pepper',0.02); % 给图像添加高斯噪声
figure,imshow(g,[]);
title('添加高斯噪声后的图像');
g = double(g);
[m,n] = size(g);
k=2;
% ---------fcm----------------
fcm_label=zeros(m*n,1);
[O,U,obj_fcn1] =fcm(g(:), k);
maxU = max(U);
for j=1:k
    index = find(U(j, :) == maxU);
    fcm_label(index) = j;     
end
fcm_result=reshape(fcm_label,[m n]);
figure, imshow(fcm_result,[]);
title('fcm分割结果');
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.

matlab基于局部信息的模糊C均值聚类算法(FLICM)实现图像分割_图像处理_15matlab基于局部信息的模糊C均值聚类算法(FLICM)实现图像分割_matlab_16

matlab基于局部信息的模糊C均值聚类算法(FLICM)实现图像分割_图像处理_17matlab基于局部信息的模糊C均值聚类算法(FLICM)实现图像分割_matlab_18