图像分割基于局部空间信息模糊聚类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源码

图像分割基于空间信息的模糊均值聚类算法实现图像分割matlab源码

基于模糊聚类的图像分割

图像分割基于形态学重建和过滤改进FCM算法(FRFCM)的的图像分割