首页 > 行业资讯 > 【图像分割】基于FLICM算法实现图像分割含Matlab源码

【图像分割】基于FLICM算法实现图像分割含Matlab源码

时间:2022-06-07 来源: 浏览:

【图像分割】基于FLICM算法实现图像分割含Matlab源码

天天Matlab 天天Matlab
天天Matlab

TT_Matlab

博主简介:擅长智能优化算法、神经网络预测、信号处理、元胞自动机、图像处理、路径规划、无人机等多种领域的Matlab仿真,完整matlab代码或者程序定制加qq1575304183。

收录于合集 #图像处理matlab源码 638个

1 简介

聚类就是把具有相似性的事物区分开并加以分类。聚类分析是依据研究对象 ( 样品

或指标 ) 的特征,对其进行分类。其目标是:组内对象之间是相似的或是相关的,而不 同组中的对象不相同或者是不相关的,聚类过程中要求分类准确,分类的过程和结果是 可以重复的,但分类并不依赖于分析者的主观判断。 聚类分析作为多元统计分析的方法 之一,也是统计模式识别中的非监督模式识别的一个重要分支。

聚类可以看作是一种分类,用类标号从而创建对象的标记,多数情况下我们对于分

类识别的对象是未知的,因此聚类分析通常也被称为无监督分类。与此相反,用一个由 类标号已知的对象建立的模型,对新的、无标记的对象赋予一个类的标号称为有监督分 类。 在现实中由于事物的复杂性,聚类对象之问的界限往往不是特别清晰,比如对于脑 组织核磁共振图像这样的医学图像来说,由于不同脑组织 ( 如白质、灰质和脑脊液 ) 等混 杂在一起会导致图像更加不清晰。 因此使用基于多元统计分析的聚类方法分析脑组织核 磁共振图像将会受到极大的限制。 模糊集合的出现,让传统的聚类分析看到了曙光,从 而出现了基于模糊集理论的聚类方法——模糊聚类分析。 通过模糊聚类分析能够客观地 描述具有不明性的对象,使得实际的聚类结果更加准确合理。

目前,应用最广泛的是模糊 C 均值聚类算法,简称 FCM 算法。该方法通过对目标函

数的迭代优化获取对数据集的模糊分类,即将聚类归结为一个带有约束的非线性规划问 题,这种方法设计简单,可以转化为优化问题进行求解,在计算机上实现比较容易,另 外,模糊 C 均值聚类在图像分割中是一种无监督模糊聚类的标定过程,因此这种方法从 理论上看很适合医学图像的分割。

传统的  FCM  算法,对没有被噪声污染的图像有很好的分割效果,但对于被噪声污

染的图像,如图( 3-1 )所示,分割效果不太理想。这种对噪声敏感实质上是由于没有利 用被分割像素的空间位置信息,忽略了像素之间的邻域信息,因此对于信噪比低的图像, 分割效果很不理想。 在图像分割过程中,既能减少各种噪声的干扰,又能对原始图像信 息进行精确分类是基于标准  FCM  图像分割方法需要改进的一个方向。

2 部分代码

clear all; clc; % image = load(’im.txt’); image = imread(’017.jpg’); [row,col,channels] = size(image); if (channels > 1) image = rgb2gray(image); figure; subplot(131) imshow(image); title(’原图像’) else figure; subplot(131) 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; subplot(132) 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 % figure; % imshow(img,[]); subplot(133) imagesc(label2rgb(img,’jet’,’w’,’shuffle’)) axis image; axis off; set(gca,’position’,[0 0 1 1]); axis normal title(’FLFCM分割图’)

3 仿真结果

4 参考文献

[1]詹新玲. 基于FLICM模糊聚类和水平集算法的医学图像分割[D]. 河北大学.

博主简介:擅长智能优化算法、神经网络预测、信号处理、元胞自动机、图像处理、路径规划、无人机等多种领域的Matlab仿真,相关matlab代码问题可私信交流。

部分理论引用网络文献,若有侵权联系博主删除。

版权:如无特殊注明,文章转载自网络,侵权请联系cnmhg168#163.com删除!文件均为网友上传,仅供研究和学习使用,务必24小时内删除。
相关推荐