利用KMeans进行遥感NDWI进行聚类分割

2024-05-14 15:52

本文主要是介绍利用KMeans进行遥感NDWI进行聚类分割,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

(1)解释

KMeans算法是一种非监督式的聚类算法,于1967年由J. MacQueen提出,聚类的依靠是欧式距离,其核心思想就是将样本划分为几个类别,类里面的数据与类中心的距离最小。类的标签采用类里面样本的均值。

这里利用KMeans进行遥感NDWI归一化水体指数进行简单的聚类分析,主要目的就是聚类出流域和非流域,簇类数为2。手动分割阈值为-0.06,效果和KMeans差不多,若是人为调参太麻烦,可以考虑KMeans进行分割,分割效果如下。

在这里插入图片描述

此程序可以进行常规遥感图像的聚类,但可能代码需做小幅度调整。

(2)源码

#!/usr/bin/env python
# -*- coding:utf-8 -*-
"""
@author: 楠楠星球
@time: 2024/5/13 15:12 
@file: kmeans.py-->test
@project: pythonProject
@# ------------------------------------------(one)--------------------------------------
@# ------------------------------------------(two)--------------------------------------
"""
from matplotlib.image import imread
import matplotlib.pyplot as plt
import numpy as np
from PIL import Image
from sklearn.cluster import KMeans, k_means# img =imread('NDWI.tif')
img = Image.open('NDWI.tif') #读取的landsat全色影像,若是彩色图像请在此句后面加上.convert("RGB")
NDWI = Image.open('ndwi_006.tif')
img = np.array(img) #转为矩阵
img_bands = 1   #图像的波段或者深度
image = img.reshape(-1, img_bands) #更改图像维度seg_images = [] #存放处理结果
n_clusters = 2  #要聚类的簇类数# 随机生成颜色矩阵
colors = [np.random.randint(0, 255, size=(1, img_bands)) for _ in range(n_clusters)]
# 利用KMeans类进行聚类处理,n_clusters表示簇类数,random_state表示随机种子,n_init='auto'为了防止报错,调用.fit()方法进行处理
Kmeans_res = KMeans(n_clusters=n_clusters,random_state=1000, n_init='auto').fit(image)
# 获取簇的质心
cluster_centers = Kmeans_res.cluster_centers_# 也可利用k_means函数进行处理
# Kmeans_res = Cluster(X=image,n_clusters = 8,random_state=40,n_init='auto')
# cluster_centers = Kmeans_res[0]# 获取簇类中元素的标签
cluster_labels = cluster_centers[Kmeans_res.labels_]
same = np.unique(cluster_labels, axis=0) #查找每一个簇类的标签num = 0 #记数
for color in colors:for index,row in enumerate(cluster_labels):equal = np.array_equal(row, same[num])if equal == True:cluster_labels[index] = colors[num][0]else:continuenum += 1
cluster_image = cluster_labels.reshape(img.shape)
seg_images.append(cluster_image.astype(np.uint8))plt.figure(figsize=(10,5))
plt.subplot(131)
plt.imshow(img,cmap='gray')
plt.title("NDWI_ori_img")
plt.subplot(132)
if n_clusters == 2:plt.imshow(cluster_image/255, cmap='gray')
else:plt.imshow(cluster_image/255)
plt.title("NDWI_Kmeans_img")plt.subplot(133)
plt.imshow(NDWI,cmap='gray')
plt.title('NDWI_img--number:-0.06')
plt.show()

这篇关于利用KMeans进行遥感NDWI进行聚类分割的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

利用python实现对excel文件进行加密

《利用python实现对excel文件进行加密》由于文件内容的私密性,需要对Excel文件进行加密,保护文件以免给第三方看到,本文将以Python语言为例,和大家讲讲如何对Excel文件进行加密,感兴... 目录前言方法一:使用pywin32库(仅限Windows)方法二:使用msoffcrypto-too

Pandas使用AdaBoost进行分类的实现

《Pandas使用AdaBoost进行分类的实现》Pandas和AdaBoost分类算法,可以高效地进行数据预处理和分类任务,本文主要介绍了Pandas使用AdaBoost进行分类的实现,具有一定的参... 目录什么是 AdaBoost?使用 AdaBoost 的步骤安装必要的库步骤一:数据准备步骤二:模型

使用Pandas进行均值填充的实现

《使用Pandas进行均值填充的实现》缺失数据(NaN值)是一个常见的问题,我们可以通过多种方法来处理缺失数据,其中一种常用的方法是均值填充,本文主要介绍了使用Pandas进行均值填充的实现,感兴趣的... 目录什么是均值填充?为什么选择均值填充?均值填充的步骤实际代码示例总结在数据分析和处理过程中,缺失数

Python实现图片分割的多种方法总结

《Python实现图片分割的多种方法总结》图片分割是图像处理中的一个重要任务,它的目标是将图像划分为多个区域或者对象,本文为大家整理了一些常用的分割方法,大家可以根据需求自行选择... 目录1. 基于传统图像处理的分割方法(1) 使用固定阈值分割图片(2) 自适应阈值分割(3) 使用图像边缘检测分割(4)

QT进行CSV文件初始化与读写操作

《QT进行CSV文件初始化与读写操作》这篇文章主要为大家详细介绍了在QT环境中如何进行CSV文件的初始化、写入和读取操作,本文为大家整理了相关的操作的多种方法,希望对大家有所帮助... 目录前言一、CSV文件初始化二、CSV写入三、CSV读取四、QT 逐行读取csv文件五、Qt如何将数据保存成CSV文件前言

Python如何将大TXT文件分割成4KB小文件

《Python如何将大TXT文件分割成4KB小文件》处理大文本文件是程序员经常遇到的挑战,特别是当我们需要把一个几百MB甚至几个GB的TXT文件分割成小块时,下面我们来聊聊如何用Python自动完成这... 目录为什么需要分割TXT文件基础版:按行分割进阶版:精确控制文件大小完美解决方案:支持UTF-8编码

通过Spring层面进行事务回滚的实现

《通过Spring层面进行事务回滚的实现》本文主要介绍了通过Spring层面进行事务回滚的实现,包括声明式事务和编程式事务,具有一定的参考价值,感兴趣的可以了解一下... 目录声明式事务回滚:1. 基础注解配置2. 指定回滚异常类型3. ​不回滚特殊场景编程式事务回滚:1. ​使用 TransactionT

Java中使用Hutool进行AES加密解密的方法举例

《Java中使用Hutool进行AES加密解密的方法举例》AES是一种对称加密,所谓对称加密就是加密与解密使用的秘钥是一个,下面:本文主要介绍Java中使用Hutool进行AES加密解密的相关资料... 目录前言一、Hutool简介与引入1.1 Hutool简介1.2 引入Hutool二、AES加密解密基础

SpringSecurity6.0 如何通过JWTtoken进行认证授权

《SpringSecurity6.0如何通过JWTtoken进行认证授权》:本文主要介绍SpringSecurity6.0通过JWTtoken进行认证授权的过程,本文给大家介绍的非常详细,感兴趣... 目录项目依赖认证UserDetailService生成JWT token权限控制小结之前写过一个文章,从S

使用Jackson进行JSON生成与解析的新手指南

《使用Jackson进行JSON生成与解析的新手指南》这篇文章主要为大家详细介绍了如何使用Jackson进行JSON生成与解析处理,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. 核心依赖2. 基础用法2.1 对象转 jsON(序列化)2.2 JSON 转对象(反序列化)3.