• 大小: 106KB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2021-05-25
  • 语言: 其他
  • 标签: Kmeans++  

资源简介

Kmeans++算法对图像进行分割,机器视觉。

资源截图

代码片段和文件信息

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%功能:演示Kmeans聚类算法在计算机视觉中的应用
%实现如何利用Kmeans聚类实现图像的分割;
%环境:Win7,Matlab2012b
%Modi: NUDT-VAP
%时间:2014-10-17
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

function kmeans_demo1()
clear;close all;clc;
%% 读取测试图像
im = imread(‘city.jpg‘);
imshow(im) title(‘Iput image‘);
%% 转换图像的颜色空间得到样本
cform = makecform(‘srgb2lab‘);
lab = applycform(imcform);
ab = double(lab(::2:3));
nrows = size(lab1); ncols = size(lab2);
X = reshape(abnrows*ncols2)‘;
figure scatter(X(1:)‘X(2:)‘3‘filled‘);  box on; %显示颜色空间转换后的二维样本空间分布
%print -dpdf 2D1.pdf
%% 对样本空间进行Kmeans聚类
k = 5; % 聚类个数
max_iter = 100; %最大迭代次数

[centroids labels] = run_kmeans(X k max_iter); 

%% 显示聚类分割结果
figure scatter(X(1:)‘X(2:)‘3labels‘filled‘); %显示二维样本空间聚类效果
hold on; scatter(centroids(1:)centroids(2:)60‘r‘‘filled‘)
hold on; scatter(centroids(1:)centroids(2:)30‘g‘‘filled‘)
box on; hold off;
%print -dpdf 2D2.pdf

pixel_labels = reshape(labelsnrowsncols);
rgb_labels = label2rgb(pixel_labels);
figure imshow(rgb_labels) title(‘Segmented Image‘);
%print -dpdf Seg.pdf
end

function [centroids labels] = run_kmeans(X k max_iter)
% 该函数实现Kmeans聚类
% 输入参数:
%                   X为输入样本集,dxN
%                   k为聚类中心个数
%                   max_iter为kemans聚类的最大迭代的次数
% 输出参数:
%                   centroids为聚类中心 dxk
%                   labels为样本的类别标记

%% 采用K-means++算法初始化聚类中心
  centroids = X(:1+round(rand*(size(X2)-1)));
  labels = ones(1size(X2));
  for i = 2:k
        D = X-centroids(:labels);
        D = cumsum(sqrt(dot(DD1)));
        if D(end) == 0 centroids(:i:k) = X(:ones(1k-i+1)); return; end
        centroids(:i) = X(:find(rand < D/D(end)1));
        [~labels] = max(bsxfun(@minus2*real(centroids‘*X)dot(centroidscentroids1).‘));
  end
  
%% 标准Kmeans算法
  for iter = 1:max_iter
        for i = 1:k l = labels==i; centroids(:i) = sum(X(:l)2)/sum(l); end
        [~labels] = max(bsxfun(@minus2*real(centroids‘*X)dot(centroidscentroids1).‘)[]1);
  end
  
end



 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     文件        2278  2016-07-07 13:29  kmeans_demo1.m
     文件      118067  2014-02-12 14:08  city.jpg

评论

共有 条评论

相关资源