您得到不同结果的原因是您的颜色分割算法使用了

k-means clustering.我将假设您不知道这是什么,因为熟悉其工作原理的人会立即告诉您这就是您的原因每次都会得到不同的结果.事实上,每次运行此代码后得到的不同结果都是k-means聚类的自然结果,我将解释原因.

它的工作原理是,对于您拥有的某些数据,您希望将它们分组为k个组.您最初在数据中选择k个随机点,这些点将包含1,2,…,k的标签.这就是我们所说的质心.然后,确定其余数据与这些点之间的接近程度.然后,您将这些点分组,以便无论哪个点最接近这些k点中的任何一个,您都将这些点指定为属于该特定组(1,2,…,k).之后,对于每个组的所有点,您更新质心,其实际上被定义为每个组的代表点.对于每个组,您计算每个k组中所有点的平均值.这些成为下一次迭代的新质心.在下一次迭代中,您可以确定数据中每个点与每个质心的接近程度.你继续迭代并重复这种行为,直到质心不再移动,或者它们移动很少.

这适用于上面的代码是您正在拍摄图像,并且您想要仅使用k种可能的颜色来表示图像.因此,这些可能的颜色中的每一种都是质心.一旦找到每个像素所属的簇,就可以将像素的颜色替换为像素所属的簇的质心.因此,对于图像中的每个颜色像素,您需要确定该像素最好用哪种颜色表示.这是一种颜色分割的原因是因为您将图像分割为仅属于k种可能的颜色.在更一般的意义上,这就是所谓的无监督分割.

现在,回到k-means.如何选择初始质心是您获得不同结果的原因.您以默认方式调用k-means,它自动确定算法将从中选择哪些初始点.因此,每次调用算法时都不能保证生成相同的初始点.如果您想重复相同的分段,无论您多少次调用kmeans,您都需要自己指定初始点.因此,您需要修改k-means调用,使其看起来像这样:

[cluster_idx, cluster_center] = kmeans(ab,nColors,'distance','sqEuclidean', ...

'Replicates', 3, 'start', seeds);

请注意,该调用是相同的,但我们在k-means调用中添加了两个附加参数.标志开始意味着您指定了初始点,种子是k x p数组,其中k是您想要的组数.在这种情况下,这与nColors相同,即3.p是数据的维度.由于您正在转换和重塑数据的方式,这将是2.因此,您最终指定了一个3 x 2矩阵.但是,您有一个Replicate标志.这意味着k-means算法将运行您指定的特定次数,并将输出具有最小错误量的分段.因此,我们将使用此标志指定的次数重复kmeans调用次数.上面的种子结构将不再是k x p而是k x p x n,其中n是您想要运行分段的次数.现在这是一个3D矩阵,其中每个2D切片确定算法的每次运行的初始点.请记住以下内容.

您如何选择这些积分取决于您.但是,如果你想随机选择这些而不是留给你,但是每次你调用这个函数都要重现相同的结果,你应该将random seed generator设置为一个已知的数字,比如123.这样,当你生成随机点,它将始终生成相同的点序列,因此是可重现的.因此,我会在调用kmeans之前将其添加到您的代码中.

rng(123); %// Set seed for reproducibility

numReplicates = 3;

ind = randperm(size(ab,1), numReplicates*nColors); %// Randomly choose nColors colours from data

%// We are also repeating the experiment numReplicates times

%// Make a 3D matrix where each slice denotes the initial centres for each iteration

seeds = permute(reshape(ab(ind,:).', [2 nColors numReplicates]), [2 1 3]);

%// Now call kmeans

[cluster_idx, cluster_center] = kmeans(ab,nColors,'distance','sqEuclidean', ...

'Replicates', numReplicates, 'start', seeds);

请记住,您指定了Replicates标志,我们希望重复此算法一定次数.这是3.因此,我们需要做的是为算法的每次运行指定初始点.因为我们将有3个点集群,并且我们将运行该算法3次,所以我们总共需要9个初始点(或nColors * numReplicates).每组初始点必须是3D数组中的切片,这就是您在kmeans调用之前看到复杂语句的原因.

我将重复次数作为一个变量,这样你就可以改变它并改变你内心的内容,它仍然有用.使用permute和reshape的复杂语句使我们可以非常轻松地创建这个3D点阵.

请记住,MATLAB中对randperm的调用仅接受了最近的第二个参数.如果上面对randperm的调用不起作用,请改为:

rng(123); %// Set seed for reproducibility

numReplicates = 3;

ind = randperm(size(ab,1)); %// Randomly choose nColors colours from data

ind = ind(1:numReplicates*nColors); %// We are also repeating the experiment numReplicates times

%// Make a 3D matrix where each slice denotes the initial centres for each iteration

seeds = permute(reshape(ab(ind,:).', [2 nColors numReplicates]), [2 1 3]);

%// Now call kmeans

[cluster_idx, cluster_center] = kmeans(ab,nColors,'distance','sqEuclidean', ...

'Replicates', numReplicates, 'start', seeds);

现在使用上面的代码,您应该能够每次都生成相同的颜色分割结果.

祝你好运!

如何用matlab分割颜色,Matlab:基于颜色的分割相关推荐

  1. 【Matlab/CV系列】基于K-means/分水岭分割的多光谱遥感图像分割的Matlab实现

    Date:2022.4.18 文章目录 前言 1.初始界面 2.三种方法分割界面 3.光谱图 前言 在之前的时候,毕业设计中实现了基于K-means/分水岭/交叉熵分割的多光谱遥感图像分割算法,效果不 ...

  2. 一个简单的基于形态学处理的报纸图像版面分割算法matlab仿真

    目录 一.理论基础 二.部分MATLAB仿真 三.仿真结论分析 一.理论基础 图像分割就是把图像分成若干个特定的.具有独特性质的区域并提出感兴趣目标的技术和过程.它是由图像处理到图像分析的关键步骤.现 ...

  3. 如何用matlab分割颜色,Matlab图像处理学习笔记(二):基于颜色的图像分割

    在实际处理图像时,经常需要对图像进行分割,然后提取ROI,本学习笔记记录怎么用Matlab实现基于颜色的图像分割. 基于颜色的图像分割实现简单,算法简洁,具有很好的实时性. 实现代码的过程中,我参考了 ...

  4. matlab调用kmeans_使用 K 均值聚类实现基于颜色的分割

    步骤 1:读取图像 在 hestain.png 中读取,这是一个带有苏木精和曙红染色组织 (H&E) 的图像.这种染色方法有助于病理学家区分不同组织类型. he = imread('hesta ...

  5. 基于颜色特征,形状特征和纹理特征的数字图像的检索(Digital Image Retrieval)MATLAB GUI实现

    ** 数字图像的检索 下载地址:代码.数据集下载地址 如需论文请联系:hqucuihao@163.com ** 1. 摘要 随着互联网发展的日新月异,人们对于信息的需求不再是简单的文字,大量的图像.语 ...

  6. matlab中caitu_tiqu,Matlab平台基于颜色的车牌识别程序

    Matlab平台基于颜色的车牌识别程序 matlab 2020-11-18 下载地址 https://www.codedown123.com/51252.html Matlab平台基于颜色的车牌识别程 ...

  7. matlab 职坐标,机器人之【机器视觉与图像处理】基于MATLAB的圆检测、颜色识别、数字识别...

    本文主要向大家介绍了机器人之[机器视觉与图像处理]基于MATLAB的圆检测.颜色识别.数字识别,通过具体的内容向大家展现,希望对大家学习机器人有所帮助. 对产品中心的检测:设置好路径之后,包含关系是在 ...

  8. 基于颜色特征的图像匹配MATLAB,基于颜色特征的图像检索系统 这是个MATLAB程序 - 下载 - 搜珍网...

    压缩包 : 基于颜色特征的图像检索系统.rar 列表 基于颜色特征的图像检索系统\007.bmp 基于颜色特征的图像检索系统\01.bmp 基于颜色特征的图像检索系统\011.BMP 基于颜色特征的图 ...

  9. MATLAB中肤色分割算法_基于MATLAB的车牌字符分割问题

    引言 车牌识别系统是一项比较成熟的技术,并且已经得到了广泛的应用. 图1 车牌识别系统(图片来源于网络) 车牌识别技术主要包含三个方面:车牌定位.字符分割和字符识别三个核心模块.车牌定位是利用车牌的颜 ...

  10. 基于颜色分割的盲道识别算法

    基于颜色分割的盲道识别算法 前言   本任务的要求是通过相关算法识别出城市区域中的盲道,通过对各种盲道进行调研,发现目前城市中的盲道基本分为两大部分,一类是具有明显样色和纹理特征的盲道,通常是黄色(当 ...

最新文章

  1. WCF+Silverlight一个简单的RSS阅读器(二)
  2. 编写python程序、创建名为class的数据库_python面向对象编程class1
  3. 杭电 1284 钱币兑换问题【完全背包求方案总数】
  4. 高通写号工具_高通推出桌面平台新ARM处理器并认为我们的电脑性能没必要那么高...
  5. ServletContext(重要)
  6. SpringCloud工作笔记040--- XMLHTTP中setRequestHeader()方法解析
  7. 终端运行python报联网_终端里为什么无法运行python
  8. 2016-06-07【普元EOS Studio】
  9. 【其他】vue项目集成富文本编辑器
  10. 在word中插入参考文献角标
  11. 安装工程造价课程设计_安装工程造价课程设计心得体会及建议
  12. JS 数组 按个数进行分组
  13. 黄金面试技巧|应届生求职必备
  14. HTMl账号密码登录跳转下一个页面问题/网页输入正确的账号面膜登录下一个界面/PHP网页禁止某个链接直链访问
  15. STM32CUBEIDE配置FreeRTOS
  16. 体育竞技游戏的团队AI
  17. store(商城项目)Springboot+springmvc+ajax+mybatis(15)
  18. Git git config 配置使用
  19. day 06 非空约束、唯一约束、主键约束、外键约束
  20. Pytorch计算神经网络的参数量和浮点操作数

热门文章

  1. 必须要GPT-3吗?不,BERT的MLM模型也能小样本学习
  2. 近期知识图谱顶会论文推荐,另附超详笔记解读
  3. Python GUI编程(Tkinter)笔记
  4. yoyo思维题(困难) 组合数学
  5. python怎么换行输入而不执行_关于在IDLE中怎么换行继续敲写代码而不执行语句...
  6. spring-基于注解的aop开发(快速入门)
  7. SpringBoot+Mybatis加载Mapper.xml文件的两种方式
  8. UCloud UFile——对象存储UFile SDK基本使用
  9. Spring——Filter过滤器注入Bean时注入失败[NULL]
  10. Little Sub and Sequence