matlab基于局部信息的模糊C均值聚类算法(FLICM)实现图像分割
Posted MatlabQQ1575304183
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了matlab基于局部信息的模糊C均值聚类算法(FLICM)实现图像分割相关的知识,希望对你有一定的参考价值。
一、优化函数
FCM算法的数学模型其实是一个条件极值问题:
把上面的条件极值问题转化为无条件的极值问题,这个在数学分析上经常用到的一种方法就是拉格朗日乘数法把条件极值转化为无条件极值问题,
需要引入n个拉格朗日因子,如下所示:
然后对各个变量进行求导,从而得到各个变量的极值点。
二、对聚类质心Ck进行求导
其中,
所以,
其中,所选取的距离dij对质心求解不影响。
三、对隶属度函数Uij进行求导
拉格朗日函数分为两部分,我们需要分别对其进行求导,先算简单的,对后一部分进行求导:
1)后半部分
2)前半部分
对前一部分进行求导就比较复杂和困难了:
3)把两部分放到一起
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分割结果');
完整代码或者仿真咨询添加QQ1575304183
以上是关于matlab基于局部信息的模糊C均值聚类算法(FLICM)实现图像分割的主要内容,如果未能解决你的问题,请参考以下文章
图像分割基于局部信息的模糊C均值聚类算法(FLICM)实现图像分割matlab源码
图像分割基于空间信息的模糊均值聚类算法实现图像分割matlab源码
图像分割基于局部空间信息模糊聚类FLICM算法图像分割matlab源码
图像分割基于空间信息的模糊均值聚类算法实现图像分割matlab源码