精华内容
下载资源
问答
  • 2020-07-24 20:07:38

    KMeans图像分割算法是一种典型的分割算法。其主要思想就是首先随机(起始值其实很重要)选取K个特征值作为聚类中心,然后对于每个像素点计算其到各聚类中心的距离,将其划归到距离最近的类中(也可以进行软分类,即给出其属于各类的概率),然后计算各类中元素的(加权)均值作为新的聚类中心。重复上述操作直到收敛或者达到设定迭代次数。下面给出本人编写的一个matlab示例程序及处理结果。

    代码:

    function [sg,normMuDiff]=KMeansSeg(img,k,Mu,eps)
    normMuDiff=[];
    m=size(img,1);
    n=size(img,2);
    img=double(img);
    M=reshape(img,m*n,size(img,3));
    % index=randperm(m*n);
    % Mu=M(index(1:k),:);
    flag=1;
    Cov=repmat(eye(size(img,3)),1,1,k); %k个聚类的协方差
    Label=zeros(m*n,1);
    
    iter=1;
    figure;
    while flag
        old_Mu=Mu;
        Num=zeros(1,k);
        ClassedPixs=zeros(m*n,size(img,3),k); %分到k个类中的像素值
        w=zeros(m*n,k); %各像素点对于聚类的权重矩阵
        C=zeros(size(img,3),size(img,3),k);
        for j=1:k
            invCov=inv(Cov(:,:,j));
            C(:,:,j)=invCov/norm(invCov);%使用Mahalanobis距离(即马氏距离)度量
        end
        for i=1:m*n
            dis=zeros(k,1);
            for j=1:k
                dis(j)=(M(i,:)-Mu(j,:))*C(:,:,j)*(M(i,:)-Mu(j,:))'; 
            end
            maxIdx=find(dis==min(dis));
            label=maxIdx(1);
            Label(i)=label;
            Num(label)=Num(label)+1;
            ClassedPixs(Num(label),:,label)=M(i,:);
            w(Num(label),label)=1/(sqrt(min(dis))+1); %避免被0除的情况
        end
        w=w./repmat(sum(w),m*n,1); %权重归一化
        % 更新协方差Cov
        for j=1:k
            PixsThisClass=ClassedPixs(1:Num(j),:,j);
            if Num(j)~=0      
                Cov(:,:,j)=cov(PixsThisClass)+0.01*rand(size(img,3)); %加随机量以防止矩阵奇异
                Mu(j,:)=sum(repmat(w(1:Num(j),j),1,size(img,3)).*PixsThisClass);
            end
        end
        normDiff=norm(old_Mu-Mu);
        if  normDiff<eps
            flag=0;
        end
        normMuDiff=[normMuDiff;normDiff];
        sg=reshape(Label,m,n);
        
        % 录制gif
        imshow(mat2gray(sg));
        F=getframe(gcf);
        I=frame2im(F);
        [I,map]=rgb2ind(I,256);
        if iter == 1
            imwrite(I,map,'test.gif','gif','Loopcount',inf,'DelayTime',0.2);
        else
            imwrite(I,map,'test.gif','gif','WriteMode','append','DelayTime',0.2);
        end
        iter=iter+1;
    end
    

    脚本:

    clear all;close all;clc;
    img=imread('onion.png');
    % 初始值是在图中黄、绿、红、白、紫部分随机取一点得到的RGB值
    Mu=[255 220 50;...
        115 124 31;...
        216 50 39;...
        247 215 185;...
        75 45 75];
    [sg,normMuDiff]=KMeansSeg(img,5,Mu,10^-2);
    figure,imshow(mat2gray(sg));
    figure,plot(1:length(normMuDiff),normMuDiff,'g-');

    原图:

    标题

    运行结果:

    可以看出,误差值随迭代总体呈下降趋势,但也可能出现回弹,所以推荐使用固定迭代次数以结束循环。

    更多相关内容
  • 亲测有效,内附图片,可实现图片文件读取,自动选取聚类中心和聚类数,可改变T1,T2实现(彩色图和灰度图两组参数)
  • 图像处理方面,利用matlab自带函数进行kmeans聚类,完成图像分割任务。完整代码,参数(k值)根据需求自行选择,当前代码中k=2。
  • 该课题为基于kmeans的聚类分割,输入一张彩色图像,可以选择需要分割成多少类,就会以不同颜色区分不同的块。
  • matlab编写的基于K-means图像分割,可直接运行.m文件。
  • 该程序获取图像和所需的分区数,并找到不同类别的均值并提供分类图像(面具)。
  • 智能优化算法、神经网络预测、信号处理、元胞自动机、图像处理、路径规划、无人机等多种领域的Matlab仿真
  • 1 简介 对图像进行颜色区域分割....kmeans聚类算法是一种简单实用的聚类算法,matlab自带函数kmeans可直接对数据进行kmeans聚类。为了方便更好地掌握kmeans聚类算法,今天我们自己来实现一个弱化的版本mykmeans。

    1 简介

    对图像进行颜色区域分割.将图像转换到CIE L*a*b颜色空间,用K均值聚类分析算法对描述颜色的a*和b*通道进行聚类分析;通过提取各个颜色区域独立成为单色的新图像,对图像进行分割处理.实验结果表明,在CIE L*a*b空间使用K—means聚类算法可以有效地分割彩色纺织品图像的颜色区域.

    kmeans聚类算法是一种简单实用的聚类算法,matlab自带函数kmeans可直接对数据进行kmeans聚类。为了方便更好地掌握kmeans聚类算法,今天我们自己来实现一个弱化的版本mykmeans。

    mykmeans输入包含三项,分别为聚类所使用的数据data,data每一行代表一个样本,每一列代表一个特征;聚类中心数量numclass;第三项为所使用的距离的定义,默认情况下为欧式距离。

    2 部分代码

    clc
    close all
    I=imread('football.jpg');
    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

    3 仿真结果

    4 参考文献

    [1]李鹏飞, 张宏伟. 基于K-means聚类的纺织品印花图像区域分割[J]. 西安工程大学学报, 2008, 22(5):551-554.

    展开全文
  • 基于matlab图像kmeans聚类

    热门讨论 2013-08-14 17:31:42
    基于matlab图像kmeans图像的聚类方法代码
  • 图像进行颜色区域分割.将图像转换到CIE Lab颜色空间,用K均值聚类分析算法对描述颜色的a和b通道进行聚类分析;通过提取各个颜色区域独立成为单色的新图像,对图像进行分割处理.实验结果表明,在CIE Lab空间使用K—...

    1 简介

    对图像进行颜色区域分割.将图像转换到CIE Lab颜色空间,用K均值聚类分析算法对描述颜色的a和b通道进行聚类分析;通过提取各个颜色区域独立成为单色的新图像,对图像进行分割处理.实验结果表明,在CIE Lab空间使用K—means聚类算法可以有效地分割彩色纺织品图像的颜色区域.

    2 完整代码

    clear all; close all; clc;A = double(imread('bird_small.tiff'));% 载入图片dim = size(A,1); % 图片行数k = 16; % 颜色分类的层数means = zeros(k, 3); % Initialize means to randomly-selected colors in the original photo.rand_x = ceil(dim*rand(k, 1));%初始means是k行k列随机数作为聚类中心rand_y = ceil(dim*rand(k, 1));for i = 1:k    means(i,:) = A(rand_x(i), rand_y(i), :);%在图像中找到初始聚类中心endfor itr=1:100    s_x=zeros(k,3);    s_ind=zeros(k,1);    for i=1:dim        for j=1:dim            r=A(i,j,1);g=A(i,j,2);b=A(i,j,3);            [val ind]=min(sum((repmat([r,g,b],k,1)-means).^2,2));            %repmat(A,k,1)对A矩阵进行k行的复制            s_x(ind,:)=s_x(ind,:)+[r,g,b];            s_ind(ind)=s_ind(ind)+1;        end    end    for ii=1:k        if s_ind(ii)>0            s_x(ii,:)=s_x(ii,:)./s_ind(ii);        end    end    d=sum(sqrt(sum((s_x-means).^2,2)));%计算距离    if d<1e-5        break    end    means=s_x;   endmeans = round(means);itrfigure; hold onfor i=1:k   col = (1/255).*means(i,:);   rectangle('Position', [i, 0, 1, 1], 'FaceColor', col, 'EdgeColor', col);endaxis offlarge_image = double(imread('bird_large.tiff'));figure;subplot(121);imshow(A,[]);title('原图')large_dim = size(large_image, 1);for i = 1:large_dim    for j = 1:large_dim        r = large_image(i,j,1); g = large_image(i,j,2); b = large_image(i,j,3);        [val ind]=min(sum((repmat([r,g,b],k,1)-means).^2,2));        large_image(i,j,:) = means(ind,:);    end endsubplot(122);imshow(uint8(round(large_image)));title('Kmean分割图')imwrite(uint8(round(large_image)), 'bird_kmeans.jpg');% Save image

    3 仿真结果

    4 参考文献

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

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

    展开全文
  • 基于Kmeans聚类的图像分割算法,适合初学者学习。分较少
  • 图像进行颜色区域分割.将图像转换到CIE L*a*b颜色空间,用K均值聚类分析算法对描述颜色的a*和b*通道进行聚类分析;通过提取各个颜色区域独立成为单色的新图像,对图像进行分割处理.实验结果表明,在CIE L*a*b空间使用K...

    1 简介

    对图像进行颜色区域分割.将图像转换到CIE L*a*b颜色空间,用K均值聚类分析算法对描述颜色的a*和b*通道进行聚类分析;通过提取各个颜色区域独立成为单色的新图像,对图像进行分割处理.实验结果表明,在CIE L*a*b空间使用K—means聚类算法可以有效地分割彩色纺织品图像的颜色区域.

    2 部分代码

    clc
    close all
    I=imread('football.jpg');
    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

    3 仿真结果

    4 参考文献

    [1]李鹏飞, 张宏伟. 基于K-means聚类的纺织品印花图像区域分割[J]. 西安工程大学学报, 2008, 22(5):551-554.

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

    5 MATLAB代码与数据下载地址

    见博客主页

    展开全文
  • 完整代码已上传我的资源:【图像分割】基于K-means聚类算法图像分割【含Matlab源码 1476期】 获取代码方式2: 通过紫极神光博客主页开通CSDN会员,凭支付凭证,私信博主,可获得此代码。 获取代码方式3: 通过订阅紫...
  • Kmean_图像分割,kmeans图像分割,matlab源码.zip
  • 基于K-means聚类算法的图像分割 算法的基本原理:  基于K-means聚类算法的图像分割图像中的像素为数据点,按照指定的簇数进行聚类,然后将每个像素点以其对应的聚类中心替代,重构该图像。 算法步骤: ①随机选取...
  • 文中提出基于优化遗传算法的模糊聚类图像分割算法, 是在上述对遗传算法进行了优化的基础上形成的。不仅根据个体适应度大小和变化快慢自适应调节变异率和交叉率, 提高计算准确性和效率, 另外, 在遗传算法迭代计算中...
  • kmeans算法分割图像

    千次阅读 2015-03-23 20:02:27
    kmeans算法分割图像 算法 算法与Matlab比较 代码和实验结果
  • kmeans图像分割程序

    2018-05-25 19:06:37
    matlab程序,处理图像数据。请勿在未经授权的情况下上传任何涉及著作权侵权的资源,除非该资源完全由您个人创作
  • kmeans_图像分割代码

    2015-04-13 19:24:59
    matlab kmeans_图像分割代码.
  • 模式识别经典算法——Kmeans图像聚类分割(以最短的matlab程序实现)
  • 基于K-Means的图像分割算法(matlab代码

    千次阅读 多人点赞 2020-03-27 10:37:01
    非监督分类的处理过程较简单,只是单纯的统计图像地物的光谱特征信息进行分类,不需要利用图像地物的先验知识。非监督分类方法与监督分类方法的不同的在于非监督分类方法不需要分类先验知识,该方法认为图像上的同类...
  • Kmeans聚类matlab代码

    2015-06-10 20:13:55
    Kmeans聚类算法matlab代码,可用于图像分割等数字图像处理领域。
  • 更多描述https://pixelsciences.blogspot.com/2017/08/genetics-algorithm-centroid-selection-kmeans.html
  • 基于K-means聚类算法的图像分割(MATLAB实现),如有需要,请下载!!
  • 该课题为基于kmeans的聚类分割,输入一张彩色图像,可以选择需要分割成多少类,就会以不同颜色区分不同的块,带有GUI界面,操作丰富。
  • Matlabkmeans聚类分割

    千次阅读 2020-03-18 15:19:28
    Matlab环境下的k-means聚类算法,实现图像分割。(GUI,分割聚类数可以输入) 快速K均值聚类图像分割算法源代码 …\kmeans-image-segmentation.rar …\kmeans.m …\loadFile.do.htm …\loadFile.do_files …\00th....
  • 有两个文件,一个用于在切片上连续绘制 sami_3d_clust.m 另一个 sami_3d_clust_m.m 允许您绘制图像的蒙太奇。 单击并绘制.... 多个 rois 然后单击开始聚类

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 726
精华内容 290
关键字:

kmeans图像分割matlab代码

matlab 订阅