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

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

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    endend[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% endNew_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);endfor 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代码问题可私信交流。

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


相关文章
|
1天前
|
算法 调度
考虑需求响应的微网优化调度模型【粒子群算法】【matlab】
考虑需求响应的微网优化调度模型【粒子群算法】【matlab】
|
1天前
|
运维 算法
基于改进遗传算法的配电网故障定位(matlab代码)
基于改进遗传算法的配电网故障定位(matlab代码)
|
1天前
|
算法 调度
基于多目标粒子群算法冷热电联供综合能源系统运行优化(matlab代码)
基于多目标粒子群算法冷热电联供综合能源系统运行优化(matlab代码)
|
1天前
|
算法
【免费】基于ADMM算法的多微网电能交互分布式运行策略(matlab代码)
【免费】基于ADMM算法的多微网电能交互分布式运行策略(matlab代码)
|
1天前
|
机器学习/深度学习 算法 数据安全/隐私保护
基于有序抖动块截断编码的水印嵌入和提取算法matlab仿真
这是一个关于数字图像水印嵌入的算法介绍。使用MATLAB2022a,该算法基于DOTC,结合抖动和量化误差隐藏,确保水印的鲁棒性和隐蔽性。图像被分为N*N块,根据水印信号进行二值化处理,通过调整重建电平的奇偶性嵌入水印。水印提取是嵌入过程的逆操作,通过重建电平恢复隐藏的水印比特。提供的代码片段展示了从块处理、水印嵌入到噪声攻击模拟及水印提取的过程,还包括PSNR和NC的计算,用于评估水印在不同噪声水平下的性能。
|
1天前
|
算法
基于蜣螂优化算法DBO的VMD-KELM光伏发电功率预测(matlab代码+可提供讲解)
基于蜣螂优化算法DBO的VMD-KELM光伏发电功率预测(matlab代码+可提供讲解)
|
1天前
|
算法
基于白鲸优化算法BWO的VMD-KELM光伏发电功率预测(matlab代码+可提供讲解)
基于白鲸优化算法BWO的VMD-KELM光伏发电功率预测(matlab代码+可提供讲解)
|
1天前
|
算法 调度 决策智能
基于元模型优化算法的主从博弈多虚拟电厂动态定价和能量管理(matlab代码)
基于元模型优化算法的主从博弈多虚拟电厂动态定价和能量管理(matlab代码)
|
1天前
|
机器学习/深度学习 算法 数据挖掘
基于改进ISODATA算法的负荷场景曲线聚类(matlab代码)
基于改进ISODATA算法的负荷场景曲线聚类(matlab代码)
|
1天前
|
算法 Serverless 调度
基于分布式ADMM算法的考虑碳排放交易的电力系统优化调度研究(matlab代码)
基于分布式ADMM算法的考虑碳排放交易的电力系统优化调度研究(matlab代码)