基于matlab的K-means聚类图像分割

2024-06-23 07:12

本文主要是介绍基于matlab的K-means聚类图像分割,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1 原理

K-means聚类算法在图像分割中的应用是基于一种无监督的学习方法,它将图像中的像素点或特征区域划分为K个不同的簇或类别。以下是K-means聚类算法用于图像分割的原理,包括步骤和公式:

1.1 原理概述
  1. 选择簇的数量(K)
    • 首先,用户需要指定要将图像数据分成多少个簇(即K的值)。
  2. 初始化聚类中心
    • 随机选择K个像素点作为初始聚类中心。
  3. 分配数据点到最近的聚类中心
    • 对于图像中的每个像素点,计算其与每个聚类中心的距离(如欧氏距离),并将其分配给距离最近的聚类中心所在的簇。
  4. 更新聚类中心
    • 对于每个簇,计算该簇中所有像素点的平均值(或质心),并将这个平均值作为新的聚类中心。
  5. 重复迭代
    • 重复步骤3和步骤4,直到聚类中心不再发生显著变化或达到预定的迭代次数。
1.2 公式表示
  • 距离计算(以欧氏距离为例):

        设x_i为图像中的一个像素点(或特征向量),\mu_j为第j个聚类中心,则像素点x_i到聚类中心\mu_j的欧氏距离计算公式为:

d(x_i, \mu_j) = \sqrt{\sum_{d=1}{D} (x_i{(d)} - \mu_j{(d)})2}

其中,D是像素点或特征向量的维度。

  • 聚类中心的更新
    • 对于每个簇C_k,其新的聚类中心\mu_k'计算公式为:

\mu_k' = \frac{1}{|C_k|} \sum_{x_i \in C_k} x_i

  • 其中,|C_k|是簇C_k中像素点的数量。
1.3 步骤总结
  1. 初始化:选择K个初始聚类中心。
  2. 分配:计算每个像素点到聚类中心的距离,并将其分配给最近的聚类中心。
  3. 更新:重新计算每个簇的聚类中心。
  4. 迭代:重复步骤2和步骤3,直到聚类中心不再变化或达到预设的迭代次数。
1.4 注意事项
  • K-means算法对初始聚类中心的选择敏感,因此可能多次运行算法并选择最佳结果。
  • SSE(Sum of Squared Errors)是衡量聚类效果的一个指标,其值越小表示聚类结果越紧密。
  • 图像分割中的K-means算法通常是在图像的特征空间(如颜色空间、纹理空间等)上进行的,而不是直接在像素值上进行。这有助于提高算法的鲁棒性和效率。

2 代码

%% 基于聚类的分割 (使用K-means聚类)
figure('Position', [100 100 1200 400]);
% 读取图像并转换为双精度  
I3 = imread('test.jpg');
I3 = rgb2gray(I3);  
subplot(1,3,1);imshow(I3);
title('origin Image');
% 读取图像并转换为双精度  
I4 = imread('test.jpg'); 
I_double = im2double(I4);  
% 将图像数据重塑为二维数组,其中每一列是一个像素  
data = reshape(I_double, [], 3);  
% 使用K-means聚类  
[cluster_idx, cluster_center] = kmeans(data, 3); % 假设我们想要3个聚类  
% 将聚类结果重塑为图像大小  
segmented_image = reshape(cluster_idx, size(I4, 1), size(I4, 2));  
% 显示结果(可能需要为每个聚类分配一个颜色)  
segmented_image_colored = label2rgb(segmented_image, 'jet', 'k', 'shuffle'); subplot(1,3,2);imshow(segmented_image_colored); 
title('three colors Image using K-means Clustering');
% 读取图像并转换为灰度  
I5 = imread('test.jpg');  
I_gray = rgb2gray(I5);  
I_double = im2double(I_gray);  % 将图像数据重塑为二维数组  
data = I_double(:);  % 使用两个中心的K-means聚类  
[cluster_idx, cluster_center] = kmeans(data, 2);  % 将聚类结果重塑为图像大小  
segmented_image = reshape(cluster_idx, size(I_gray));  % 为每个聚类分配一个颜色(在这种情况下,0为黑色,1为白色)  
segmented_image_bw = ind2rgb(segmented_image, [0 0 0; 1 1 1]);  % 显示结果   
subplot(1,3,3);imshow(segmented_image_bw);  
title('Black and White Image using K-means Clustering');

3 运行结果

图1 图像分割对比图

这篇关于基于matlab的K-means聚类图像分割的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1086479

相关文章

时序预测 | MATLAB实现LSTM时间序列未来多步预测-递归预测

时序预测 | MATLAB实现LSTM时间序列未来多步预测-递归预测 目录 时序预测 | MATLAB实现LSTM时间序列未来多步预测-递归预测基本介绍程序设计参考资料 基本介绍 MATLAB实现LSTM时间序列未来多步预测-递归预测。LSTM是一种含有LSTM区块(blocks)或其他的一种类神经网络,文献或其他资料中LSTM区块可能被描述成智能网络单元,因为

MATLAB算法实战应用案例精讲-【数模应用】三因素方差

目录 算法原理 SPSSAU 三因素方差案例 1、背景 2、理论 3、操作 4、SPSSAU输出结果 5、文字分析 6、剖析 疑难解惑 均方平方和类型? 事后多重比较的类型选择说明? 事后多重比较与‘单独进行事后多重比较’结果不一致? 简单效应是指什么? 边际估计均值EMMEANS是什么? 简单简单效应? 关于方差分析时的效应量? SPSSAU-案例 一、案例

鹅算法(GOOSE Algorithm,GOOSE)求解复杂城市地形下无人机避障三维航迹规划,可以修改障碍物及起始点(Matlab代码)

一、鹅算法 鹅优化算法(GOOSE Algorithm,GOOSE)从鹅的休息和觅食行为获得灵感,当鹅听到任何奇怪的声音或动作时,它们会发出响亮的声音来唤醒群中的个体,并保证它们的安全。 参考文献 [1]Hamad R K, Rashid T A. GOOSE algorithm: a powerful optimization tool for real-world engineering

基于NURBS曲线的数据拟合算法matlab仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 4.1NURBS曲线基础 4.2 数据拟合原理 5.完整程序 1.程序功能描述        基于NURBS曲线的数据拟合算法,非均匀有理B样条(Non-Uniform Rational B-Splines,简称NURBS)曲线是一种强大的数学工具,广泛应用于计算机图形学、CAD/CA

leetcode刷题(95)——416. 分割等和子集

给定一个只包含正整数的非空数组。是否可以将这个数组分割成两个子集,使得两个子集的元素和相等。 注意: 每个数组中的元素不会超过 100 数组的大小不会超过 200 示例 1: 输入: [1, 5, 11, 5]输出: true解释: 数组可以分割成 [1, 5, 5] 和 [11]. 示例 2: 输入: [1, 2, 3, 5]输出: false解释: 数组不能分割成两个元素和相等的子

音视频开发基础知识(1)——图像基本概念

像素 **像素是图像的基本单元,一个个像素就组成了图像。你可以认为像素就是图像中的一个点。**在下面这张图中,你可以看到一个个方块,这些方块就是像素。 分辨率 图像(或视频)的分辨率是指图像的大小或尺寸。我们一般用像素个数来表示图像的尺寸。比如说一张1920x1080的图像,前者1920指的是该图像的宽度方向上有1920个像素点,而后者1080指的是图像的高 度方向上有1080个像素点。

matlab sift算法使用的记录

最近在做个三维建模的东西,用到了sift算子,需要在matlab上使用。网上介绍使用了 David Lowe的源代码。源码地址为: http://www.cs.ubc.ca/~lowe/keypoints/ 在使用的过程中,会出现以下错误: 不知道是为什么,在一片博客中看到图像大小大致要800*600的说明,我就猜想是不是因为我的图像太大了。原始图像3000*1200的,于是我就把图

【Python机器学习】NMF——将NMF应用于人脸图像

将NMF应用于之前用过的Wild数据集中的Labeled Faces。NMF的主要参数是我们想要提取的分量个数。通常来说,这个数字要小于输入特征的个数(否则的话,将每个像素作为单独的分量就可以对数据进行解释)。 首先,观察分类个数如何影响NMF重建数据的好坏: import mglearn.plotsimport numpy as npimport matplotlib.pyplot as

AIGC-Animate Anyone阿里的图像到视频 角色合成的框架-论文解读

Animate Anyone: Consistent and Controllable Image-to-Video Synthesis for Character Animation 论文:https://arxiv.org/pdf/2311.17117 网页:https://humanaigc.github.io/animate-anyone/ MOTIVATION 角色动画的

详细解析MATLAB和Simulink中的文件格式:mat, mdl, mexw32, 和 m 文件

matlab 探索MATLAB和Simulink中的文件格式:MAT, MDL, MEXW32, 和 M 文件**MAT 文件 (.mat)****MDL 文件 (.mdl)****MEX 文件 (.mexw32/.mexw64)****M 文件 (.m)****总结** 探索MATLAB和Simulink中的文件格式:MAT, MDL, MEXW32, 和 M 文