精华内容
下载资源
问答
  • 基于聚类的图像分割
    千次阅读 热门讨论
    2021-10-24 13:32:51

    本科毕业设计,在此总结。

    1. 聚类概念

    如今,学术界并未对聚类作出一个具体定义。目前,认可度最高的观点是:聚类是一种无监督的分类手段。无标签的数据集可通过聚类分析中设定的相似性度量进行分类,形成多个类簇,满足实验的分析需要。因聚类本身是一种具有主观性且能获得良好效果的研究手段,无严格意义上的对错之分,只有“类内的相似和类它的排斥”这一基本准则。1974年,Everitt对聚类作出基础定义:基于任一相似度准则,同一类簇的样本数据具有相似特性,不同类簇的样本数据不相似。相似度准则由研究所需实验效果而定。类簇指数据集中相似样本点的汇聚。聚类要求同一类簇中的点相对密集,不同类簇间点的最小距离大于任意两个同一类簇点的距离。

    1.1 基于划分的聚类算法

    基于划分的聚类算法基本思想是将数据集中的样本点分成若干个子集(簇),且每个样本点只属于一个子集(簇),数学表达如下所示。划分聚类需预先给定聚类的数目或聚类中心,根据相似性度量的取值结果进行划分,使数据值靠近聚类中心。并设定聚类收敛准则,通过迭代计算更新聚类中心,对数据进一步划分,当目标函数收敛时即达到理想的聚类效果。

    在这里插入图片描述

    1.2 基于层次的聚类算法

    基于层次的聚类算法基本思想是将数据样本进行层次分解。该算法是一种树形结构算法,基本思想是通过计算所属不同类簇的数据间的相似性度量,构建一个嵌套型聚类树。按照树形结构不同,可分为凝聚型层次聚类(Agglomerative Hierarchical Clustering)和分裂型层次聚类(Divisive Hierarchical Clustering)两种类型。凝聚型层次聚类运算形式为自底向上,即每个数据对象都放在不同的类簇中,通过相似性度量计算逐渐融合相近的类簇,直至融合为一类或达到某个阈值而终止。与之相反,分裂型层次聚类是自顶向下,所有数据对象都置于同一类簇,每一次运算后将会把大类簇分为更小的类簇。通过不断迭代,直至将每个数据对象置于不同类或达到某个收敛条件而终止。数学形式如下所示:

    1.3 基于密度的聚类算法

    基于密度的聚类算法创新性地提出了数据集是低密度区域与高密度类簇的集合这一新的认识角度。基于密度的聚类算法的中心思想是:若数据样本间的密度高于某个阈值,则将继续进行分割。即每个类簇中必须包含一定密度的数据点。

    1.4基于网格的聚类算法

    基于网格的聚类算法将整个数据集划分为数目有限个独立单元,构成可以实现聚类的网络结构。所有的数据处理均在网络结构上实现。该算法的优点在于运算速度快,可结合多种聚类算法形成不同的类簇结果。

    2 基于K-Means算法的图像分割实验

    K-means算法归属于基于划分的聚类算法,由于具有易于实现和分割效果好等优点,故在各个领域具有广阔的应用前景。K-means算法的基本步骤为:

    (1)根据样本特征设定K个聚类中心。
    (2)计算各个聚类中心邻域内的像素与该中心的相似性度量,将像素划分给相似性度量取值最大所属的簇,再计算每个簇数据的均值。
    (3)将该均值作为新的聚类中心,不断迭代计算。当优化函数满足收敛条件(即聚类中心点不再更新),则停止计算,得到聚类结果。

    该算法将误差平方和作为判定聚类中心是否发生变化的评判准则。计算各个类簇内所含样本点距离中心的欧式距离的平方,也即计算每个类簇的误差。因初始设定类簇个数不同,划分的类簇也会有差异。若在两次初始参数设置不同的实验中,误差平方和越小,分割效果越好。若在同一次实验中,前后两次误差平方和在一个很小的范围内波动,则认为已收敛,结束运算。算法原理如下所示:
    在这里插入图片描述

    3. 实验结果

    在这里插入图片描述
    将每幅样本图像的聚类数从2取至9,逐一比较叶片图像的分割结果,实验结果如图上所示。

    22/4/9 填坑了
    *

    4 算法实现

    首先是主程序`

    *`clc
    close all
    I=imread('xx.bmp'); ##输入一个二维图像,对格式没有要求
    I=double(I)/255; #处理为二值
    L=GLCM(I); #提取图像中的灰度纹理
    subplot(2,3,1)
    imshow(I)
    title('原始图像')
    for i=2:6
        F=imkmeans(I,i);
        subplot(2,3,i);
        imshow(F,[]);
        title(['聚类个数=',num2str(i)])
    end 
    

    其次,着重看一下这个进行kmeans函数:

    function [F,C]=imkmeans(I,C) #两个输入量分别是图像矩阵和聚类个数
    if nargin~=2
        error('IMKMEANS:InputParamterNotRight','只能有两个输入参数!');
    end
    if isempty(C)
        K=2;
        C=[];
    elseif isscalar(C)
        K=C;
        C=[];
    else
        K=size(C,1);
    end
    X=exactvecotr(I); #提取特征向量
    if isempty(C)
        C=searchintial(X,'sample',K); #寻找初始点函数
    end
    Cprev=rand(size(C));
    while true
        D=sampledist(X,C,'euclidean'); #用欧氏距离判断样本点是否属于这个类簇
        [~,locs]=min(D,[],2);
        for i=1:K
            C(i,:)=mean(X(locs==i,:),1);
        end
        if norm(C(:)-Cprev(:))<eps
            break
        end
        Cprev=C;
    end
    [m,n,~]=size(I);
    F=reshape(locs,[m,n]);
    

    接着,提取特征向量:

    function vec=exactvecotr(img) #输入变量依旧是图像矩阵
    [m,n,~]=size(img);
    vec=zeros(m*n,3);
    img=rgb2lab(img); #图像颜色模型转换
    img=double(img);
    for j=1:n
        for i=1:m
            color=img(i,j,:);#这里聚类特征仅用了图像的颜色
            wx=1;wy=1;
            dist=[wx*j/n,wy*i/m];
    %         dist=[]; #可以自己添加距离和纹理这项特征
            texture=[];
    %         GLCM(img);
            vec((j-1)*m+i,:,:)=[color(:)];#堆叠在这就行
        end
    end
    

    对样本点之间进行欧氏距离计算,提取特征:

    function D=sampledist(X,C,method,varargin)
    [n,p]=size(X);
    K=size(C,1);
    D=zeros(n,K);
    switch lower(method(1))
        case 'e'
            for i=1:K
                D(:,i)=(X(:,1)-C(i,1)).^2;
                for j=2:p
                    D(:,i)=D(:,i)+(X(:,j) - C(i,j)).^2;
                end
            end
        case 'c'
            for i=1:K
                D(:,i)=abs(X(:,1) - C(i,1));
                for j=2:p
                    D(:,i)=D(:,i) + abs(X(:,j) - C(i,j));
                end
            end
    end
    

    然后,寻找初始点和聚类中心:(这块原理忘得有点多,后续补)

    function C=searchintial(X,method,varargin)
    switch lower(method(1))
        case 's' 
            K=varargin{1};
            C=X(randsample(size(X,1),K),:);
        case 'u' 
            Xmins=min(X,[],1);
            Xmaxs=max(X,[],1);
            K=varargin{1};
            C=unifrnd(Xmins(ones(K,1),:), Xmaxs(ones(K,1),:));
    end
    
    function [center]=searchcenter(X,kratio)
    [n,~]=size(X);
    isleft=true(n,1);
    count=zeros(n,1);
    center=[];
    kind=0;
    dist=0;
    for i=1:n
        for j=i+1:n
            dist=dist+weightdist(X(i,:),X(j,:));
        end
    end
    dist=dist/((n-1)*(n-1)/2);
    radius1=dist*kratio(1);
    radius2=dist*kratio(2);
    while any(isleft)
        for i=1:n
            count(i)=0;
            if isleft(i)       
                for j=1:n
                    if isleft(j)
                        dist=weightdist(X(i,:),X(j,:));
                        count(i)=count(i) + dist<=radius1;
                    end
                end
            end
        end
        [~,locs]=max(count);
        iscenter=true;
        for i=1:kind
            dist=weightdist(X(locs,:),center(i,:));
            iscenter=iscenter && dist>=radius2;
            if ~iscenter
                break;
            end
        end
        if iscenter
            kind=kind+1;
            center(end+1,:)=X(locs,:);
            for i=1:n
                if isleft(i)
                    dist=weightdist(X(i,:),X(locs,:));
                    if  dist <= radius1
                        isleft(i)=false;    
                    end
                end        
            end        
        else
            isleft(locs)=false;
        end
    end
    

    这样就可以进行基本的聚类了。
    有问题留言就行,一起进步。

    更多相关内容
  • 针对基于高斯混合模型的模糊聚类算法对噪声和异常值敏感的问题,利用包含邻域关系的先验概率与Student’s-T分布构建基于空间...通过对模拟图像和真实彩色图像分割结果的定性定量分析,验证了提出算法的有效性和可行性。
  • 具体介绍基于聚类的分割算法的思想和原理,并将包含的典型算法的优缺点进行介绍和分析。 经过比较后,归纳了在具体应用中如何对图像分割算法的抉择问题。近年来传统分割算法不断 被科研工作者优化和组合,相信会有更...
  • 基于稀疏矩阵的谱聚类图像分割算法.pdf
  • 一种基于密度峰值聚类图像分割算法.pdf
  • 1 K-Means聚类 K-Means聚类是最常用的聚类算法,最初起源于信号处理,其目标是将数据点划分为K个类簇,找到每个簇的中心并使其度量最小化。该算法的最大优点是简单、便于理解,运算速度较快,缺点是只能应用于连续型...
  • 提出了一种基于量子粒子群的改进模糊聚类图像分割算法。针对FCM图像分割算法对聚类中心初始值比较敏感的缺点,利用量子粒子群优化算法强大的全局搜索能力寻找最优解,能够有效降低图像分割算法对初始值的依赖程度;...
  • 图像分割:利用图像的灰度、颜色、纹理、形状等特征,把图像分成若干个互不重叠的区域,并使这些特征在同一区域内呈现相似性,在不同的区域之间存在明显的差异性。然后就可以将分割的图像中具有独特性质的区域提取...
  • 基于聚类图像分割-Python

    千次阅读 2021-11-12 01:16:14
    点击上方“小白学视觉”,选择加"星标"或“置顶”重磅干货,第一时间送达了解图像分割当我们在做一个图像分类任务时,首先我们会想从图像中捕获感兴趣的区域,然后再将其输入到模型中。让我们尝试一种...

    点击上方“小白学视觉”,选择加"星标"或“置顶

    重磅干货,第一时间送达

    cd8230f4b55743a5fa43a08cab00895c.png


    了解图像分割

    当我们在做一个图像分类任务时,首先我们会想从图像中捕获感兴趣的区域,然后再将其输入到模型中。让我们尝试一种称为基于聚类的图像分割技术,它会帮助我们在一定程度上提高模型性能,让我们看看它是什么以及一些进行聚类分割的示例代码。


    什么是图像分割?

    想象一下我们要过马路,过马路之前我们会做什么?

    首先,我们会看道路两旁,以确定接近的车辆等环境对象,然后我们会对接近的车辆的速度做出一些快速的估计,并决定何时以及如何过马路。所有这些都发生在很短的时间内,非常很的神奇。

    1. 我们的大脑捕捉道路两侧的图像

    2. 它检测道路上的车辆和其他物体==物体检测

    3. 它还确定了它检测到的每个对象的形状 == 图像分割

    通过确定不同物体的形状,我们的大脑能够在同一张快照中检测到多个物体,这是多么神奇啊。

    让我们进一步了解,假设我们有我们的图像分类模型,它能够以 95% 上的准确率对苹果和橙子进行分类。当我们输入一幅同时包含苹果和橙子的图像时,预测精度会下降。随着图像中对象数量的增加,分类模型的性能会下降,这就是目标定位发挥作用的地方。

    在我们检测图像中的对象并对其进行分类之前,模型需要了解图像中的内容,这就是图像分割的帮助所在。它为图像中的对象创建一个像素级的蒙版,这有助于模型更精细地理解对象的形状及其在图像中的位置。

    cb27b29c33f6c38626e1c514b5f90733.png

    目标检测 VS 图像分割 


    分割的类型有哪些?

    图像分割大致分为两大类。

    1. 语义分割

    2. 实例分割

    edbab95306771a0a09cd74e2665d9b94.png

    检测到的对象 — 语义段 — 实例段 

    在第一张图片中,我们可以看到检测到的对象都是男性。在语义分割中,我们认为所有这些像素都属于一类,因此我们用一种颜色表示它们。另一方面,在实例分割中,这些像素属于同一类,但我们用不同的颜色表示同一类的不同实例。

    根据我们使用的分割方法,分割可以分为许多类别。

    • 基于区域的分割

    • 基于边缘检测的分割

    • 基于聚类的分割

    • 基于CNN的分割等。

    接下来让我们看一个基于聚类的分割示例。


    什么是基聚类的分割?

    聚类算法用于将彼此更相似的数据点从其他组数据点更紧密地分组。

    现在我们想象一幅包含苹果和橙子的图像。苹果中的大部分像素点应该是红色/绿色,这与橙色的像素值不同。如果我们能把这些点聚在一起,我们就能正确地区分每个物体,这就是基于聚类的分割的工作原理。现在让我们看一些代码示例。

    from skimage.io import imread
    from skimage.color import rgb2gray
    import numpy as np
    import matplotlib.pyplot as plt
    %matplotlib inline
    from scipy import ndimage
    # Scaling the image pixels values within 0-1
    img = imread('./apple-orange.jpg') / 255
    plt.imshow(img)
    plt.title('Original')
    plt.show()

    a14389a6b60f58acc6882771d3fbefe8.png

    由于肉眼可见,图像中有五个色段

    1. 苹果的绿色部分

    2. 橙子的橙色部分

    3. 苹果和橙子底部的灰色阴影

    4. 苹果顶部和右侧部分的亮黄色部分

    5. 白色背景

    让我们看看我们是否可以使用来自 scikit-learn 的 K 均值算法对它们进行聚类

    # For clustering the image using k-means, we first need to convert it into a 2-dimensional array
    image_2D = img.reshape(img.shape[0]*img.shape[1], img.shape[2])
    # Use KMeans clustering algorithm from sklearn.cluster to cluster pixels in image
    from sklearn.cluster import KMeans
    # tweak the cluster size and see what happens to the Output
    kmeans = KMeans(n_clusters=5, random_state=0).fit(image_2D)
    clustered = kmeans.cluster_centers_[kmeans.labels_]
    # Reshape back the image from 2D to 3D image
    clustered_3D = clustered.reshape(img.shape[0], img.shape[1], img.shape[2])
    plt.imshow(clustered_3D)
    plt.title('Clustered Image')
    plt.show()

    de68dc383f35e3bb8677a9e627f41189.png

    效果非常好,我们能够将五个部分组合在一起,这就是聚类分割的工作原理。目前有许多先进的技术,例如 Mask R-CNN,可以进行更细粒度的分割。

    Github代码连接:

    https://github.com/Mathanraj-Sharma/sample-for-medium-article/blob/master/cluster-based-segmentation-skimage/cluster-based-segmentation.ipynb

    下载1:OpenCV-Contrib扩展模块中文版教程

    在「小白学视觉」公众号后台回复:扩展模块中文教程即可下载全网第一份OpenCV扩展模块教程中文版,涵盖扩展模块安装、SFM算法、立体视觉、目标跟踪、生物视觉、超分辨率处理等二十多章内容。

    下载2:Python视觉实战项目52讲

    在「小白学视觉」公众号后台回复:Python视觉实战项目即可下载包括图像分割、口罩检测、车道线检测、车辆计数、添加眼线、车牌识别、字符识别、情绪检测、文本内容提取、面部识别等31个视觉实战项目,助力快速学校计算机视觉。

    下载3:OpenCV实战项目20讲

    在「小白学视觉」公众号后台回复:OpenCV实战项目20讲即可下载含有20个基于OpenCV实现20个实战项目,实现OpenCV学习进阶。

    交流群

    欢迎加入公众号读者群一起和同行交流,目前有SLAM、三维视觉、传感器、自动驾驶、计算摄影、检测、分割、识别、医学影像、GAN、算法竞赛等微信群(以后会逐渐细分),请扫描下面微信号加群,备注:”昵称+学校/公司+研究方向“,例如:”张三 + 上海交大 + 视觉SLAM“。请按照格式备注,否则不予通过。添加成功后会根据研究方向邀请进入相关微信群。请勿在群内发送广告,否则会请出群,谢谢理解~

    70c9c036becbe08fa15765ed59ce60b2.png

    a4e283b94bab0e62fb7abb51a87390ec.png

    展开全文
  • 基于纹理聚类的JSEG图像分割
  • 基于聚类算法的图像分割技术综述,马义德,,图像分割是指将一幅图像分解成若干互不相交区域的集合,其实质是一个像素的聚类过程。本文以图像分割的聚类实质为线索,对近几年
  • 基于Delaunay算法的图像分割及像素聚类模型,可自适应估计聚类数,是一种有效的图像分割算法。
  • 融合对称特性的混合标签传递半监督直觉模糊聚类图像分割.pdf
  • 图像分割基于聚类算法实现图像分割matlab源码.md
  • 基于K-means聚类算法的图像区域分割的MATLAB代码实现,详情可以参考:https://blog.csdn.net/didi_ya/article/details/115376184
  • 基于粒子群的改进模糊聚类图像分割算法.pdf
  • 作者 | 小白来源 |小白学视觉了解图像分割当我们在做一个图像分类任务时,首先我们会想从图像中捕获感兴趣的区域,然后再将其输入到模型中。让我们尝试一种称为基于聚类图像分割技术,它会帮助...

    55559aeb5f88b702d1b3fd97b3413b7e.gif

    作者 | 小白

    来源 | 小白学视觉


    了解图像分割

    当我们在做一个图像分类任务时,首先我们会想从图像中捕获感兴趣的区域,然后再将其输入到模型中。让我们尝试一种称为基于聚类的图像分割技术,它会帮助我们在一定程度上提高模型性能,让我们看看它是什么以及一些进行聚类分割的示例代码。


    什么是图像分割?

    想象一下我们要过马路,过马路之前我们会做什么?

    首先,我们会看道路两旁,以确定接近的车辆等环境对象,然后我们会对接近的车辆的速度做出一些快速的估计,并决定何时以及如何过马路。所有这些都发生在很短的时间内,非常很的神奇。

    1. 我们的大脑捕捉道路两侧的图像

    2. 它检测道路上的车辆和其他物体==物体检测

    3. 它还确定了它检测到的每个对象的形状 == 图像分割

    通过确定不同物体的形状,我们的大脑能够在同一张快照中检测到多个物体,这是多么神奇啊。

    让我们进一步了解,假设我们有我们的图像分类模型,它能够以 95% 上的准确率对苹果和橙子进行分类。当我们输入一幅同时包含苹果和橙子的图像时,预测精度会下降。随着图像中对象数量的增加,分类模型的性能会下降,这就是目标定位发挥作用的地方。

    在我们检测图像中的对象并对其进行分类之前,模型需要了解图像中的内容,这就是图像分割的帮助所在。它为图像中的对象创建一个像素级的蒙版,这有助于模型更精细地理解对象的形状及其在图像中的位置。

    6536a4d71e76f03c65daff15f62689a7.png

    目标检测 VS 图像分割 


    分割的类型有哪些?

    图像分割大致分为两大类。

    1. 语义分割

    2. 实例分割

    efb5cd6599b49e7341d2cada4cf977db.png

    检测到的对象 — 语义段 — 实例段 

    在第一张图片中,我们可以看到检测到的对象都是男性。在语义分割中,我们认为所有这些像素都属于一类,因此我们用一种颜色表示它们。另一方面,在实例分割中,这些像素属于同一类,但我们用不同的颜色表示同一类的不同实例。

    根据我们使用的分割方法,分割可以分为许多类别。

    • 基于区域的分割

    • 基于边缘检测的分割

    • 基于聚类的分割

    • 基于CNN的分割等。

    接下来让我们看一个基于聚类的分割示例。


    什么是基聚类的分割?

    聚类算法用于将彼此更相似的数据点从其他组数据点更紧密地分组。

    现在我们想象一幅包含苹果和橙子的图像。苹果中的大部分像素点应该是红色/绿色,这与橙色的像素值不同。如果我们能把这些点聚在一起,我们就能正确地区分每个物体,这就是基于聚类的分割的工作原理。现在让我们看一些代码示例。

    from skimage.io import imread
    from skimage.color import rgb2gray
    import numpy as np
    import matplotlib.pyplot as plt
    %matplotlib inline
    from scipy import ndimage
    # Scaling the image pixels values within 0-1
    img = imread('./apple-orange.jpg') / 255
    plt.imshow(img)
    plt.title('Original')
    plt.show()

    33187bc4ede35cb2cfb1e2604c88f2e1.png

    由于肉眼可见,图像中有五个色段

    1. 苹果的绿色部分

    2. 橙子的橙色部分

    3. 苹果和橙子底部的灰色阴影

    4. 苹果顶部和右侧部分的亮黄色部分

    5. 白色背景

    让我们看看我们是否可以使用来自 scikit-learn 的 K 均值算法对它们进行聚类

    # For clustering the image using k-means, we first need to convert it into a 2-dimensional array
    image_2D = img.reshape(img.shape[0]*img.shape[1], img.shape[2])
    # Use KMeans clustering algorithm from sklearn.cluster to cluster pixels in image
    from sklearn.cluster import KMeans
    # tweak the cluster size and see what happens to the Output
    kmeans = KMeans(n_clusters=5, random_state=0).fit(image_2D)
    clustered = kmeans.cluster_centers_[kmeans.labels_]
    # Reshape back the image from 2D to 3D image
    clustered_3D = clustered.reshape(img.shape[0], img.shape[1], img.shape[2])
    plt.imshow(clustered_3D)
    plt.title('Clustered Image')
    plt.show()

    5f25f7614c52499c443687617d1441b7.png

    效果非常好,我们能够将五个部分组合在一起,这就是聚类分割的工作原理。目前有许多先进的技术,例如 Mask R-CNN,可以进行更细粒度的分割。

    Github代码连接:

    https://github.com/Mathanraj-Sharma/sample-for-medium-article/blob/master/cluster-based-segmentation-skimage/cluster-based-segmentation.ipynb

    46ab2f7aa64e2c2262d654788b6561e2.gif

    bb0b60167c7d32d9dd3e35ab2c56d113.png

    资讯

    2021 PS 进入人工智能P图时代

    资讯

    跟人聊天 VS 跟机器聊天?

    比赛

    人人可用的AI大模型,玩转它

    图像

    深度学习视频理解之图像分类

    2b768815e96c4f7edfd07a082ece9bb7.png

    分享

    4bb84d7e8ec376d783adcd9777f89e31.png

    点收藏

    445fcd6cd01aaa3f8f3c8db156ea7e19.png

    点点赞

    a69489cf60de58d24e6d9c5134efd7dc.png

    点在看

    展开全文
  • 图像分割基于蚁群优化模糊聚类图像分割matlab源码.md
  • 基于聚类图像分割方法综述.pdf
  • normalized cuts and image segementation这篇论文的作者写的程序,需要和.dll进行联合仿真,最好用2009a以下的版本进行仿真。
  • k-均值聚类算法实现灰度图像分割,输入图像矩阵和聚类中心个数,返回为最终的聚类中心
  • 基于聚类图像分割——Python实现

    千次阅读 2022-04-26 14:47:34
    文章目录0 图像读取1 算法实现1.1 K-Means1.2 FCM聚类1.3 漂移均值1.4 谱聚类1.5 Affinity Propagation聚类1.6 Birch聚类1.7 DBSCAN聚类1.8 高斯混合模型1.9 OPTICS聚类1.10 Agglomerative聚类2 作者注 0 图像读取 ...

    0 图像读取

    import numpy as np
    from PIL import Image as image
    def loadData(filePath):
        f = open(filePath,'rb') 
        data= []
        img =image.open(f) 
        m,n =img.size    
        for i in range(m):
            for j in range(n):
                x,y,z =img.getpixel((i,j))
                data.append([x/256.0,y/256.0,z/256.0])
        f.close()
        return np.mat(data),m,n
    imgData,row,col =loadData('apple.jpg')
    

    apple.jpg:
    图1

    图 1 原始图像

    1 算法实现

    1.1 K-Means

    from sklearn.cluster import  KMeans
    km=KMeans(n_clusters=3)
    label =km.fit_predict(imgData)
    label=label.reshape([row,col])
    pic_new = image.new("L",(row,col))
    for i in range(row):
    for j in range(col):
       pic_new.putpixel((i,j),int(256/(label[i][j]+1)))
    pic_new.save("KM_Apple.jpg","JPEG")
    

    调整参数 K,(为km=KMeans(n_clusters=3)中参数n_clusters)得到如下结果:


    K=2

    K=3

    K=6
    图 2 K-Means算法聚类后的图像

    1.2 FCM聚类

    from skfuzzy.cluster import cmeans
    imgData = imgData.T
    center, u, u0, d, jm, p, fpc = cmeans(imgData, m=2, c=6, error=0.0001, maxiter=1000)
    for i in u:
        label = np.argmax(u, axis=0) 
    label = label.reshape([row, col]) 
    print(label)
    pic_new = image.new('L', (row, col))
    for i in range(row):
        for j in range(col):
            pic_new.putpixel((i, j), int(256 / (label[i][j] + 1)))
    pic_new.save('FCM_apple.jpg','JPEG')
    

    调整参数 C C C,(为center, u, u0, d, jm, p, fpc = cmeans(imgData, m=2, c=6, error=0.0001, maxiter=1000)中参数c)得到如下结果:


    C=3

    C=6

    C=9
    图 3 FCM算法聚类后的图像

    1.3 漂移均值

    import sklearn.cluster as sc
    bw = sc.estimate_bandwidth(imgData, n_samples=500, quantile=0.2)
    model = sc.MeanShift(bandwidth=bw, bin_seeding=True)
    label = model.fit_predict(imgData)  
    label = label.reshape([row, col])
    pic_new = image.new('L', (row, col))
    for i in range(row):
        for j in range(col):
            pic_new.putpixel((i, j), int(256 / (label[i][j] + 1)))
    pic_new.save('MS_Apple.jpg','JPEG')
    

    bw=0.01

    bw=0.17

    bw=0.5
    图 4 均值漂移算法聚类后的图像

    1.4 谱聚类

    from sklearn.cluster import SpectralClustering
    label = SpectralClustering(n_clusters=3).fit_predict(imgData)
    label=label.reshape([row,col])
    pic_new = image.new("L",(row,col))
    for i in range(row):
        for j in range(col):
            pic_new.putpixel((i,j),int(256/(label[i][j]+1)))
    pic_new.save("SP_apple.jpg","JPEG")
    

    在这里插入图片描述

    图 5 谱聚类算法聚类后的图像

    1.5 Affinity Propagation聚类

    from sklearn.cluster import AffinityPropagation
    label = AffinityPropagation(damping=0.9, max_iter=20, convergence_iter=15, copy=True, preference=None, affinity='euclidean', verbose=False).fit_predict(imgData)
    for i in range(row):
        for j in range(col):
            pic_new.putpixel((i,j),int(256/(label[i][j]+1)))
    pic_new.save("AP_apple.jpg","JPEG")
    

    max_iter=20

    max_iter=50

    max_iter=100
    图 6 Affinity Propagation聚类算法聚类后的图像

    1.6 Birch聚类

    from sklearn.cluster import Birch
    label = Birch(n_clusters = 2).fit_predict(imgData)
    label=label.reshape([row,col])
    pic_new = image.new("L",(row,col))
    for i in range(row):
        for j in range(col):
            pic_new.putpixel((i,j),int(256/(label[i][j]+1)))
    pic_new.save("Birch_apple.jpg","JPEG")
    

    在这里插入图片描述

    图7 Birch聚类算法聚类后的图像

    1.7 DBSCAN聚类

    from sklearn.cluster import DBSCAN
    label = DBSCAN(eps=0.005,min_samples=1).fit_predict(imgData)
    label=label.reshape([row,col])
    pic_new = image.new("L",(row,col))
    for i in range(row):
        for j in range(col):
            pic_new.putpixel((i,j),int(256/(label[i][j]+1)))
    pic_new.save("DBSCAN_apple.jpg","JPEG")
    

    eps=0.005

    eps=0.07

    eps=0.072
    图 8 DBSCAN聚类算法聚类后的图像

    1.8 高斯混合模型

    from sklearn import mixture
    label=mixture.GaussianMixture(n_components=4,covariance_type='full')
    .fit_predict(imgData)
    label=label.reshape([row,col])
    pic_new = image.new("L",(row,col))
    for i in range(row):
        for j in range(col):
            pic_new.putpixel((i,j),int(256/(label[i][j]+1)))
    pic_new.save("GMM_apple.jpg","JPEG")
    
    

    ncomponents=2

    ncomponents=3

    ncomponents=5
    图 9 高斯混合模型聚类算法聚类后的图像

    1.9 OPTICS聚类

    from sklearn.cluster import OPTICS
    label = OPTICS(min_samples=0.1, xi=0.005, min_cluster_size=0.05).fit_predict(imgData)
    label=label.reshape([row,col])
    pic_new = image.new("L",(row,col))
    for i in range(row):
        for j in range(col):
            pic_new.putpixel((i,j),int(256/(label[i][j]+1)))
    pic_new.save("OPTICS.jpg","JPEG")
    
    

    在这里插入图片描述

    图 10 OPTICS聚类算法聚类后的图像

    1.10 Agglomerative聚类

    from sklearn.cluster import AgglomerativeClustering
    label = AgglomerativeClustering(n_clusters=3).fit_predict(imgData)
    label=label.reshape([row,col])
    print(label)
    pic_new = image.new("L",(row,col))
    for i in range(row):
        for j in range(col):
            pic_new.putpixel((i,j),int(256/(label[i][j]+1)))
    pic_new.save("AC_apple.jpg","JPEG")
    
    

    在这里插入图片描述

    图 11 Agglomerative聚类算法聚类后的图像

    2 作者注

    博主: 于2020年毕业于安庆师范大学数学与计算科学学院信息与计算科学专业,QQ(1755826272)
    说明: 本博客系毕业论文原文代码,距毕业近两年之久,今得兴致,整而发之!秉着开源精神将此代码进行公开,供大家学习使用。 转载请联系本人!!!
    关于毕业论文::毕业论文的撰写过程涉及查阅文献资料、展开实验、撰写论文、查重一系列操作,其中滋味唯有经历者可意会。作者在实验过程中花去两月余时间,疫情在家,白天睡觉,晚上点灯调试代码,其中百般滋味。借撰写毕业论文之机会作者代码能力有所提升,查阅资料能力也随之提升。
    关于博客内容: 博客写作仅供分享学习之用,如有理论方面困惑请移步他处自行查找,稍后博主可能补充,也可能不会补充,随性而为。如遇理论方面之困顿可联系博主讨论,欢迎来扰!

    展开全文
  • 了解图像分割当我们在做一个图像分类任务时,首先我们会想从图像中捕获感兴趣的区域,然后再将其输入到模型中。让我们尝试一种称为基于聚类图像分割技术,它会帮助我们在一定程度上提高模型性能,让我...
  • 基于Kmeans聚类图像分割算法,适合初学者学习。分较少
  • 完整代码,可直接运行
  • 为此,提出一种基于最大熵的模糊核聚类图像分割方法。采用最大熵算法对原始图像进行初步分割,求得初始聚类中心;引入Mercer 核函数,把输入空间的样本映射到高维特征空间,并在特征空间中进行图像分割。实验结果...
  • 智能优化算法、神经网络预测、信号处理、元胞自动机、图像处理、路径规划、无人机等多种领域的Matlab仿真代码
  • 针对传统的模糊C均值聚类算法(FCM)在图像分割中对噪声十分敏感这一局限性,提出一种自适应的FCM图像分割方法。该方法充分考虑图像像素的灰度信息和空间信息,根据像素的空间位置自适应地计算一个合适的相似度距离...
  • 基于IRAM和半监督的谱聚类图像分割.pdf
  • 为了改进模糊C均值聚类(FCM)算法对初始聚类中心敏感、抗噪性能较差、运算量大的问题,提出一种新的基于蚁群和自适应滤波的模糊聚类图像分割方法(ACOAFCM)。首先,该方法利用改进的蚁群算法确定初始聚类中心,作为FCM...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 15,558
精华内容 6,223
关键字:

基于聚类的图像分割