C#+GDAL实现K-means非监督分类

本文介绍了使用C#结合GDAL库实现K-means无监督聚类的方法,详细阐述了K-means算法的过程,并展示了对图像进行聚类后的效果。
摘要由CSDN通过智能技术生成

1、K-means简介

k-means是一种无监督的学习,事先不知道类别,自动将相似的对象归到同一个簇中,它是一种聚类分析(cluster analysis)的算法,其主要是来计算数据聚集的算法,主要通过不断地取离种子点最近均值的算法。

先随机选取K个对象作为初始的聚类中心。然后计算每个对象与各个种子聚类中心之间的距离,把每个对象分配给距离它最近的聚类中心。聚类中心以及分配给它们的对象就代表一个聚类。一旦全部对象都被分配了,每个聚类的聚类中心会根据聚类中现有的对象被重新计算。经过反复迭代,直到聚类中心变化极小,输出最终的聚类结果。

 本文是对图像进行进行聚类,事先通过GDAL读取图像的数据,如何进行k-means迭代并保存为新图像。话不多说,直接上代码。

2、K-means实现过程

2.1 获取Dataset数据

  public static List<int[]> GetDNdata(Dataset dataset)//将各像元DN数据存入数组方便计算
        {
            int xSize = dataset.RasterXSize;
            int ySize = dataset.RasterYSize;

            List<int[]> idata = new List<int[]>();

            for (int i = 0; i < dataset.RasterCount; i++)
            {
                int[] bf = new int[xSize * ySize];
                dataset.GetRasterBand(i + 1).ReadRaster(0, 0, xSize, ySize, bf, xSize, ySize, 0, 0);
                idata.Add(bf);
            }
            return idata;
        }

 2.2 k-means静态函数

 /// <summary>
        /// K均值聚类(K-means)
        /// </summary>
        /// <param name="dt">原图数据集</param>
        /// <param name="threshold">迭代阈值</param>
        /// <param name="K">聚类数量</param>
        /// <param name="filepath">保存路径</par
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值