之前写过一篇使用R语言对卫星影像进行kmeans聚类的文章,本文来个python版本的。

Python版的没有R语言版本的简单(代码多了一些),但是通过Python版的学习可以清楚了解到对卫星影像进行分类的整个流程。因为Python在机器学习/深度学习方面比较通用,学会了本文之后,就学会了任何基于机器学习对卫星影像进行分类的流程,只需要换下中间的分类算法即可。

公众号《GIS与Climate》,分享R、Python、GIS和Climate的相关技术,求关注。

导入需要的包

因为本文用的是kmeans算法,也没什么高大上的,需要的包也就比较少:

import rasterio as riofrom rasterio.plot import showfrom sklearn import clusterimport matplotlib.pyplot as pltimport numpy as npimport matplotlib.colors as mc

读取数据

我们用rasterio包来读取栅格数据(这里以tif格式作为示例):

rs = rio.open('./landsat8/LC81970242014109LGN00.tif')  

可视化一下:

rs_data = rs.read() vmin, vmax = np.nanpercentile(rs_data, (2, 98))plt.figure()show(rs, vmin=vmin, vmax=vmax,cmap="gist_ncar")plt.show()

  • 直接使用rasterio包的show函数也可以,但是按照上面的三个步骤更有助于养成使用matplotlib的基本习惯;
  • 上面对数据可视化的时候进行了线性拉伸,可以自行调整(避免图像很亮或者很暗);

数据预处理

原数据读取之后是numpy.ndarray格式的,其shape不符合我们一般进行机器学习的要求,所以要先reshape成我们需要的数据。在这之前,我们先transpose一下,方便后面进行reshape:

rs_data_trans = rs_data.transpose(1,2,0)rs_data.shape, rs_data_trans.shape>> ((7, 694, 757), (694, 757, 7))

这样子我们就把波段放在了最后一个维度,然后直接把矩阵reshape成机器学习中常用的表格形状:

rs_data_1d = rs_data_trans.reshape(-1, rs_data_trans.shape[2])rs_data_1d.shape>> (525358, 7)
  • 上面的其实就可以理解为我们平时读取csv之后的形状,每一行代表一个记录(这里就是一个像元),每一列代表一个特征(这里就是各个波段的像元值);
  • 因为kmeans是非监督学习,所以没有label,如果用其他算法,把label进行相同的处理即可;

建立模型

然后我们用sklearn建立模型:

cl = cluster.KMeans(n_clusters=4) # create an object of the classifierparam = cl.fit(rs_data_1d) # train it

获取结果

在获取了模型的分类结果之后,我们把它的形状重新还原成与原始影像相同的(只不过只有一个波段),方便后面保存为tif数据:

img_cl = cl.labels_ img_cl = img_cl.reshape(rs_data_trans[:,:,0].shape) 

聚类结果

保存结果

然后把矩阵保存为tif格式的结果,方便进行出图:

prof = rs.profileprof.update(count=1)with rio.open('result.tif','w',**prof) as dst:    dst.write(img_cl, 1)

分类前后对比

进行可视化查看分类前后的数据:

fig, (ax1,ax2) = plt.subplots(figsize=[15,15], nrows=1,ncols=2)show(rs, cmap='gray', vmin=vmin, vmax=vmax, ax=ax1)show(img_cl, ax=ax2)ax1.set_axis_off()ax2.set_axis_off()fig.savefig("pred.png", bbox_inches='tight')plt.show()

分类结果

总结

按照上面的流程,我们很容易就可以使用一个机器学习方法对影响进行分类,只不过上面使用的是非监督分类,如果有样点数据的话,可以用监督分类的方法进行,只需要更换中间的模型部分即可,是不是so easy!

公众号《GIS与Climate》,分享R、Python、GIS和Climate的相关技术。

求赞求关注!


参考

【1】https://scikit-learn.org.cn/
【2】https://towardsdatascience.com/sentinel-2-image-clustering-in-python-58f7f2c8a7f6

本文由 mdnice 多平台发布

python:使用机器学习算法对卫星遥感影像进行分类相关推荐

  1. 【图像分割】卫星遥感影像道路分割:D-LinkNet算法解读

    前言 因为毕设中的部分内容涉及到卫星遥感影像道路分割,因此去对相关算法做了一些调研. 本文所使用数据集为DeepGlobe,来自于CVPR2018年的一个挑战赛:DeepGlobe Road Extr ...

  2. 数学推导+纯Python实现机器学习算法:GBDT

    Datawhale推荐 作者:louwill,Machine Learning Lab 时隔大半年,机器学习算法推导系列终于有时间继续更新了.在之前的14讲中,笔者将监督模型中主要的单模型算法基本都过 ...

  3. NLP之ASR:基于python和机器学习算法带你玩转的语音实时识别技术

    NLP之ASR:基于python和机器学习算法带你玩转的语音实时识别技术 导读 带你玩转python实现的语音实时识别技术(包括音频混音.回声消除.噪音滤除.杂音消除.静音检测等方法) 视频观看: 软 ...

  4. 【机器学习基础】数学推导+纯Python实现机器学习算法30:系列总结与感悟

    Python机器学习算法实现 Author:louwill Machine Learning Lab 终于到了最后的总结.从第一篇线性回归的文章开始到现在,已经接近有两年的时间了.当然,也不是纯写这3 ...

  5. 【机器学习基础】数学推导+纯Python实现机器学习算法24:HMM隐马尔可夫模型

    Python机器学习算法实现 Author:louwill Machine Learning Lab HMM(Hidden Markov Model)也就是隐马尔可夫模型,是一种由隐藏的马尔可夫链随机 ...

  6. 【机器学习基础】数学推导+纯Python实现机器学习算法28:CRF条件随机场

    Python机器学习算法实现 Author:louwill Machine Learning Lab 本文我们来看一下条件随机场(Conditional Random Field,CRF)模型.作为概 ...

  7. 【机器学习基础】数学推导+纯Python实现机器学习算法27:EM算法

    Python机器学习算法实现 Author:louwill Machine Learning Lab 从本篇开始,整个机器学习系列还剩下最后三篇涉及导概率模型的文章,分别是EM算法.CRF条件随机场和 ...

  8. 【机器学习基础】数学推导+纯Python实现机器学习算法26:随机森林

    Python机器学习算法实现 Author:louwill Machine Learning Lab 自从第14篇文章结束,所有的单模型基本就讲完了.而后我们进入了集成学习的系列,整整花了5篇文章的篇 ...

  9. 【机器学习基础】数学推导+纯Python实现机器学习算法25:CatBoost

    Python机器学习算法实现 Author:louwill Machine Learning Lab 本文介绍GBDT系列的最后一个强大的工程实现模型--CatBoost.CatBoost与XGBoo ...

最新文章

  1. GPUImage滤镜之锐化
  2. 实战SSM_O2O商铺_43【前端展示】店铺详情页面从后端到前端的实现
  3. ORM多表查询——关联查询
  4. 33 个送给 Java 程序员的练手项目合集
  5. 相亲对象能有多油腻......
  6. 要求将数组中的0项去掉,将不为0的值存入一个新的数组,
  7. dnf加物理攻击的卡片有哪些_DNF:节日宝珠之外百分比神器附魔,拍卖行100w,实用不氪金...
  8. 从小白到区块链工程师:第一阶段:Go语言的HelloWorld初始(2)
  9. cnblog之初来乍到
  10. pythonsqlite3模糊_让 Python 更加充分的使用 Sqlite3
  11. 【自考】-计算机网络原理
  12. 百度云盘不限速下载大文件(2021-11亲测有效)
  13. 电商后台管理项目知识点总结
  14. SDN亟需一个WinTel联盟
  15. C++扫雷小游戏(附赠源代码)
  16. commit规范使用gitmoji全流程 cz-customizable+commitlint+husky+conventional-changelog
  17. 快狗打车CTO沈剑:数据库架构一致性最佳实践
  18. 隐藏Windows系统托盘图标
  19. component: resolve = require(['@/view/index.vue'], resolve) 与component: index区别
  20. 【其他】【RQNOJ】同分异构体

热门文章

  1. vue+js练手前端项目->游戏平台(贪吃蛇、俄罗斯方块、飞机大战、飞翔的小鸟、2048、五子棋)
  2. BRITS: Bidirectional Recurrent Imputation for Time Series(时间序列的双向递归填补)论文详解
  3. 基于STM32的四足机器人
  4. 微信支付v3 AEAD_AES_256_GCM解密JS版本代码及验证 javascript
  5. 5.22 使用筛选功能快速过滤指定条件的数据 [原创Excel教程]
  6. 巴比特 | 元宇宙每日必读:一文了解虚拟人的3大业务方向和7种赚钱方式
  7. 医院在线预约挂号系统开源
  8. 【如何从外观上区分网线的五类线、超五类线和六类线?】
  9. UE4 GamePlay架构学习篇
  10. Js打开QQ聊天对话窗口