精易论坛

标题: K均值用于图像分割 [打印本页]

作者: z13228604287    时间: 2022-9-16 13:50
标题: K均值用于图像分割
本帖最后由 z13228604287 于 2022-9-16 15:33 编辑



聚类:将抽象对象的集合分成由多个相似的对象组成的多个子类的过程,常用聚类方法有:分裂法,层次法,基于密度的方法,基于网格的方法,基于模型的方法,K均值法。其中K均值法是一种基于距离的分裂法。

K均值算法是非常常用的一种聚类算法,用于将给定的样本集分成指定数目的聚类。具体算法如下:

·      为每个聚类确定一个初始的聚类中心,这样k个聚类存在k个聚类中心

·      将样本集中的每一个样本按照最小距离原则 分配到k个聚类中的某一个

·      使用每个聚类中所有样本的均值作为新的聚类中心

·      如果聚类中心有变化则重复2、3步直到聚类中心不再变化为止

·      最后得到的k个聚类中心就是聚类的结果

K均值算法是一种贪心算法,因而不一定能得到最优化结果,不过它是必定收敛的。

   调用格式: 〈双精度小数型〉 视觉_K均值 (多维矩阵类 数据,整数型 ?,多维矩阵类 标签,迭代标准类 迭代,整数型 尝试,整数型 标志,多维矩阵类 中心)
    英文名称:kmeans
    查找聚类中心并对聚类周围的输入样本进行分组。本命令为初级命令。
    参数<1>的名称为“数据”,类型为“多维矩阵类(Mat)”。用于聚类的数据。需要具 CV_32F与CV_32FC2数据类型。
    参数<2>的名称为“?”,类型为“整数型(int)”,初始值为“2”。要拆分集合的集群数。
    参数<3>的名称为“标签”,类型为“多维矩阵类(Mat)”。输入/输出整数数组,用于存储每个样本的集群索引。
    参数<4>的名称为“迭代”,类型为“迭代标准类(TermCriteria)”。算法终止标准,即最大迭代次数和/或所需精度。精度被指定为criteria.epsilon。一旦每个聚类中心在某个迭代中移动小于标准.epsilon,算法就会停止。
    参数<5>的名称为“尝试”,类型为“整数型(int)”,初始值为“10”。用于指定使用不同初始标签执行算法的次数的标志。该算法返回产生最佳紧凑性的标签。
    参数<6>的名称为“标志”,类型为“整数型(int)”,初始值为“0”。可以采用  #K方法_* 的常量。
    参数<7>的名称为“中心”,类型为“多维矩阵类(Mat)”。聚类中心的输出矩阵,每个聚类中心一行。

    操作系统需求: Windows

  
窗口程序集名保 留  保 留备 注
程序集1   
子程序名返回值类型公开备 注
_启动子程序整数型 本子程序在程序启动后最先执行
变量名类 型静态数组备 注
多维矩阵类 
结果多维矩阵类 
图 = 视觉_图像解码 ( #图片1, #读图_彩色 )
结果 = 图像分割 (图, 2)
视觉_显示图像 (“小白鼠”, 结果)
视觉_等待按键 (0)
返回 (0)  ' 可以根据您的需要返回任意数值
子程序名返回值类型公开备 注
图像分割多维矩阵类 
参数名类 型参考可空数组备 注
输入图多维矩阵类
分类数量整数型
变量名类 型静态数组备 注
颜色标签颜色标签6
列数整数型 
行数整数型 
样本计数整数型 
样本数据多维矩阵类 
数据多维矩阵类 
集群计数整数型 
迭代标准迭代标准类 
标签多维矩阵类 
中心多维矩阵类 
返回图多维矩阵类 
i整数型 
位置整数型 
标志整数型 
j整数型 
随机随机数类 
颜色标签 [1].颜色 = { 0, 0, 255 }
颜色标签 [2].颜色 = { 0, 255, 0 }
颜色标签 [3].颜色 = { 255, 0, 0 }
颜色标签 [4].颜色 = { 0, 255, 255 }
颜色标签 [5].颜色 = { 255, 0, 255 }
颜色标签 [6].颜色 = { 255, 255, 0 }
列数 = 输入图.列数 ()
行数 = 输入图.行数 ()
样本计数 = 列数 × 行数
样本数据 = 输入图.重塑 (3, 样本计数)
样本数据.转换到 (数据, #Cv小数型, 1, 0)
集群计数 = 分类数量  ' //分类数量
' 随机.置状态 (-1)'重置随机数状态(保证每次运行KMeans结果一致)
迭代标准.初始化 ( #迭代标准_精度#迭代标准_元素, 10, 0.1)
视觉_K均值 (数据, 集群计数, 标签, 迭代标准, 10, #K方法_随机_中心, 中心)
返回图.初始化 (输入图.行数 (), 输入图.列数 (), 输入图.类型 (), 标量 (0))
变量循环首 (0, 行数 - 1, 1, i)
变量循环首 (0, 列数 - 1, 1, j)
位置 = i × 列数 + j
标志 = 标签.取元素 (位置, 0)
返回图.置元素V (i, j, 颜色标签 [标志 + 1].颜色)
变量循环尾 ()
变量循环尾 ()
返回 (返回图)


i支持库列表   支持库注释   
OpenCV(未知支持库)





作者: sinewtec    时间: 2022-9-16 15:30
一头雾水!!!!!!
作者: YY244801950    时间: 2022-9-18 22:23
这人感觉就是个小丑!天天开贴   进群一问模块500
作者: guyuelintian    时间: 2022-9-23 18:37
大神分享辛苦了!




欢迎光临 精易论坛 (https://125.confly.eu.org/) Powered by Discuz! X3.4