python:使用机器学习算法对卫星遥感影像进行分类
之前写过一篇使用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:使用机器学习算法对卫星遥感影像进行分类相关推荐
- 【图像分割】卫星遥感影像道路分割:D-LinkNet算法解读
前言 因为毕设中的部分内容涉及到卫星遥感影像道路分割,因此去对相关算法做了一些调研. 本文所使用数据集为DeepGlobe,来自于CVPR2018年的一个挑战赛:DeepGlobe Road Extr ...
- 数学推导+纯Python实现机器学习算法:GBDT
Datawhale推荐 作者:louwill,Machine Learning Lab 时隔大半年,机器学习算法推导系列终于有时间继续更新了.在之前的14讲中,笔者将监督模型中主要的单模型算法基本都过 ...
- NLP之ASR:基于python和机器学习算法带你玩转的语音实时识别技术
NLP之ASR:基于python和机器学习算法带你玩转的语音实时识别技术 导读 带你玩转python实现的语音实时识别技术(包括音频混音.回声消除.噪音滤除.杂音消除.静音检测等方法) 视频观看: 软 ...
- 【机器学习基础】数学推导+纯Python实现机器学习算法30:系列总结与感悟
Python机器学习算法实现 Author:louwill Machine Learning Lab 终于到了最后的总结.从第一篇线性回归的文章开始到现在,已经接近有两年的时间了.当然,也不是纯写这3 ...
- 【机器学习基础】数学推导+纯Python实现机器学习算法24:HMM隐马尔可夫模型
Python机器学习算法实现 Author:louwill Machine Learning Lab HMM(Hidden Markov Model)也就是隐马尔可夫模型,是一种由隐藏的马尔可夫链随机 ...
- 【机器学习基础】数学推导+纯Python实现机器学习算法28:CRF条件随机场
Python机器学习算法实现 Author:louwill Machine Learning Lab 本文我们来看一下条件随机场(Conditional Random Field,CRF)模型.作为概 ...
- 【机器学习基础】数学推导+纯Python实现机器学习算法27:EM算法
Python机器学习算法实现 Author:louwill Machine Learning Lab 从本篇开始,整个机器学习系列还剩下最后三篇涉及导概率模型的文章,分别是EM算法.CRF条件随机场和 ...
- 【机器学习基础】数学推导+纯Python实现机器学习算法26:随机森林
Python机器学习算法实现 Author:louwill Machine Learning Lab 自从第14篇文章结束,所有的单模型基本就讲完了.而后我们进入了集成学习的系列,整整花了5篇文章的篇 ...
- 【机器学习基础】数学推导+纯Python实现机器学习算法25:CatBoost
Python机器学习算法实现 Author:louwill Machine Learning Lab 本文介绍GBDT系列的最后一个强大的工程实现模型--CatBoost.CatBoost与XGBoo ...
最新文章
- GPUImage滤镜之锐化
- 实战SSM_O2O商铺_43【前端展示】店铺详情页面从后端到前端的实现
- ORM多表查询——关联查询
- 33 个送给 Java 程序员的练手项目合集
- 相亲对象能有多油腻......
- 要求将数组中的0项去掉,将不为0的值存入一个新的数组,
- dnf加物理攻击的卡片有哪些_DNF:节日宝珠之外百分比神器附魔,拍卖行100w,实用不氪金...
- 从小白到区块链工程师:第一阶段:Go语言的HelloWorld初始(2)
- cnblog之初来乍到
- pythonsqlite3模糊_让 Python 更加充分的使用 Sqlite3
- 【自考】-计算机网络原理
- 百度云盘不限速下载大文件(2021-11亲测有效)
- 电商后台管理项目知识点总结
- SDN亟需一个WinTel联盟
- C++扫雷小游戏(附赠源代码)
- commit规范使用gitmoji全流程 cz-customizable+commitlint+husky+conventional-changelog
- 快狗打车CTO沈剑:数据库架构一致性最佳实践
- 隐藏Windows系统托盘图标
- component: resolve = require(['@/view/index.vue'], resolve) 与component: index区别
- 【其他】【RQNOJ】同分异构体
热门文章
- vue+js练手前端项目->游戏平台(贪吃蛇、俄罗斯方块、飞机大战、飞翔的小鸟、2048、五子棋)
- BRITS: Bidirectional Recurrent Imputation for Time Series(时间序列的双向递归填补)论文详解
- 基于STM32的四足机器人
- 微信支付v3 AEAD_AES_256_GCM解密JS版本代码及验证 javascript
- 5.22 使用筛选功能快速过滤指定条件的数据 [原创Excel教程]
- 巴比特 | 元宇宙每日必读:一文了解虚拟人的3大业务方向和7种赚钱方式
- 医院在线预约挂号系统开源
- 【如何从外观上区分网线的五类线、超五类线和六类线?】
- UE4 GamePlay架构学习篇
- Js打开QQ聊天对话窗口