基于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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • hive中数据类型转换_csv文件导入sqlserver数据库中

    hive中数据类型转换_csv文件导入sqlserver数据库中1.类型映射关系mysql和hive中的数据类型存在差异,在mysql集成数据到hive中这样的场景下,我们希望在hive中的数据是贴源的,所以在hive中希望创建和mysql结构一致的表。mysql到hive数据类型映射参考如下:mysql数据类型hive数据类型整型bigintBIGINT整型intBIGINT整型smallintBIGINT整型tinyintBIGINT浮点型decimaldecimal浮点型double

    2022年9月21日
    1
  • python计算平均值的代码(python3求平均值)

    计算平均值【问题描述】从键盘输入三个整数,分别存入x,y,z三个整型变量中,计算并输出三个数的和以及平均值。【输入形式】从键盘输入三个整数,整数之间以空格隔开。【输出形式】在屏幕上分两行显示结果:第一行为三个数的和,整数形式输出;第二行为三个数的平均值,浮点数形式输出,小数点后保留两位小数。【输入样例】323【输出样例】82.67【样例说明】3、2、3的和为8,所以第一行输出8;第二行输出3、2、3的平均值2.67(保留两位小数)。实现代码:x,y,z=(inpu.

    2022年4月15日
    65
  • java GC算法「建议收藏」

    java GC算法「建议收藏」一般来说,程序使用内存的方式遵循先向操作系统申请一块内存,使用内存,使用完毕之后释放内存归还给操作系统。然而在传统的C/C++等要求显式释放内存的编程语言中,记得在合适的时候释放内存是一个很有难度的工作,因此Java等编程语言都提供了基于垃圾回收算法的内存管理机制:垃圾内存回收算法常见的垃圾回收算法有引用计数法(ReferenceCounting)、标注并清理(MarkandSweep…

    2022年6月17日
    28
  • OpenCV学习之路–5–OpenCV3.4.10的ARM版本移植到开发板

    OpenCV学习之路–5–OpenCV3.4.10的ARM版本移植到开发板开发板:迅为IMX6Q移植QTE5.7编译好的ARM版本OpenCV3.4.10文件:OpenCV3.4.10ARM版编译好的OpenCV依赖库文件:1.将/usr/local/arm/opencv-arm/lib/下的库拷贝到开发板相同目录及/lib/下mkdir/home/topeet/iMX6Q/qt/usr/local/arm/opencv-armcd/usr/local/arm/opencv-arm/cp-r*/home/topeet/iM…

    2022年10月14日
    3
  • 有了这 15 款编程游戏,谁都可以学编程!

    有了这 15 款编程游戏,谁都可以学编程!程序员的成长之路互联网/程序员/成长/职场关注阅读本文大概需要5.2分钟。1CodingGames一边玩游戏,一边挑战编程难题。Codinggames支持包括P…

    2022年4月19日
    155
  • 职称计算机模块intern,职称计算机考试模块试题.pdf

    职称计算机模块intern,职称计算机考试模块试题.pdf职称计算机考试模块试题职称计算机考试WORD模块试题2008-02-0819:12职称计算机考试,找点题目看看,也不知道是不是就考这些,顺便给大家分享分享.1、新建一word文档,将Windows剪贴板上的内容粘贴到该Word文档中。2、保存当前文档的版本(不输入版本的备注),并设置关闭文档时自动保存版本。3、请用文档结构图显示当前文档,并设置为蓝底白字。4、请将WORD…

    2022年6月2日
    30

发表回复

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

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