基于K均值聚类算法的图像分割(Matlab)

基于K均值聚类算法的图像分割(Matlab)文章目录一 K 均值聚类算法是什么 1 什么是聚类 2 初探 K 均值聚类算法 3 K 均值算法的原理与理解二 K 均值聚类算法如何在图像分割上应用 三 Matlab 仿真一 K 均值聚类算法是什么 1 什么是聚类 聚类是指通过既定的规则把物理或者抽象的集分成几个由类似特征的样本组成的类的过程 复杂点说 聚类指用一种类似性度为标准 将类似的样本划分到同一个组中 最终得到多个类 下图为聚类的过程 图 1 聚类的过程 2 初探 K 均值聚类算法 K means 算法是一种迭代运算的算法 K means 因其简便 有效的特点

一、K均值聚类算法是什么?

1、什么是聚类?

2、初探K均值聚类算法

3、K均值算法的原理与理解

二、K均值聚类算法如何在图像分割上应用?

三、Matlab仿真

K均值聚类算法程序

function [C, label, J] = kmeans(I, k) [m, n, p] = size(I);%图片的大小m*n,p代表RGB三层 X = reshape(double(I), m*n, p); rng('default'); C = X(randperm(m*n, k), :);%随机选三个聚类中心 J_prev = inf; iter = 0; J = []; tol = 1e-11;%容忍度tol,inf为无穷大 while true, iter = iter + 1; dist = sum(X.^2, 2)*ones(1, k) + (sum(C.^2, 2)*ones(1, m*n))' - 2*X*C';%计算图片中各个点到K个聚类中心的距离 [~,label] = min(dist, [], 2) ; %label记录最小值的行数 for i = 1:k, C(i, :) = mean(X(label == i , :)); %取新的k个聚类中心 end J_cur = sum(sum((X - C(label, :)).^2, 2));%距离之和 J = [J, J_cur]; display(sprintf('#iteration: %03d, objective fcn: %f', iter, J_cur)); if norm(J_cur-J_prev, 'fro') < tol,% A和A‘的积的对角线和的平方根,即sqrt(sum(diag(A'*A))),本次与上次距离之差 break; end if (iter==10),% A和A‘的积的对角线和的平方根,即sqrt(sum(diag(A'*A))),本次与上次距离之差 break; end J_prev = J_cur; end 

主程序

clear all; close all; I = imread('C:\Users\Administrator\Desktop\K_medoids分类\de.jpg');%读取图片数据编程矩阵 [m, n, p] = size(I); %figure(); %I=imnoise(I1,'salt & pepper',0.1);%椒盐噪声,通常是由图像传感器,传输信道,解压处理等产生的黑白相间的亮暗点噪声(椒-黑,盐-白)。通常出现在灰度图中。 I1 = imnoise(I,'gaussian',0,0.1) ;% 高斯噪声,顾名思义是指服从高斯分布(正态分布)的一类噪声,通常是因为不良照明和高温引起的传感器噪声。通常在RGB图像中,显现比较明显。 %imshow(I);%显示图片I %title('加噪图像'); k = 2; [C, label, J2] = kmeans1(I, k); I_seg2 = reshape(C(label, :), m, n, p);%转换成图片矩阵的格式 k = 3; [C, label1, J3] = kmeans2(I, k); I_seg3 = reshape(C(label1, :), m, n, p); k = 4; [C, label, J2] = kmeans1(I1, k); I_seg4 = reshape(C(label, :), m, n, p); k = 8; [C, label1, J3] = kmeans2(I1, k); I_seg5 = reshape(C(label1, :), m, n, p); figure subplot(2, 3, 1), imshow(I, []), title('原图') subplot(2, 3, 2), imshow(uint8(I_seg2), []), title('2聚类') subplot(2, 3, 3), imshow(uint8(I_seg3), []), title('3聚类') subplot(2, 3, 4), imshow(uint8(I_seg4), []), title('4聚类') subplot(2, 3, 5), imshow(uint8(I_seg5), []), title('8聚类') figure subplot(3, 3, 1),plot(1:length(J2), J2), xlabel('#iterations') subplot(3, 3, 2),plot(1:length(J3), J3), xlabel('#iterations') subplot(3, 3, 3),plot(1:length(J4), J4), xlabel('#iterations') subplot(3, 3, 4),plot(1:length(J5), J5), xlabel('#iterations') segmented_images = cell(1,3);%1*3矩阵 rgb_label = repmat(label1,[1 1 3]);%把label矩阵编程[1 1 3]的矩阵 for k = 1:10 color = I; color(rgb_label ~= k) = 0;%把label不等于K的点除去 segmented_images{ 
   k} = color; end figure(),imshow(segmented_images{ 
   1}), title('分割结果——区域1'); figure(),imshow(segmented_images{ 
   2}), title('分割结果——区域2'); figure(),imshow(segmented_images{ 
   3}), title('分割结果——区域3'); 
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/232059.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 小程序“成语猜题”部分答案,总共28667题

    小程序“成语猜题”部分答案,总共28667题哀哀父母 可哀呀可哀,我的父母啊!原指古时在暴政下人民终年在外服劳役,对父母病痛、老死不能照料而悲哀。 哀哀欲绝 绝:断气,死。形容极其悲痛。 哀兵必胜 原意是力量相当的两军对阵,悲愤的一方获得胜利。后指受欺侮而奋起抵抗的军队,必定能取胜。 哀而不伤 哀:悲哀;伤:伤害。忧愁而不悲伤。比喻做事没有过头也无不及。 哀感天地 形容极其哀痛,使天地都为之感动。 哀感顽艳 原意是指内容凄切,文辞华丽,使愚笨和聪慧的人同样受感动。后多用来指艳情的小说、戏曲、电影

    2022年6月5日
    51
  • js逗号隔开的字符串转数组_字符串匹配逗号组成数组

    js逗号隔开的字符串转数组_字符串匹配逗号组成数组varplateform_id_array=[1,2];varplateform_id_str=plateform_id_array.join(‘,’);

    2025年8月4日
    3
  • 在c#项目中用NPOI导出excel

    在c#项目中用NPOI导出excel用NPOI导出excel(加载的是已有的excel模板,当然也可以创建空的excel)具体步骤:1、下载NPOI插件。地址:http://npoi.codeplex.com/releases/view/381132、在工程中添加引用。3、在需要用到NPOI的地方using4、下面就可以在代码中进行操作了。若行或者单元格中没有数据时,那么获取到的结果是null,必须在获取之前进行创建。5、最后必须…

    2022年6月17日
    222
  • 计算机中进制转换方法_电脑进制转换方法

    计算机中进制转换方法_电脑进制转换方法计算机进制转换方法从小我们就开始学数学数学就有涉及到进制知识相信大家对于进制都不陌生吧进制也就是进位制是一种进位方法现在大家都有电脑利用电脑自带的计算机进行进制转换是最简便的方法下面是由百分网小编为大家准备的计算机进制转换方法喜欢的可以收藏一下!了解更多详情资讯请关注应届毕业生考试网!计算机中常用的进制主要有:二进制、八进制、十六进制学习计算机要对其有所了解2进制用两个阿拉伯数字:0、1;8进制用…

    2025年8月1日
    4
  • 第十一单元作业

    第十一单元作业

    2022年3月12日
    36
  • 2019-07高德地图行政区域省市区json数据获取(php代码)

    2019-07高德地图行政区域省市区json数据获取(php代码)写在前面从省向下查三级,高德县级市的子级会返回街道,正常的市正常返回子级为区。具体高德api参数详情请查看https://lbs.amap.com/api/webservice/guide/api/district代码//获取json数据publicfunctiongetDataAction(){set_time_limit(0);$url=”…

    2022年6月21日
    26

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号