基于K-means与CNN的遥感影像分类方法

基于K-means与CNN的遥感影像分类
一、引言
1.研究背景
航天遥感技术是一种通过卫星对地观测获取遥感图像信息数据的技术,这些图像数据在各领域都发挥着不可或缺的作用。遥感图像分类主要是根据地面物体电磁波辐射在遥感图像上的特征,判断识别地面物体的属性,进而为目标检测与识别等其他应用提供辅助信息,也可以作为最终结果提供基础地理信息用于地图绘测、抢险救灾、军事侦察等领域。遥感影像分类是遥感技术应用的一个重要环节。
遥感影像分类就是利用计算机通过对遥感图像中各类地物的光谱信息和空间信息进行分析,选择特征,将图像中各个像元按照某种规则或算法划分不同的类别,然后获得遥感图像中与实际地物的对应信息,从而实现图像的分类。遥感图像计算机分类的依据是遥感图像像素的相似度。常使用距离和相关系数来衡量相似度。常见的分类方法有:监督分类、非监督分类法
2.研究内容
各方面学者对遥感图像的分类有着诸多研究,提出了许多分类方法,按是否需要选取标记样本可将分类方法分为监督分类和非监督分类。根据最小分类单元可将分类方法分为基于像元的分类、基于对象的分类,以及基于混合像元分解的分类。此外,不同类型的遥感图像(多光谱遥感图像、高光谱遥感图像、合成孔径雷达图像) 分类方法也不尽相同。由于目标分类通常是在特征空间中进行的,因此特征的表达与学习是实现目标分类的关键。根据表达和学习特征的方式,可将现有的遥感图像分类方法大致分为三类: 基于人工特征描述的分类方法、基于机器学习的分类方法和基于深度学习的分类方法。需要注意的是,这三类方法并没有严格的区分界线,相互之间互有重叠和借鉴。本次研究分别使用了一种机器学习和一种深度学习方法进行模型的构建。

二、分类方法

  1. K-means算法
    K-means算法是一种较典型的逐点修改迭代的动态聚类算法,也是一种普遍采用的方法,其要点是以误差平方和为准则函数。一般的作法是先按某些原则选择一些代表点作为聚类的核心,然后把其余的待分点按某种方法(判据准则)分到各类中去,完成初始分类。初始分类完成以后,重新计算各聚类中心,完成了第一次迭代。然后修改聚类中心,以便进行下一次迭代。这种修改有两种方案,即逐点修改和逐批修改。逐点修改类中心就是一个像元样本按某一原则归属于某一组类后,就要重新计算这个组类的均值,并且以新的均值作为凝聚中心点进行下一次像元聚类。逐批修改类中心就是在全部像元样本按某一组的类中心分类之后,再计算修改各类的均值,作为下一次分类的凝聚中心点。
    代码展示:
rs_data_trans = rs_data.transpose(1,2,0) 
rs_data.shape, rs_data_trans.shape 
rs_data_1d = rs_data_trans.reshape(-1, rs_data_trans.shape[2]) 
rs_data_1d.shape
cl = cluster.KMeans(n_clusters=4) # create an object of the classifier 
param = cl.fit(rs_data_1d) # train it 
img_cl = cl.labels
img_cl = img_cl.reshape(rs_data_trans[:,:,0].shape) 
prof = rs.profile 
prof.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()

K-means分类结果(红色:耕地,绿色:森林,蓝色:水体),如图所示:
在这里插入图片描述

  1. CNN算法
    CNN卷积网络采用“端对端”的特征学习,通过多层处理机制揭示隐藏于数据中的非线性特征,能够从大量训练集中自动学习全局特征(这种特征被称为“学习特征”),是其在遥感影像自动目标识别取得成功的重要原因,也标志特征模型从手工特征向学习特征转变。本次实验CNN网络架构中设计了四层卷积+池化,然后使用Relu激活函数,最后采用Softmax进行归一化处理计算每个目标类别在所有可能的目标类中的概率,即可对输入的图片进行分类。
    代码展示:
# 设计模型: CNN + maxpool 
model = tf.keras.models.Sequential([     
# 我们的数据是150x150而且是三通道的,所以我们的输入应该设置为这样的格式。     tf.keras.layers.Conv2D(32, (3, 3), 
activation='relu', 
input_shape=(256, 256, 3)),     
tf.keras.layers.MaxPooling2D(2, 2),     
tf.keras.layers.Conv2D(64, (3, 3), 
activation='relu'),     
tf.keras.layers.MaxPooling2D(3, 3),    
tf.keras.layers.Conv2D(128, (3, 3), 
activation='relu'),     
tf.keras.layers.MaxPooling2D(2, 2),     
tf.keras.layers.Conv2D(128, (3, 3), 
activation='relu'),     
tf.keras.layers.MaxPooling2D(2, 2),     
tf.keras.layers.Flatten(),     # 512 neuron hidden layer     
tf.keras.layers.Dense(512, activation='relu'),     
tf.keras.layers.Dense(21, activation='softmax') #'sigmoid' ])

对以下图进行识别,输出为森林类别(It is forest),如图所示:
在这里插入图片描述

三、总结
深度学习在计算机视觉领域的巨大成功,遥感智能分析提供了重要机遇;机器学习创新,也为遥感影像分类带来更多思路。近年来这些算法被广泛应用在遥感领域,在大范围目标自动快速检测、复杂场景精细分类、地表参数快速识别等方面展示了巨大优势和发展潜力,不断提升智能影像分类效率与质量,为遥感大数据的智能信息提取带来发展契机。
遥感大数据是时空科技发展的新阶段,遥感图像分类、量化、预测,已经由传统的统计数学分析、定量遥感建模分析逐渐向数据驱动的智能分析转变。以智能分析为标志的遥感大数据时代已经到来,如何广泛、深化其应用,还值得产业界、学术界不断探索。但其无疑将在空天产业、智慧城市、政企数字化各领域带来一场深刻变革。

代码:
CNN:
https://gitee.com/A-xinss/cnn-to-remote-sensing-image-classification
CNN-进阶版
K-Means:
https://gitee.com/A-xinss/k-means-to-remote-sensing-image-classification

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/217978.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

推荐算法:HNSW【推荐出与用户搜索的类似的/用户感兴趣的商品】

HNSW算法概述 HNSW(Hierarchical Navigable Small Word)算法算是目前推荐领域里面常用的ANN(Approximate Nearest Neighbor)算法了。其目的就是在极大量的候选集当中如何快速地找到一个query最近邻的k个元素。 要找到一个query的…

uniapp微信小程序点击保存图片

一:需要用到的API 1.uni.uploadFile(OBJECT) 将本地资源上传到开发者服务器 uni.uploadFile(OBJECT) | uni-app官网 2. uni.saveImageToPhotosAlbum(OBJECT) 保存图片到系统相册。 uni.chooseImage(OBJECT) | uni-app官网 注意:微信小程序在2023年…

【参数汇总】mysql服务端/客户端常见优化参数

mysql服务端参数 1、innodb_buffer_pool_size (innodb索引buffer pool缓冲区大小) 默认大小为128M, 官方推荐其配置为系统内存的 50% 到 75% 。 一般innodb_buffer_pool_size要结合以下两个参数来设置: innodb_buffer_pool_ch…

【1.计算机组成与体系结构】浮点数的表示

目录 1.浮点数的表示2.运算过程3.特点 1.浮点数的表示 N尾数*基数(指数/也称为阶码) 例如:1.25x105 ; 1.255x103 2.运算过程 对阶>尾数计算>结果格式化 3.特点 1、一般尾数用补码,阶码用移码 2、阶码的位数决定数的表示范围,位数越…

本地部署 Qwen-Audio-Chat

本地部署 Qwen-Audio-Chat Qwen-Audio-Chat 介绍Qwen-Audio Github 地址部署 Qwen-Audio-Chat安装 ffmpeg克隆代码库创建虚拟环境使用 pip 安装 pytorch使用 pip 安装依赖使用 ModelScope运行 Web UI Qwen-Audio-Chat 介绍 Qwen-Audio-Chat是通用语音多模态大规模语言模型&…

Spring Boot 3 整合 Mybatis-Plus 动态数据源实现多数据源切换

🚀 作者主页: 有来技术 🔥 开源项目: youlai-mall 🍃 vue3-element-admin 🍃 youlai-boot 🌺 仓库主页: Gitee 💫 Github 💫 GitCode 💖 欢迎点赞…

什么是循环依赖,如何解决

目录 什么是循环依赖? 循环依赖的原因: 如何解决循环依赖问题? 最佳实践和注意事项: 结论: 当在使用 Spring Boot 进行开发时,循环依赖(Circular Dependency)可能会成为一个常见…

广东省工业和信息化厅工业互联网处一行莅临科东软件考察调研

近日,广东省工业和信息化厅工业互联网处副处长郑华、广东省科学院智能制造研究所副所长曹永军等一行领导、专家莅临科东软件,就聚焦工业数字化转型,助推新型工业化高质量发展进行考察调研。 科东软件陪同郑华副处长一行参观科东软件展厅&…

学习笔记——GDB调试器

感谢B站up主 xiaobing1016 的学习视频:基于VSCode和CMake实现C/C开发 | Linux篇_哔哩哔哩_bilibili

Redis缓存异常问题,常用解决方案总结

前言 Redis缓存异常问题分别是:1.缓存雪崩。2.缓存预热。3.缓存穿透。4.缓存降级。5.缓存击穿,以 及对应Redis缓存异常问题解决方案。 1.缓存雪崩 1.1、什么是缓存雪崩 如果缓存集中在一段时间内失效,发生大量的缓存穿透,所有…

华为OD试题一(磁盘容量排序、数大雁、计算疫情扩散时间)

1. 磁盘容量排序 题目描述:磁盘的容量单位常用的有M,G,T这三个等级,它们之间的换算关系为1T 1024G,1G 1024M,现在给定n块磁盘的容量,请对它们按从小到大的顺序进行稳定排序,例如给…

TUP实现一对一聊天

package TCP; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.ServerSocket; import java.net.Socket; import java.util.Scanner; /** * 发送消息线程 */ class Send ext…

道可云元宇宙每日资讯|上海市区块链关键技术攻关专项项目立项清单公布

道可云元宇宙每日简报(2023年12月11日)讯,今日元宇宙新鲜事有: 上海市2023年度区块链关键技术攻关专项项目立项清单公布 据上海市科学技术委员会近日发布通知,上海市2023年度“科技创新行动计划”区块链关键技术攻关…

Appium 自动化测试 —— Appium的环境搭建与设置流程!

1、Appium 环境搭建: 学习 appium 最大的难处之一在于环境的安装,安装流程比较繁琐,安装的工具和步骤也较多,以下是基于 Windows 系统下的 Android 手机端的安装流程。就像我们在用 Selenium 进行 web 自动化测试的时候一样&…

Python键鼠控制之PyAutoGUI方法

前言 PyAutoGUI 是一个 Python 库,用于在桌面应用程序中自动化鼠标和键盘操作。它提供了一组简单而强大的方法,使得开发者可以编写脚本来模拟用户的鼠标点击、键盘输入以及屏幕截图等操作。PyAutoGUI 可以用于自动化重复性任务、测试 GUI 应用程序、创建…

如何通过3D人脸扫描设备制作一个3D超写实虚拟人?

随着虚拟技术的快速发展,现如今的虚拟人逐渐逼真,比二次元虚拟偶像更接近真人形象的3D超写实虚拟人,拥有着更逼真的面部表情,更完美地融入于虚实画面。 随着3D人脸扫描设备不断发展,大大降低了高难度的3D超写实虚拟人…

Django 模型操作(六)

Django通过Model操作数据库, 不管你数据库的类型是MySql或者Sqlite, Django自动帮你生成相应数据库类型的SQL语句,所以不需要关注SQL语句和类型,对数据的操作Django帮我们自动完成。只要会写Model就可以了。 django使用对象关系映射 (Object Relational Mapping, 简称ORM)框…

FPGA UltraScale GTY 全网最细讲解,aurora 8b/10b编解码,HDMI视频传输,提供vivado工程源码和技术支持

目录 1、前言免责声明 2、我这里已有的 GT 高速接口解决方案3、详细设计方案设计框图视频源选择ADV7611解码芯片配置及采集动态彩条视频数据组包UltraScale GTY 全网最细解读UltraScale GTY 基本结构UltraScale GTY 参考时钟的选择和分配UltraScale GTY 发送和接收处理流程Ultr…

Datawhale聪明办法学Python(task2Getting Started)

一、课程基本结构 课程开源地址:课程简介 - 聪明办法学 Python 第二版 章节结构: Chapter 0 安装 InstallationChapter 1 启航 Getting StartedChapter 2 数据类型和操作 Data Types and OperatorsChapter 3 变量与函数 Variables and FunctionsChapte…

微积分-三角函数

三角函数 在处理微积分问题时,我们不可避免的会遇到三角函数。学会三角函数对于微积分是非常重要的。 基本知识 学习三角函数我们需要先学习一些基本知识。 首先要学习的是弧度的概念。弧度是一种角的度量单位,用于测量角的大小。它是根据角所对的弧长…