图像分割基于局部空间信息模糊聚类FLICM算法图像分割matlab源码
Posted Matlab走起
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了图像分割基于局部空间信息模糊聚类FLICM算法图像分割matlab源码相关的知识,希望对你有一定的参考价值。
一、简介
FLICM 算法,是一种基于局部空间信息模糊聚类的鲁棒图像分割算法。
1 FLICM算法步骤
二、源代码
clear all;
clc;
image = load('im.txt');
%image = imread('017.jpg');
[row,col,channels] = size(image);
if (channels > 1)
image = rgb2gray(image);
figure;
imshow(image);
title('原图像')
else
figure;
imshow(image);
title('原图像')
end
%对输入图像进行高斯滤波
originimg=image;
originimg=mat2gray(originimg);
[ori_row,ori_col]=size(originimg);
sigma = 1.6; %sigma赋值
N = 7; %大小是(2N+1)×(2N+1)
N_row = 2*N+1;
OriImage_noise = imnoise(originimg,'gaussian'); %加噪
gausFilter = fspecial('gaussian',[N_row N_row],sigma); %matlab 自带高斯模板滤波
img=imfilter(OriImage_noise,gausFilter,'conv');
%figure;
%imshow(img);
%title('高斯滤波后')
key_mat = []; % 定义一个空的关键像素矩阵
non_key_mat = []; %非关键像素矩阵
for i = 2:3:row
for j = 2:3:col
if row-i<1|col-j<1
continue;
end
window_image = img(i-1:i+1,j-1:j+1);
[r,c] = size(window_image);
max_value = max(max(window_image)); % 窗口最大值
[x,y] = find(window_image==max_value);
key_mat = [key_mat;[i-2+x(1),j-2+y(1),max_value]];
img(i-2+x(1),j-2+y(1))=-1;
% for m = 1:r
% for n = 1:c
% non_key_mat = [non_key_mat;i-2+m,j-2+n,window_image(m,n)];
% end
% end
end
end
[r,c]=find(img ~=-1);
value = (img(find(img ~=-1)));
non_key_mat = [r c value];
% for m = 1:row
% for n = 1:col
% tmp = [m,n,img(m,n)];
% if ismember(tmp,key_mat,'rows') == 1
% continue;
% end
% non_key_mat = [non_key_mat;tmp];
% end
% end
New_img = key_mat(:,3);
New_coord = key_mat(:,1:2);
cNum = 2;
m = 2;
winSize = 5;
maxIter = 59;
thrE = 0.00001;
% FLICM
[imOut,iter] = FLICM_clustering( New_img, cNum, m, winSize, maxIter, thrE );
imOut = double(imOut);
key_mat = [key_mat imOut];
figure;
gscatter(key_mat(:,1),key_mat(:,2),imOut);
size(non_key_mat);
size(key_mat);
key_mat;
%key_mat = sortrows(key_mat,[1 2])
%img(find(img==-1));
% [xx,yy] = find(img ==-1);
% key = sortrows([yy xx],1)
% img(find(img==-1)) = key_mat(:,4)
for i = 1:size(non_key_mat,1)
z = ones(1,size(key_mat,1))*non_key_mat(i,1);
z=z';
zc = ones(1,size(key_mat,1))*non_key_mat(i,2);
zc=zc';
size(key_mat(:,1));
dis = (z-key_mat(:,1)).* (z-key_mat(:,1))+(zc-key_mat(:,2)).*(zc-key_mat(:,2));
dis = sqrt(dis);
[labelx,labely] = min(dis);
dis = sort(dis);
xx = key_mat(labely,:);
img(non_key_mat(i,1),non_key_mat(i,2)) = xx(4);
end
for j = 1:size(key_mat,1)
img(key_mat(j,1),key_mat(j,2)) = key_mat(j,4);
end
三、运行结果
四、备注
完整代码或者仿真咨询添加QQ1575304183
以上是关于图像分割基于局部空间信息模糊聚类FLICM算法图像分割matlab源码的主要内容,如果未能解决你的问题,请参考以下文章
matlab基于局部信息的模糊C均值聚类算法(FLICM)实现图像分割
matlab基于局部信息的模糊C均值聚类算法(FLICM)实现图像分割
图像分割基于空间信息的模糊均值聚类算法实现图像分割matlab源码