c语言环境下opencv图像K均值聚类,图像处理中kmeans聚类算法C++实现

c语言环境下opencv图像K均值聚类,图像处理中kmeans聚类算法C++实现_第1张图片

对于比 较大的类别,如遥感影像中以像素数目表示的较大 的类别,式(1)可以近似表示为 仃222 n2丁 在遥感分类应用中,一般采用试探性的方法确定 选择训练样本数量,选取规则是每个类别需要的样本 数量为数据波段数的10—30倍【1m111,或者在此基础 上越多越好。 面向对象遥感影像分类方法也是一种监督分 类,即需要在已知类别的训练场地上提取各类训练 样本,通过选择特征变量、确定判别函数或判别规 则,从而把影像中的各个影像对象划归到各个给定 的类别。而水体类别类 内方差小,分类精度随着样本数量的增加,很快进入 平稳阶段,而且水体在较少的波段数目时(2个)分 类精度明显高于其他类别,说明了数据的复杂程度 对样本数目选择存在显著的影响。

一、Kmeans原理

1. 输入:一组数据data,设定需要聚类的类别数目ClusterCnt,设定迭代次数IterCnt,以及迭代截止精度eps

输出:数据data对应的标签label,每一个数据都会对应一个label(范围0 ~ ClusterCnt-1),表示该数据属于哪一类。

2. 首先,选取初始ClusterCnt个质心位置,选取初始质心位置很重要。一般原则是这ClusterCnt个质心在数值上相互差别越远越好(距离越大越好)。偷懒的做法就是随机选取,或者是选取前面ClusterCnt个数据作为初始质心。但是前提是初始质心数值不能存在重复或者相等的情况。

3. 开始聚类,这是一个迭代过程。先针对每一个数据,计算其与每个质心之间的距离(差别)

c语言环境下opencv图像K均值聚类,图像处理中kmeans聚类算法C++实现_第2张图片

4. 计算新的质心。每一次迭代完成后,计算每个类别中数据中的均值,将此均值作为新的质心,进行下一轮的迭代。这样每一轮迭代后都会重新计算依次质心。直到满足5中的条件。

5. 每次迭代后,计算每个类别中数值的方差值图像聚类算法,然后求出所有类别方差值得均值var,将var作为一个判别准则,当本次var与上次var之间的变化小于eps时,或者迭代次数大于iterCnt时,停止迭代,聚类完成。

6. 输出数据的标签。相同标签值得被kmeans聚为一类,这样所有数据就被聚类为设定的ClusterCnt个类别。

二、图像中的应用

局部特征量例如包括对象块图像bo的像素值(y分量、u分量、v分量)各自的平均值以及方差值、对象块图像bo中的横方向的边缘尺寸以及纵方向的边缘尺寸、对象块图像bo中的横方向的边缘尺寸以及纵方向的边缘尺寸之比、对象块图像bo中的y分量的直方图或对象块图像bo的像素值与肤色的相似度。邻近特征量例如包括周边块图像bi b8的局部特征量、将周边块图像b4、b5合并后的像素值(y、u、v)的平均值以及方差值、或将周边块图像b6、b8合并后的像素值(y、u、v)的平均值以及方差值。psychtooboxlihan chen2015.4.28matlab 图像刺激图像处理图像基础图像的变换与操纵计算生成图像图像基础像素、颜色、索引图像图像基础——像素数字图像离散的坐标:像素离散的强度:0~255 (黑~白)图像基础——颜色rgb颜色系统每个像素的红、绿、蓝均由uint8表示 (0~255)alpha通道:透明度24位/32位真彩色imtool(' photo.jpg')。

OpenCV中也集成有Kmeans算法的API,如下图,其选取初始质心有三种flag可以设置,随机选取、某种算法选取、用户设定。具体使用方法请参考OpenCV文档。

c语言环境下opencv图像K均值聚类,图像处理中kmeans聚类算法C++实现_第3张图片

三、示例

原图 kmeans聚类 (10类)

四、代码

见我的码云code:https://gitee.com/rxdj/myKmeans.git

本文来自电脑杂谈,转载请注明本文网址:

http://www.pc-fly.com/a/jisuanjixue/article-109867-1.html

你可能感兴趣的:(c语言环境下opencv图像K均值聚类,图像处理中kmeans聚类算法C++实现)